8724浏览
查看: 8724|回复: 4

[教程] Mind+Python turtle 课程——04 智能绘制的五角星

[复制链接]
本帖最后由 木子呢 于 2021-9-29 15:33 编辑

第四课 智能绘制的五角星

目录:


功能介绍

经过前面课程的学习,我们对海龟绘图有了进一步的了解,知道了如何利用turtle库中很多函数的使用,也学会了从一个正方形到复杂图形的转变。这节课,我们将学习使用自己创建函数来达到绘五角星的效果。首先,我们创建一个函数,函数内代码块的功能是画五角星的动作,之后,结合终端界面交互功能进行手动设置画笔的颜色和填充的颜色,最后调用创建的函数来实现智能绘制五角星的效果。课程会分为两个任务的形式进行,下表为课程任务及涉及到的知识点。

实现功能
知识点
任务一:绘制五角星
函数的创建与调用
任务二:设定画线和填充颜色
input()函数

项目实践

任务一:绘制五角星

1、任务分析

我们创建一个新的函数,在函数内部,我们设定画线颜色和填充颜色及绘制五角星的功能,最后,我们调用创建好的这个函数画五角星出来。下图为画五角星的过程。

Mind+Python turtle 课程——04 智能绘制的五角星图1
2、编写程序

代码如下:

from turtle import*#导入turtle库
def colorstar():#创建函数
    begin_fill()#开始填充
    for i in range(5):#循环5次
        forward(120)#前进100像素
        right(144)#右转144度
    end_fill()#填充完毕
colorstar()#调用函数
done()#用来停止画笔绘制,但绘图窗体不关闭

3、运行效果

运行此段程序,可以看到小箭头跑出了一个完整的黑色五角星。在这里,我们没有编写调用海龟造型这个语句,所以默认显示的是箭头形状。

Mind+Python turtle 课程——04 智能绘制的五角星图2

4、代码释义

4.1代码中from...import的使用

from turtle import *#导入turtle库
4.1.1代码解释
from...import表示从某一库中导入部分工具。在这行代码中,*表示所有,即我们将turtle库中的所有工具都导入进来。

4.1.2使用方法

from...import 语句的语法格式如下:

from name import member

其中,name表示库名称,比如我们之前画图时用到的库,它的库名称就是turtle,而member表示要导入的变量或者函数等工具。在这里,我们可以同时导入多个变量或者函数等,每个之间使用逗号“,”分隔开来。例如,from turtle import forward,left表示导入turtle库的forward函数和left函数。而如果要导入全部的工具,我们可以使用星号“*”来表示。例如,from turtle import *,就表示导入turtle库内的全部工具。

4.1.3导入库的两种方式
在此前,我们已经学习了通过“import+库名”的方式来一次性把库中的所有工具全部导入,例如“import turtle”就表示导入turtle库中的所有工具这里是另一种方式通过这种形式,我们在后续可以直接使用库的函数了,而不必再按照之前的“库名.函数名”的格式了。譬如,import turtle的形式导入库之后,我们要使用turtle.forward(100)这样的代码来表示前进100像素,而通过from turtle import *的形式导入库之后,我们使用forward(100)这句代码即可实现效果

4.2函数的创建与调用

def colorstar():#创建函数
......
colorstar()#调用函数

4.2.1代码解释
def关键字先创建了一个colorstar()函数,用来存放画五角星的功能,后面需要时通过colorstar()这个形式调用它就可以实现画五角星的功能了其中,关键字是python中已经被赋予特定意义的一些单词,比如import、deffrom

4.2.2函数的使用
对于函数,我们已经不陌生了,在前面我们已经学习过了range()函数,它是python语言自带的标准函数,也就是可以直接使用的函数。而除了可以直接使用的函数外,python还支持用户自己创建一个新的函数然后再调用。

4.2.3创建函数的方法
创建函数也称为定义函数,我们可以理解为创建一种具有某种特定用途的工具。可以通过使用def关键字实现,具体的语法书写格式如下:

