python作业--使用turtle()库实现“流汗黄豆”表情
实现流汗黄豆
- 目标图像
- 设计思路
- 涉及的turtle()库函数及功能
- 设计的两个函数及其功能
- ground()
- mkSweat()
- 遇到问题及解决思路
- 最终运行结果
- 编程心得体会
目标图像
设计思路
分别封装两个主要函数ground(),mkSweat();
(1)*ground()*:画出背景的黄色笑脸,分别使用circle()函数画圆和使用for循环随角度变化改变半径画出椭圆。
(2)用*for循环*反复调用*mkSweat()*并改变参数:实现流汗的动画效果
涉及的turtle()库函数及功能
函数 | 功能 |
---|---|
speed() | 笔的移动速度参数范围0.5——10,范围之外为0,最快,不设置速度为最慢 |
delay() | 用于返回或设置绘制延迟(以毫秒为单位)。它只需要一个可选的参数作为延迟一个正整数。 |
pensize() | 设置画笔尺寸,单位为像素 |
pencolor() | 设置画笔颜色 |
hideturtle() | 隐藏画笔 |
screensize() | 设置画布的长、宽、以及bgcolor |
fillcolor() | 设置填充颜色 |
begin_fill() | 开始填充 |
circle() | 画圆填充 |
end_fill() | 填充结束 |
pu() | 抬起笔,停止写 |
goto() | 笔移动到坐标(x,y) |
pd() | 放下笔,开始写 |
color() | color(colorstring1, colorstring2), color((r1,g1,b1), (r2,g2,b2))等效于pencolor(colorstring1)和fillcolor(colorstring2) 类似地使用其他输入格式。 |
seth() | 设置笔的朝向,画笔默认朝向为正右方 |
update() | 一般和tracer()搭配使用,刷新画面,图画在后台内存中画好,然后执行刷新命令时,将内存读取到画面窗口中。 |
tracer() | 参数设置为false时省略作画过程 |
reset() | 删除画的内容,还原画笔参数为初始值 |
forward() | 向前写,参数为像素数值 |
backward | 向后写,参数为像素数值 |
right() | 向右写,参数为像素数值 |
left() | 向左写,参数为像素数值 |
done() | 关闭turtle,一般在使用完turtle后添加,否则会无响应 |
设计的两个函数及其功能
ground()
1.设置一些基础参数pensize()\hideturtle()\screenszie()画出最下层的橘色边缘('#E69138')和黄色底色('#f1c232')
t.pensize(8)t.pencolor('#E69138')t.hideturtle()t.screensize(500, 500, bg='white')t.fillcolor('#f1c232')t.begin_fill()t.circle(120)t.end_fill()# 画出底色
2.为了画出微笑的嘴角,首先画一个褐色正圆,再用和底色相同的椭圆做恰当的覆盖,实现嘴角弯弯的效果
t.pu()t.goto(-70, 70)t.pd()t.color('#80542b', '#9e6430')t.pensize(6)t.seth(-60)t.begin_fill()t.circle(80)t.end_fill()# 画出嘴角的褐色圆a = 2.8t.pu()t.goto(90, 160)t.seth(90)t.pensize(4)t.pd()t.color('#f1c232')t.begin_fill()for i in range(120):if 0 <= i < 30 or 60 <= i < 90:a = a + 0.1t.lt(3) # 向左转3度t.fd(a) # 向前走a的步长else:a = a - 0.1t.lt(3)t.fd(a)t.end_fill()# 画完微笑的嘴角
到这一步的实现效果:
3.画出笑眼,和上一步的原理相同,通过与黄色同色的部分区域覆盖得到笑眼的形状
a = 0.4t.seth(0)t.pensize(3)t.pu()t.goto(-37, 110)t.pensize(4)t.pd()t.color('#80542b', '#9e6430')t.begin_fill()a = 0.32for i in range(120):if 0 <= i < 30 or 60 <= i < 90:a = a + 0.064t.lt(3)t.fd(a)else:a = a - 0.064t.lt(3)t.fd(a)t.end_fill()t.pu()t.goto(37, 110)t.pensize(4)t.pd()t.color('#80542b', '#9e6430')t.begin_fill()for i in range(120):if 0 <= i < 30 or 60 <= i < 90:a = a + 0.064t.lt(3) # 向左转3度t.fd(a) # 向前走a的步长else:a = a - 0.064t.lt(3)t.fd(a)t.end_fill()# 画完褐色椭圆t.pensize(3)t.pu()t.goto(-35, 89)t.pensize(4)t.pd()t.color('#f1c232')t.begin_fill()a = 0.3for i in range(120):if 0 <= i < 30 or 60 <= i < 90:a = a + 0.06t.lt(3)t.fd(a)else:a = a - 0.06t.lt(3)t.fd(a)t.end_fill()t.pu()t.goto(35, 89)t.pensize(4)t.pd()t.color('#f1c232')t.begin_fill()for i in range(120):if 0 <= i < 30 or 60 <= i < 90:a = a + 0.06t.lt(3) # 向左转3度t.fd(a) # 向前走a的步长else:a = a - 0.06t.lt(3)t.fd(a)t.end_fill()# 画完眼睛
4.画出牙齿
a = 3.05t.pu()t.goto(-70, 94)t.seth(315)t.pd()t.pencolor('white')t.pensize(12)for i in range(30):if 0 <= i < 15:a = a + 0.25t.lt(3) # 向左转3度t.fd(a) # 向前走a的步长else:a = a - 0.25t.lt(3)t.fd(a)# 牙齿的代码t.update()
函数调用完后的实现效果
mkSweat()
汗滴的实现是将两个形状相同,大小和颜色不同的汗滴图形进行部分重叠,实现阴影的效果,汗滴形状通过圆和等腰三角形拼接而成
def mkSweat(x):t.tracer(False)#省去作画过程,直接显示图形t.reset()ground()# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。t.pu()t.goto(76, x)t.pd()t.seth(0)t.color('#289df8')t.pensize(6)t.begin_fill()t.circle(20)t.end_fill()#t.pu()t.goto(56, x + 20)t.pd()t.seth(0)t.color('#289df8')t.pensize(6)t.begin_fill()t.forward(40) # 根据正前方角度画线t.right(75) # 画笔向右旋转t.backward(77.194) # 根据正后方角度画线t.right(30) # 画笔向右旋转t.fd(77.294)t.end_fill()#t.pu()t.goto(78, x)t.pd()t.seth(0)t.color('#00ffff')t.pensize(6)t.begin_fill()t.circle(15.8)t.end_fill()#t.pu()t.goto(59, x + 18)t.pd()t.seth(0)t.color('#00ffff')t.pensize(1)t.begin_fill()t.forward(36) # 根据正前方角度画线t.right(75) # 画笔向右旋转t.backward(69.565) # 根据正后方角度画线t.right(30) # 画笔向右旋转t.fd(69.565)t.end_fill()t.hideturtle()time.sleep(0.1)
遇到问题及解决思路
在整个绘图过程中确实遇到了不少问题
(1)绘图过程缓慢
只是改变speed()的参数还不够,于是通过上网查阅资料,将delay()的参数设置为0,得到了满意的绘图速度。
(2)汗滴的动态绘图问题
一开始想象的ground()和mkSweat()是两个相互独立的模块,但是后来发现如果不在mkSweat()的开头进行图像清空,无法得到想要的效果,于是采用了绘完一帧,清空一次画布,在mkSweat()里面调用一次ground(),并且将tracer()的参数设置为false,立即得到绘图结果,得到干净的动画效果。
(3)绘画结果的保留问题
没有想到的是,只要函数调用结束,绘画结果并不会呈现在画布上,必须使用update()进行更新,通过网络上查阅资料解决了这一问题。
最终运行结果
编程心得体会
turtle是在我开始学习python以来,除了RPi.GPIO和matplotlib以外的第三个亲密接触的 库,明白了一个道理:进行python库学习的最好方法永远是进行相关的项目实践,纸上谈兵的学习方法显然不行。
在整个实验的完成过程中,常常有调参数到崩溃的时刻,靠着耐心和有始有终的信念,最后还是完成了自己心心念念的成果。有过被室友“大可不必”的劝退时刻,但是为了自己的一点幽默和固执,还是坚持了下来。
turtle()也许不会成为我以后常用的库,但是这次又愉快的经历,也许以后工作多年后也不会忘记。
“流汗黄豆”是我大学时代的网络烙印,这就是我选择它作为素材的原因。
python作业--使用turtle()库实现“流汗黄豆”表情相关推荐
- Python - 如何用turtle库画一个微笑表情包
下面左图是想要达到的效果,右边是最终实现. 代码其实蛮简单的,就不解释了,有看不懂的可以留言 遗憾:关于眼睛的椭圆画的不是很好,以后可以尝试调整一下. 代码实现 import turtle as tt ...
- python樱花代码_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
今天为大家介绍几个Python"装逼"实例代码,python绘制樱花.玫瑰.圣诞树代码实例,主要使用了turtle库 Python绘制樱花代码实例 动态生成樱花 效果图(这个是动态 ...
- 用python画圣诞树-使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
今天为大家介绍几个Python"装逼"实例代码,python绘制樱花.玫瑰.圣诞树代码实例,主要使用了turtle库 Python绘制樱花代码实例 动态生成樱花 效果图(这个是动态 ...
- Python绘图:turtle库基础语法介绍
目录 一.turtle库的导入 二.绘图命令介绍 1. 画布属性设置 2. 画笔属性设置 3. 移动画笔和转角绘图 4. 图形绘制与图形填充 三.turtle绘图实例:绘制太阳花 Python ...
- python使用turtle库绘制一个100长度的十字架_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例...
使用python图形模块turtle库绘制樱花.玫瑰.圣诞树代码实例 发布时间:2020-08-22 15:57:19 来源:脚本之家 阅读:76 作者:Soul fragments 今天为大家介绍几 ...
- 海龟编程 python绘图工具turtle库的用法 turtle库使用方法大全,画笔设置 画布设置 绘图设置,画笔粗细,画笔颜色, 画笔速度。Python二级必须会的命令(已获取证书)
目录 海龟编程 python绘图工具turtle库的用法 画布: 画笔 画笔运动命令: 画笔的控制命令: 全局控制命令: 简单turtle绘图示例: 圆中方: 三色同心圆: 四个圆中方: 螺旋正方: ...
- 使用Python中的Turtle库画正方体
使用Python中的Turtle库画正方体 先献上画完之后的图形,还有些许瑕疵,例如虚线没有对齐,有待于后续微调 以下是实现代码 # encoding=utf-8 import turtle# 画正面 ...
- [python] math与turtle库之蝴蝶曲线
[python代码]math与turtle库之蝴蝶曲线的运用 几个turtle库基本函数: 1:turtle.pensize(x) :X大小控制画笔大小 2:turtle.pencolor(" ...
- 绘制图形可以使用什么python数据库_使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例...
今天为大家介绍几个Python"装逼"实例代码,python绘制樱花.玫瑰.圣诞树代码实例,主要使用了turtle库 Python绘制樱花代码实例 动态生成樱花 效果图(这个是动态 ...
最新文章
- 中国工程院院士:我这里博士生的待遇,不如能干的工人高!
- 剔除Intellij中Mybatis的Mapper自动注入警告
- 添加10个用户user1到user10,但要求只有用户不存在的情况下才能添加
- kettlejava脚本的api_Java调用自己开发的Kettle plugin插件
- Nginx的rewrite案例之防盗链
- leetcode 	222 	Count Complete Tree Nodes
- 机械硬盘4k读写速度_有容乃大,18T企业级机械硬盘旗舰—希捷银河Exos X18测试...
- Windows下安装BeautifulSoup
- HiccDS共享音乐列表
- 痞子衡嵌入式:ARM Cortex-M内核那些事(2)- 第一款微控制器
- 苹果网页归档转html,常用JS转换HTML转义符
- 人大金仓数据库软件下载
- 51单片机学习笔记【九】——红外通信实验
- jq22插件库视频播放插件Video.js,jq22资源分享
- 烙铁使用注意事项及元器件件焊接要点
- 计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年4月份最新版)
- Linux如何创建用户及设置权限
- android 4 源码目录,LXR 目录Android 源码
- eclipse简介及下载
- win7 设定固定的ip地址
热门文章
- 【个人作品】全动态采购单价分析--改进ABC模型(帕累托分析)的一些心得
- uview中search搜索框修改字体大小背景色.....
- Sorting by Swapping POJ - 1674(变相排序)
- PAT_甲级_1076 Forwards on Weibo (30point(s)) (C++)【BFS/微博扩散】
- 网闸前后端的接口不一致导致webservice接口无返回
- urllib学习记录
- [电脑]_开始着手做小软件站
- 112页智慧城市大数据综合解决方案(ppt可编辑)
- python输入随机的口算算式_小学生家长的福利来啦--利用EXCEL随机生成口算题目...
- cannot be hot swapped into a running virtal machine的解决方法