如何用python画函数曲线_如何用Python画一只机器猫?|原力计划

2023-11-20 23:41

本文主要是介绍如何用python画函数曲线_如何用Python画一只机器猫?|原力计划,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

730e0cf3d7ca7bcb900f83c566a93465f724a80f.jpeg?token=68f30d70a3d2d23aff147ca30b7f073d&s=4D65A9444D930FD64B5F79810300E098

作者 | 人邮异步社区

责编 | 胡巍巍

出品 | CSDN博客

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

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

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

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

程序分析

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

5bafa40f4bfbfbed66b2e9f2a550a830adc31fff.jpeg?token=5a4b1aaa53eb841aae857f46bb12777d

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

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

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

导入模块和设置画笔

因为要使用海龟绘图,所以我们需要先导入 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。

基础函数

绘制圆形

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

defdrawRound(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()函数的代 码如下所示。

defdrawRect(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()函数表示填充完毕。

绘制机器猫的身体

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()函数来看一下执行效果,如图所示。

bd315c6034a85edf5a02407595f45625dc547505.jpeg?token=5a73f071c9b7e7177b118be9c79ba4a5

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()函数来看一下效果,如图所示。

d0c8a786c9177f3ea78e098aad6f64c19e3d5622.jpeg?token=63f2d8d884b61bbf0c3174cb2d907ac8

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

defnose(): color("red","red") penup() goto(0,40) drawRound(7,True)

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

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

96dda144ad3459820fcfa4d7d2546eabcaef8451.jpeg?token=5ad2c3655201a185efa96268e757a563

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()函数来看一下绘制效果,如图所示。

86d6277f9e2f070851a27d4b3784e79fa801f279.jpeg?token=11a4412c9c78c80be21938e8a7b7cdeb

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()函数来看一下绘制效果,如图所示。

2cf5e0fe9925bc31e9649e5c827fd2b7ca137064.jpeg?token=b9923e2d2ff934010dd7e4fff591700f

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()函数,停止填充。这样 就绘制完了机器猫的两条腿。

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

8d5494eef01f3a29bf8728404485e3375d607c1c.jpeg?token=704071ef4970d19ab46f875a171482a6

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()函数,看一下绘制效果,如图所示。

962bd40735fae6cd3449c909d113502243a70f7b.jpeg?token=fc45715988b4b988b8af0ea823fd1639

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()函数,看一下绘制效果,如图所示。

9d82d158ccbf6c81382ba9c25f9eee3333fa4027.jpeg?token=d52b0f9290c51c2eef1c55475edca5ea

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()函数,看一下绘制效果,如图所示。

0d338744ebf81a4c0f2568d9098a3f5f252da636.jpeg?token=9d2dc4ce6082e140bebb462e7f7766e7

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)

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

32fa828ba61ea8d3f31c263049aa6f48251f586a.jpeg?token=c007ca9a968a6da510096fc222877996

package()函数

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

def package():#半圆 color("black","black") penup()goto(-25,-70) pendown() setheading(-90) circle(25,180)goto(-25,-70) hideturtle()

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

0df431adcbef76095e5b8faff37dfcca7dd99ed0.jpeg?token=d3579875c551cbc5d5b0586860de3a51

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

3bf33a87e950352ace4f0bdb8ee3a4f4b3118b59.jpeg?token=79e26a8cf8aeb7df06a81c1a172f0761

这篇关于如何用python画函数曲线_如何用Python画一只机器猫?|原力计划的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/398290

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