def functionname():
[functionbody]

其中,“def”是英文“define”的缩写,表示创建和定义。“funtionname”是函数名称,在给函数命名时需注意函数名一律为小写英文而不能是中文,若有多个单词用下划线隔开。这里我们可以先给函数取个名字,然后通过这个名称来调用函数。functionbody”表示函数语句块在语句块内编写的是函数要实现的具体功能。而拥有相同缩进的程序,为一个语句块,所以在下面的程序中,函数语句块是从begin_fill()到end_fill()。

def colorstar():#创建函数
    begin_fill()#开始填充
    for i in range(5):#循环5次
        forward(120)#前进100像素
        right(144)#右转144度
    end_fill()#填充完毕
colorstar()#调用函数

4.2.4调用函数的方法
调用函数很简单,我们通过函数名()的形式即可完成对函数的调用。调用函数就相当于把自己创建的函数内的程序都执行一遍,当我们需要重复使用某一段程序时,通过创建函数的方式,可以起到简化代码的作用。

4.3 turtle库begin_fill()与end_fill()函数的使用

begin_fill()#开始填充
......
end_fill()#填充完毕

begin_fill()与end_fill()都是turtle库中的画笔控制命令,前者表示准备开始填充图形,后者表示填充完毕。

4.4turtle库done()函数的使用

done()#用来停止画笔绘制,但绘图窗体不关闭

在程序的最后,我们添加done()函数用来停止画笔绘制,但保留绘图窗体。在这里,我们使用done()函数而之前课程的exitonclick()函数,前者点击窗口关闭按钮才可退出程序的运行,后者只需在画布框内任意位置单机一下即可退出。

任务二:设定画线和填充颜色

1、任务分析

在任务一的程序中,我们通过函数的创建与调用实现了画五角星的效果。经过观察发现,我们的五角星的线条和填充颜色皆为黑色,那怎样才能随心所欲地给造型添加颜色呢?这里,我们通过input()输入函数在终端界面中来设定画线颜色和填充颜色,使图形更加漂亮。

2编写程序

代码如下:

from turtle import*#导入turtle库
a = input("输入画线颜色(回车键确认): ")#输入画线颜色
b = input("输入填充颜色(回车键确认): ")#输入填充颜色
def colorstar(a,b):#创建函数
    pencolor(a)#设定画笔颜色
    fillcolor(b)#设定填充颜色
    begin_fill()#开始填充
    for i in range(5):#循环五次
        forward(100)#前进100像素
        right(144)#右转144度
    end_fill()#结束填充
colorstar(a,b)#调用函数
done()#用来停止画笔绘制,但绘图窗体不关闭

3、运行效果

运行此段程序,可以看到终端中显示输入需求框,在这里,我们能按照自己的喜好进行画线颜色和填充颜色的设置。下图为我们输入的信息。

Mind+Python turtle 课程——04 智能绘制的五角星图3

输入完成后按回车键即可,最终效果图如下:

Mind+Python turtle 课程——04 智能绘制的五角星图4
4、代码释义

4.1input()输入函数的使用

a = input("输入画线颜色:")#输入画线颜色
b = input("输入填充颜色:")#输入填充颜色

4.1.1代码解释
在这里,我们创建两个变量a和b,分别用来存放在终端界面中输入的画线颜色和填充颜色。而我们函数中设计相关颜色的地方都用a和来表示,也达到了变量的一中功能,也就是只要更改变量初始值,那么程序内的内容也会相应的更改,达到一改全改的功能。

4.1.2input()函数的功能及用法

Python中,使用自带的input()函数可以接收用户的键盘输入。input()函数的基本用法如下:
variable = input(“提示文字)
其中,variable是保存输入结果的变量,双引号内的文字是给用户看的,用于提示要输入的内容的。例如,画圆时要提示用户设定圆的半径大小,可在双引号内写入输入圆的半径”。

4.2带参数的函数的创建与调用

