![4ae520a21b573b7d74be3c3d4e4a3267.png](https://i-blog.csdnimg.cn/blog_migrate/3e49e2f1f14571a42c289457143f0174.jpeg)
作者 | 人邮异步社区
责编 | 胡巍巍
出品 | CSDN博客
自信心是成功的源泉,对刚入门编程行业的初级程序员来说,多敲代码多做项目就是构建自信心的最好办法。
第一次学编程是在屏幕上敲出”Hello World!“,慢慢地可以处理简单程序,显示更复杂的图像,解决更多的问题。
信心增加又可以促进自己学习更多的知识,这样正能量的方式就是程序员学习进阶的不二法宝。
今天就教大家用Python写一个机器猫,跟着异步君一起敲代码吧!
![f35ab7d011ec99335e395d630d7be385.png](https://i-blog.csdnimg.cn/blog_migrate/33f02bf3ceef151fc5dd6533912b62c8.jpeg)
程序分析
我们先来看一下机器猫的样子,如图所示。
![5dba9c91660a03d5aeff49c65001c5ee.png](https://i-blog.csdnimg.cn/blog_migrate/83c05bdd15133d9f01caa714ecb4df45.jpeg)
它有大大的脑袋、圆圆的眼睛、红红的鼻头,嘴巴两边各有 3 根胡子。脑袋和身体用一条红色的丝带分 隔开,因为图中的这只机器猫是坐着的,所以我们没有看到腿,只有圆圆的脚露在外面。此外,机器猫还有胳膊和圆圆的手。最后,别忘了机器猫还有标志性的铃铛和口袋。
我们可以使用自定义函数,按照机器猫的身体部位来定义各个绘制函数:head(头)、 eyes(眼睛)、nose(鼻子)、mouth(嘴)、whiskers(胡子)、body(身体)、feet(脚)、arms(胳 膊)、hands(手)、bell(铃铛)和 package(口袋)。函数的名字就表明了该函数负责绘制的身体部位。
我们可以看到,这些身体部位大部分是由圆形和矩形组成,所以为了能够重复使用相同的代码段,避免 不必要地复制和粘贴代码,我们还需要定义两个基础函数——一个是绘制圆形的函数 drawRound,一个是绘制矩形的 drawRect函数。
![c35fd06f5d925e210eef4f69fdf3b2a9.png](https://i-blog.csdnimg.cn/blog_migrate/7c4fdee1675c8d5b2e62dc20c7f5879b.jpeg)
导入模块和设置画笔
因为要使用海龟绘图,所以我们需要先导入 turtle 模块。我们将采用第 11 章介绍的导入模块的第二种方法:
from turtle import *
使用这种方法,可以导入 turtle 模块中所有的方法和变量,然后就可以直接调用方法了,而不需要再添加 “turtle.”前缀。现在,我们可以直接将代码写为 setup(500,500),而不需要再添加前缀写成 turtle.setup(500,500)。
然后我们对画笔做一些基本设置,代码如下。
#设置窗口大小
setup(500,500)
#设置画笔
speed(10)
shape("turtle")
colormode(255)
调用 setup(500,500),将画布大小设置为 500 像素宽,500 像素高。调用 speed(10) 将画笔速度设置为 10。
调用 shape("turtle"),将光标设置为小海龟。调用 colormode(255)设置 RGB 色彩值范围为 0~255。
![21dc5235536ae1c3fcb7ba84eb608ddb.png](https://i-blog.csdnimg.cn/blog_migrate/854991fe6deb410befbbdf4dc5fb22b6.jpeg)
基础函数
绘制圆形
我们定义一个 drawRound函数,用它来绘制圆形。这里为它设置两个参数,分别是表示所绘制的圆的半 径的 size 和表示是否填充的 filled。drawRound函数的代码如下所示。
def drawRound(size,filled):
pendown
if filled==True:
begin_fill
setheading (180)
circle(size,360)
if filled==True:
end_fill
首先,调用 pendown函数表示落笔。然后,判断参数 filled 是否等于 True。如果等于 True,表示要填充, 那么就调用 begin_fill函数;否则,不调用该函数,表示没有填充。然后调用 setheading(180),设置小海 龟启动时运动的方向,就是让小海龟调个头。调用 circle(size,360),画一个半径为 size 的圆。然后还要判断参数 filled 是否等于 True,如果等于 True,意味着前面调用过 begin_fill函数,则这里调用 end_fill函 数表示填充完毕。
绘制矩形
接下来,我们定义了一个 drawRect函数,用它来绘制矩形。这里为它指定 3 个参数,分别是表示所绘制 的矩形的长的 length,表示所绘制的矩形的宽的 width,以及表示是否填充的 filled。drawRect函数的代 码如下所示。
def drawRect(length,width,filled):
setheading(0)
pendown
if filled==True:
begin_fill
forward(length)
right(90)
forward(width)
right(90)
forward(length)
right(90)
forward(width)
if filled==True:
end_fill
首先调用 setheading(0),设置小海龟启动时运动的方向,就是让小海龟头朝右。然后调用 pendown函数, 表示落笔。判断参数 filled 是否等于 True。如果等于 True,表示要填充,就调用 begin_fill函数;否则, 不调用函数,表示没有填充。调用 forward(length),绘制一条边。然后调用 right(90),让光标向右旋转 90 度。调用 forward(width),绘制另一条边。
调用 right(90),让光标向右旋转 90 度。调用 forward(length),绘制第三条边。调用 right(90),让光标向右旋转 90 度。调用 forward(width),绘制第四 条边。然后还要判断参数 filled 是否等于 True,如果等于,则调用 end_fill函数表示填充完毕。
![1888948d895f6d8fa7a9086ea31469d3.png](https://i-blog.csdnimg.cn/blog_migrate/4bc834a075b646adb3bc7ffa0a69df4c.jpeg)
绘制机器猫的身体
head函数
在这里,我们定义了一个绘制机器猫大脑袋的函数——head。首先,它绘制一个蓝色填充的大圆,表示 机器猫的脑袋。然后,在蓝色圆中绘制一个稍小一点的白色填充的圆,表示机器猫的脸庞。head函数的 代码如下所示。
def head:
#大圆
color("blue