原标题:如何用Python画一只机器猫?

本文经授权转自公众号异步图书

如若转载请联系原公众号

自信心是成功的源泉,对刚入门编程行业的初级程序员来说,多敲代码多做项目就是构建自信心的最好办法。

第一次学编程是在屏幕上敲出”Hello World!“,慢慢地可以处理简单程序,显示更复杂的图像,解决更多的问题。

信心增加又可以促进自己学习更多的知识,这样正能量的方式就是程序员学习进阶的不二法宝。

今天就教大家用Python写一个机器猫,一起敲代码吧!

01

程序分析

我们先来看一下机器猫的样子,如图所示。

它有大大的脑袋、圆圆的眼睛、红红的鼻头,嘴巴两边各有 3 根胡子。脑袋和身体用一条红色的丝带分 隔开,因为图中的这只机器猫是坐着的,所以我们没有看到腿,只有圆圆的脚露在外面。此外,机器猫还有胳膊和圆圆的手。最后,别忘了机器猫还有标志性的铃铛和口袋。

我们可以使用自定义函数,按照机器猫的身体部位来定义各个绘制函数:head(头)、 eyes(眼睛)、nose(鼻子)、mouth(嘴)、whiskers(胡子)、body(身体)、feet(脚)、arms(胳 膊)、hands(手)、bell(铃铛)和 package(口袋)。函数的名字就表明了该函数负责绘制的身体部位。

我们可以看到,这些身体部位大部分是由圆形和矩形组成,所以为了能够重复使用相同的代码段,避免 不必要地复制和粘贴代码,我们还需要定义两个基础函数——一个是绘制圆形的函数 drawRound,一个是绘制矩形的 drawRect函数。

02

导入模块和设置画笔

因为要使用海龟绘图,所以我们需要先导入 turtle 模块。我们将采用第 11 章介绍的导入模块的第二种方法:

fromturtle 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。

03

基础函数

绘制圆形

我们定义一个 drawRound函数,用它来绘制圆形。这里为它设置两个参数,分别是表示所绘制的圆的半 径的 size 和表示是否填充的 filled。drawRound函数的代码如下所示。

defdrawRound(size,filled):

pendown

iffilled== True:

begin_fill

setheading ( 180)

circle(size, 360)

iffilled== 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函数的代 码如下所示。

defdrawRect(length,width,filled):

setheading( 0)

pendown

iffilled== True:

begin_fill

forward(length)

right( 90)

forward(width)

right( 90)

forward(length)

right( 90)

forward(width)

iffilled== 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函数表示填充完毕。

04

绘制机器猫的身体

head函数

在这里,我们定义了一个绘制机器猫大脑袋的函数——head。首先,它绘制一个蓝色填充的大圆,表示 机器猫的脑袋。然后,在蓝色圆中绘制一个稍小一点的白色填充的圆,表示机器猫的脸庞。head函数的 代码如下所示。

defhead:

#大圆

color( "blue", "blue")

penup

goto( 0, 100)

drawRound( 75, True)

#小圆

color( "white", "white")

penup

goto( 0, 72)

drawRound( 60, True)

首先调用 color函数,将画笔的颜色设置为蓝色,将填充的颜色也设置为蓝色。然后调用 penup函数, 让画笔抬起,不要在画布上留下笔迹。调用 goto函数将画笔移动到 x 坐标为 0、y 坐标为 100 的位置。调用我们在前面创建的自定义函数 drawRound,绘制一个半径为 75 个像素、用蓝色填充的圆。

然后再次调用 color函数,将画笔的颜色设置为白色,将填充的颜色也设置为白色。然后调用 penup函 数,让画笔抬起,不要在画布上留下笔迹。调用 goto函数将画笔移动到 x 坐标为 0、y 坐标为 72 的位置。调用 drawRound函数,绘制一个半径为 60 个像素、用白色填充的圆。调用这个 head函数来看一下执行效果,如图所示。

eyes函数

接下来,我们定义 eyes函数,用来绘制机器猫的眼睛。首先,我们绘制两个边框为黑色并用白色填充的 大圆,表示机器猫的两只眼睛。然后在每个大圆中画一个用黑色填充的圆,并且在这个黑圆中再绘制一

个更小的用白色填充的圆,它们表示机器猫的眼球。

def eyes:

#左眼眶

color( "black", "white")

penup

goto( -15, 80)

drawRound( 17, True)

#右眼眶

color( "black", "white")

penup

goto( 19, 80)

drawRound( 17, True)

#左眼珠

color( "black", "black")

penup

goto( -8, 70)

drawRound( 6, True)

color( "white", "white")

penup

goto( -8, 66)

drawRound( 2, True)

#右眼珠

color( "black", "black")

penup

goto( 12, 70)

drawRound( 6, True)

color( "white", "white")

penup

goto( 12, 66)

drawRound( 2, True)

首先绘制机器猫的左眼眶。调用 color函数,将画笔的颜色设置为黑色,将填充的颜色设置为白色。然 后调用 penup函数,让画笔抬起,不要在画布上留下笔迹。调用 goto函数将画笔移动到 x 坐标为 −15、y 坐标为 80 的位置。调用自定义函数 drawRound,绘制一个半径为 17 个像素、用白色填充的圆。

然后绘制右眼眶,这段代码和绘制左眼的代码基本一致,只是传入 goto函数的参数不一样,要将画笔移 动到 x 坐标为 19、y 坐标为 80 的位置。接下来绘制左眼珠和右眼珠。还是调用 color函数,设置画笔和填充的颜色,移动画笔,然后绘制圆。调用这个 eyes函数来看一下效果,如图所示。

nose函数 接下来,我们定义 nose函数,来绘制鼻子。鼻子很简单,就是一个红色的圆。nose 函数的代码如下所示。

defnose:

color( "red", "red")

penup

goto( 0, 40)

drawRound( 7, True)

调用 color 函数,将画笔和填充的颜色设置为红色。然后调用 penup函数,让画笔抬起,先不要在画布

上留下笔迹。调用 goto函数将画笔移动到 x 坐标为 0、y 坐标为 40 的位置。调用自定义函数 drawRound,绘制一个半径为 7 个像素、用红色填充的圆。调用这个 nose函数来看一下绘制效果,如图所示。

mouth函数

接下来,我们定义一个 mouth函数,用来绘制机器猫的嘴巴。它会先绘制一条弧线,表示嘴形,然后再 绘制一条竖线,表示机器猫的“人中”。

def mouth:

#嘴

color( "black", "black")

penup

goto( -30, -20)

pendown

setheading ( -27)

circle( 70, 55)

#人中

penup

goto( 0, 26)

pendown

goto( 0, -25)

调用 color 函数,将画笔和填充的颜色都设置为黑色。然后调用 penup函数,让画笔抬起,先不要在画 布上留下笔迹。调用 goto函数将画笔移动到 x 坐标为−30、y 坐标为−20 的位置。然后调用 pendown函数落下画笔。调用 setheading(-27),设置小海龟启动时运动的方向。调用 circle(70,55)绘制一 条弧线,表示机器猫的嘴巴。

接下来,调用 penup函数,让画笔抬起,先不要在画布上留下笔迹。调用 goto函数将画笔移动到 x 坐 标 0、y 坐标为 26 的位置。然后调用 pendown函数落下画笔。调用 goto(0,-25),来绘制一条直线,表示 机器猫的“人中”。调用这个 mouth函数来看一下绘制效果,如图所示。

whiskers函数

接下来,我们定义了一个 whiskers函数,用来绘制胡子。它在机器猫的“人中”的两边,分别绘制 3 条 直线,表示胡须。whiskers函数的代码如下所示。

def whiskers:

color( "black", "black")

#左边中间的胡子

penup

goto( 10, 5)

pendown

goto( -40, 5)

#右边中间的胡子

penup

goto( 10, 5)

pendown

goto( 40, 5)

#左上的胡子

penup

goto( -10, 15)

pendown

goto( -40, 20)

#右上的胡子

penup

goto( 10, 15)

pendown

goto( 40, 20)

#左下的胡子

penup

goto( -10, -5)

pendown

goto( -40, -10)

#右下的胡子

penup

goto( 10, -5)

pendown

goto( 40, -10)

还是先调用 color函数,将画笔和填充的颜色都设置为黑色。然后调用 penup函数,让画笔抬起,先不要在画布上留下笔迹。调用 goto函数将画笔移动到指定位置。然后调用 pendown函数落下画笔。调用goto函数,绘制一条直线,表示左边第一根胡子。然后重复类似的动作,绘制剩下的 5 根胡子。这部分的代码基本上是相同的,只是移动到的坐标位置有 所不同,这里就不再赘述。调用 whiskers函数来看一下绘制效果,如图所示。

body函数

下面我们定义 body函数,它用来绘制机器猫的身体。该函数先绘制一个蓝色的矩形表示身体,然后再 绘制一个白色的圆,表示机器猫的大肚子。接下来,绘制一个红色的长方形,表示红丝带,用于分隔开 脑袋和身体。最后,绘制一个半圆,表示机器猫的腿。body函数的代码如下所示。

def body:

#蓝色的身体

color( "blue", "blue")

penup

goto( -50, -40)

drawRect( 100, 80, True)

#白色的大肚子

color( "white", "white")

penup

goto( 0, -30)

drawRound( 40, True)

#红色丝带

color( "red", "red")

penup

goto( -60, -35)

drawRect( 120, 10, True)

#白色的腿

color( "white", "white")

penup

goto( 15, -127)

pendown

setheading( 90)

begin_fill

circle( 14, 180)

end_fill

先调用 color函数,将画笔和填充的颜色都设置为蓝色。然后调用 penup函数,让画笔抬起,先不要在 画布上留下笔迹。调用 goto函数将画笔移动到指定位置。然后调用自定义函数 drawRect,绘制一个长 为 100 像素、宽为 80 像素,用蓝色填充的矩形,表示机器猫的身体。

然后调用 color函数,将画笔和填充的颜色都设置为白色。然后调用 penup函数,让画笔抬起,先不要 在画布上留下笔迹。调用 goto函数将画笔移动到指定位置。然后调用自定义函数 drawRound,绘制一 个半径为 40 像素、用白色填充的圆形,表示机器猫的大肚子。

接下来,再次调用 color函数,将画笔和填充的颜色都设置为红色。然后调用 penup函数,让画笔抬起, 先不要在画布上留下笔迹。调用 goto函数将画笔移动到指定位置。然后调用自定义函数 drawRect,绘 制一个长为 120 像素、宽为 10 像素,用红色填充的扁扁的矩形,用来分隔开机器人的身体和脑袋。这是 机器人的红丝带,也是挂铃铛的地方。

然后调用 color函数,将画笔和填充的颜色都设置为白色。然后调用 penup函数,让画笔抬起,先不要 在画布上留下笔迹。调用 goto函数将画笔移动到指定位置。调用 pendown函数落下画笔。调用 setheading(90),设置小海龟启动时运动的方向,也就是让小海龟旋转 90 度。调用 begin_fill函数,开始 填充。调用 circle(14,180),绘制一个半径为 14 像素的半圆形。然后调用 end_fill函数,停止填充。这样 就绘制完了机器猫的两条腿。

调用这个函数,看一下绘制效果,如图所示。

feet函数

接下来,我们定义 feet函数,用来绘制机器猫的脚。feet函数的代码如下所示。

deffeet:

#左脚

color( "black", "white")

penup

goto( -30, -110)

drawRound( 20, True)

#右脚

color( "black", "white")

penup

goto( 30, -110)

drawRound( 20, True

调用 color函数,将画笔颜色设置为黑色,将填充颜色设置为白色。然后调用 penup函数,让画笔抬起,先不要在画布上留下笔迹。调用 goto函数将画笔移动到 x 坐标为−30、y 坐标为−110 的位置。

然后调用自定义函数 drawRound,绘制一个半径为 20 像素、用白色填充的圆形,表示机器猫的左脚。然后重复类似的动作,绘制机器猫的右脚。代码基本上是相同的,只是移动的坐标有所不同,这里就不 再赘述。调用 feet函数,看一下绘制效果,如图所示。

arms函数

接下来,我们定义 arms函数,用来绘制机器猫的胳膊。这里用两个四边形表示机器猫的两条胳膊。arms函数的代码如下所示。

def arms:

#左胳膊

color( "blue", "blue")

penup

begin_fill

goto( -51, -50)

pendown

goto( -51, -75)

left( 70)

goto( -76, -85)

left( 70)

goto( -86, -70)

left( 70)

goto( -51, -50)

end_fill

#右胳膊

color( "blue", "blue")

penup

begin_fill

goto( 49, -50)

pendown

goto( 49, -75)

left( 70)

goto( 74, -85)

left( 70)

goto( 84, -70)

left( 70)

goto( 49, -50)

end_fill

调用 color函数,将画笔颜色和填充颜色都设置为蓝色。然后调用 penup函数,让画笔抬起,先不要在 画布上留下笔迹。调用 begin_fill函数表示开始填充。调用 goto函数将画笔移动到指定位置。然后调用 pendown函数落下画笔。调用 goto函数,绘制一条直线。然后调用函数 left(70),表示向左旋转 70 度。调用 goto函数,绘制第二条直线。然后调用函数 left(70),表示向左旋转 70 度。调用 goto函数,绘制第三条直线。然后调用函数 left(70),表示再次向左旋转 70 度。调用 goto函数,绘制第四条直线。调用 end_fill函数,完成颜色的填充。这样我们就完成了一个用蓝色填充的四边形,用它来表示机器猫的左胳膊。

然后重复类似的动作,绘制右胳膊。代码基本相同,只是移动的坐标位置有所不同,这里不再赘述。调 用一下 arms函数,看一下绘制效果,如图所示。

hands函数

接下来,我们定义了 hands函数,来绘制机器猫的手。这里用两个白色填充的圆来表示机器猫的手。hands函数的代码和 feet函数比较类似,这里不再做过多的解释,直接列出了代码。

defhands:

#左手

color( "black", "white")

penup

goto( -90, -71)

drawRound( 15, True)

#右手

color( "black", "white")

penup

goto( 90, -71)

drawRound( 15, True)

调用 hands函数,看一下绘制效果,如图所示。

bell函数

接下来,我们定义了一个 bell函数,来绘制铃铛。可以看到,铃铛是在一个黄色圆上,由中间的两条黑 线和下方的一个小黑圈组成的。所以,我们先绘制一个用黄色填充的圆;然后绘制一个没有填充的矩形, 表示铃铛中间分开上下部分的横条。在矩形下面,再绘制一个黑色填充的圆。bell函数代码比较简单, 这里也不再过多地解释,直接列出代码。

def bell:

#黄色实心圆表示铜铃

color( "yellow", "yellow")

penup

goto( 0, -41)

drawRound( 8, True)

#黑色矩形表示花纹

color( "black", "black")

penup

goto( -10, -47)

drawRect( 20, 4, False)

#黑色实心圆表示撞击的金属丸

color( "black", "black")

penup

goto( 0, -53)

drawRound( 2, True)

调用这个函数,看一下其绘制效果,如图所示。

package函数

最后,我们还要给机器猫绘制一个口袋,因此,这里定义一个 package函数来绘制口袋。这里用一个半 圆来表示机器猫的口袋。package函数的代码比较简单,这里不再解释,直接列出了代码。

def package:

#半圆

color( "black", "black")

penup

goto(- 25,- 70)

pendown

setheading(- 90)

circle( 25, 180)

goto(- 25,- 70)

hideturtle

调用这个函数,看一下绘制效果,如图所示。

到这里,我们的机器猫就绘制完成了。和前面给出的机器猫的卡通形象对比一下,看看是不是挺像的呢?

还想了解更多趣味编程吗?这本《Python少儿趣味编程》推荐给大家,本书精心选取内容,注重难易适度和趣味性,语言通俗易懂,代码示例丰富。在每章的末尾,还给出了一些练习题并给出了解答。

本书适合想要学习Python编程基础的少儿(尤其是10岁以上的孩子)及想要教孩子学习编程的家长阅读,也适合少儿编程培训班的老师用作少儿编程培训的教材。

●Python和Go都很火,我要怎么选?

责任编辑:

用python画猫咪怎么画-如何用Python画一只机器猫?相关推荐

  1. 用python画猫咪老师怎么画_卡通简笔画:猫咪老师怎么画? 经验告诉你该这样...

    猫咪老师是动画<夏目友人帐>中的主要角色之一,并且拥有极高的人气,猫咪老师虽然平时看起来不过是只可爱的小猫,但是它的真实身份其实是一只非常厉害的妖怪哦.接下来就和大家分享一下猫咪老师的简单 ...

  2. Python django 猫咪管理系统

    Python django 猫咪管理系统 python流浪猫管理系统 python猫信息管理系统 Pythondjango导购系统 语言:python3.7 + Django2 数据库:MySQL 5 ...

  3. 猫咪藏在哪个房间python_你家猫咪喜欢藏在哪睡觉?这只猫咪选择了一个奇怪的地方...

    嗨,大家好,这里是小仙女和猫的原创文章,欢迎大家关注哦!你家猫咪喜欢藏在哪睡觉?这只猫咪选择了一个奇怪的地方. 猫咪的性格独立,情绪喜怒无常,一举一动经常不按章法来,它们的行为总是让人猜不透,即使是养 ...

  4. 用python画猫咪怎么画-使用Python的turtle画小猫咪

    这个是用Python库画的小猫咪,前面一步步的画整个猫的整个身体,具体步骤都写在了注释之中.身体部分画的比较快,后面画了5个心,由于画心的时候要改变好多度数,而且每次只前进一点点,所以画心的时候会比较 ...

  5. 用python画猫咪怎么画-Python海龟画图工具绘制叮当猫程序

    t.fillcolor("blue")#填充颜色 t.begin_fill()#开始填充 t.circle(160)#画圆 t.end_fill()#结束填充 t.up() #鼠标 ...

  6. python时间序列动图_python中如何用matlibplot画时间序列图?

    学了编程后,突然发现用python画图是一件很容易的事.想要放松一下的小伙伴,今天我们一起来画一个时间序列图吧. 一.读取数据及处理 通过pandas读取CSV文件,keep_default_na参数 ...

  7. 什么猫猫最受欢迎?Python采集猫咪交易数据

    前言 在日常生活中,我们看到可爱的猫咪表情包,总是会忍不住收藏 认识的一些朋友也养了猫,比如橘猫.英短.加菲猫之类的 看他们发朋友圈撸猫,老羡慕了,猫咪真的太可爱啦. 你是不是也动过养猫猫的小心思呢~ ...

  8. python怎么画人像_教你如何用Python画出心目中的自己

    原标题:教你如何用Python画出心目中的自己 引言:人脸图像的生成在各个行业有着重要应用,例如刑事调查.人物设计.教育培训等.然而一幅逼真的人脸肖像,对于职业画家也要至少数小时才能绘制出来:对于从未 ...

  9. python turtle画房子详细解释_如何用python画一个小房子

    Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发.Python ...

最新文章

  1. 计算机运用领域最高奖的是2016年,中国首获高性能计算应用领域最高奖
  2. idae 格式化代码 设置eslint_vscode 中格式化代码[vue2支持,插件ESLint、Prettier、Vetur]...
  3. java中文件选择对话框
  4. html的table弹窗_Js弹出基于Table的可关闭浮动层
  5. 给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
  6. (转)淘淘商城系列——展示后台管理页面
  7. vue element form ref 重置表单
  8. java 遍历所有内部类_JAVA-内部类
  9. Class com.fasterxml.jackson.databind.ser.BasicSerializerFactory can not access a member of class com
  10. export project from intellij to myeclipse
  11. 理解Objective C 中id
  12. 电子绘本pdf_1100多本RAZ(Reading A-Z),电子点读版PDF有声书,最全版本
  13. 计算机截屏无法保存,win7电脑自带截图软件保存图片提示失败怎么办?(已解决)...
  14. C语言阶梯电费函数,用阶梯电价计算逻辑学习销售人员阶梯提成计算函数
  15. 印度体育教育初创公司 KOOH Sports 获得 220 万美元风险投资
  16. 带顶点动画的护盾效果——UnityShader学习笔记
  17. 2021辽宁省大学生程序设计竞赛 C D E F G I L
  18. Java调用热敏票据打印机打印小票
  19. 解读公司搬家注意事项
  20. 【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD登录并获取AccessToken -- cca.acquireTokenByCode(tokenRequest)

热门文章

  1. android uinput 按键_linux 虚拟输入设备(uinput)模拟鼠标和键盘的使用方法
  2. python 语义网络_从Python代码到APP,你只需要一个小工具:GitHub已超3000星
  3. Android Retrofit @Streaming 注解失效
  4. go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!...
  5. ES索引瘦身 禁用_source后需要设置field store才能获取数据 否则无法显示搜索结果...
  6. cassandra——可以预料的查询,如果你的查询条件有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现...
  7. elasticsearch 路由文档到分片
  8. 洛谷P2679 子串
  9. Shell命令-管理与性能监视之strace、ltrace
  10. 64位手机部署centos