def colorstar(a,b):#创建函数
......
colorstar(a,b)#调用函数

在任务一中,我们已经了解了如何创建函数和调用函数,经过观察发现,之前创建和调用的函数,它的括号内是空的,而这里却有a,b两个变量。事实上,通过这种形式创建的函数我们称之为带参数的函数,而括号内为空的函数我们称之为不带参数的函数。在函数内部,我们可以将参数理解为变量,在需要时进行数据处理。

4.3turtle库pencolor()函数和fillcolor()函数的使用

pencolor(a)#设定画线颜色
fillcolor(b)#设定填充颜色

pencolor()与fillcolor()都是turtle库的画笔控制命令,前者用来设定画线的颜色,后者用来设定图形的填充颜色。在这里,将用户输入的存储在变量a中的颜色设定为画线颜色,而在变量b中存放的颜色设定为图形的填充颜色。

项目小结

本节课我们通过在终端输入线条及填充的颜色,画出了五角星图案。通过这个项目,我们进一步熟悉了海龟绘图编程的工具,也学会了如何创建和调用函数。同时,我们也了解了在python中如何与终端进行交互。那么在这节课学习的基础上,结合今天画的五角星,我们还能绘制什么图形呢,赶紧动脑试试吧!

项目扩展

利用本节课学习的绘制五角星的方法,尝试画出一面国旗图案来吧,想一想绘制它需要哪些步骤呢。

参考程序

import turtle
#中国国旗
turtle.penup()#提笔
turtle.goto(-200,200)#落到指定坐标位置
turtle.pendown()#落笔
turtle.begin_fill()
turtle.fillcolor("red")
turtle.pencolor("red")
for i in range(2):#绘制长国旗边框轮廓
    turtle.forward(438)
    turtle.right(90)
    turtle.forward(292)
    turtle.right(90)
turtle.end_fill()
turtle.penup()#绘制大的五角星
turtle.goto(-170,145)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor("yellow")
turtle.pencolor("yellow")
for x in range(5):#绘制五角星轮廓
    turtle.forward(50)
    turtle.right(144)
turtle.end_fill()
#绘制第一颗小的五角星
turtle.penup()
turtle.goto(-100,180)
turtle.setheading(305)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor("yellow")
turtle.pencolor("yellow")
for x in range(5):#绘制五角星轮廓
    turtle.forward(20)
    turtle.left(144)
turtle.end_fill()
#绘制第二颗小的五角星
turtle.penup()
turtle.goto(-85,150)
turtle.setheading(30)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor("yellow")
turtle.pencolor("yellow")
for x in range(5):#绘制五角星轮廓
    turtle.forward(20)
    turtle.right(144)
turtle.end_fill()
#绘制第三颗小的五角星
turtle.penup()
turtle.goto(-85,120)
turtle.setheading(5)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor("yellow")
turtle.pencolor("yellow")
for x in range(5):#绘制五角星轮廓
    turtle.forward(20)
    turtle.right(144)
turtle.end_fill()
#绘制第四颗小的五角星
turtle.penup()
turtle.goto(-100,100)
turtle.setheading(300)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor("yellow")
turtle.pencolor("yellow")
for x in range(5):#绘制五角星轮廓
    turtle.forward(20)
    turtle.left(144)
turtle.end_fill()
turtle.hideturtle()#隐藏小海龟
turtle.done()

参考效果
Mind+Python turtle 课程——04 智能绘制的五角星图6



附件:下载附件4、智能绘制的五角星.rar


安卓机器人  中级技神

发表于 2021-9-15 07:58:39

国旗,漂亮⛳️
回复

使用道具 举报

木子呢  管理员
 楼主|

发表于 2021-9-15 10:17:10


                  
回复

使用道具 举报

hnyzcj  版主

发表于 2021-9-15 23:05:16

帅气
回复

使用道具 举报

9527114514  见习技师

发表于 2023-8-17 20:56:43

太帅了!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail