虎年,用Python画一个小老虎,祝大家新年虎虎生威,大吉大利
虎年到了,祝大家新年快乐!虎虎生威!大吉大利!
前几天有朋友问我,听说学习了Python,万物皆可爬,还可以画画,今年是虎年,可不可以画一只可爱的小脑虎呀…
当然可以的呀
我们先在百度图片里下载一张虎年的图片,然后开始肝代码。
效果如下:
结果与原图对比
与原图对比,我认为还原度是很高的。
部分细节无法完全还原,或是代码调试的时间不够。感兴趣的朋友可以联系我获取代码,更进一步优化细节。
用到的方法
使用的都是turtle库中的函数,直接导入turtle库即可调用。
1.画布设置
setup(width, height, x, y): 设置窗口大小和窗口左上角在屏幕中的位置。
title(): 设置窗口的标题。
screensize(width, height, color): 设置画布大小,背景颜色。
done(): 绘图结束后,自动关闭窗口。
2.画笔设置
pencolor(color): 设置画笔颜色。
width(): 设置画笔宽度。
speed(int): 设置画笔的速度,传入1~10的数字,1最慢,10最快。传入其他值会更快,但是没有鼠标移动的动画效果。
penup(): 提起画笔,提起后移动画笔不会留下痕迹。
pendown(): 落下画笔,开始绘图前先将画笔落下。
setx(value): 设置画笔的x轴坐标。
sety(value): 设置画笔的y轴坐标。
towards(x, y): 设置画笔指向地点。
setheading(): 设置画笔的方向。与towards()配合可以设置画笔指向某个点,如setheading(towards(0, 0))可以设置画笔指向原点。
pos(): 返回画笔当前的坐标。鼠标移动一段时间后可以print()打印此函数获取鼠标位置。
heading(): 返回画笔当前的方向。
3. 画笔操作
circle(radius[, extent=arc]): 画一个圆,传入圆的半径,根据画笔的方向控制圆心的位置,圆心与画笔的方向垂直。传入弧度值可以画出指定弧度的圆弧。
left(angle): 画笔左转,传入任意一个目标角度。
right(angle): 画笔右转。
forward(distance): 画笔前进一段距离。
backward(distance): 画笔后退一段距离。
goto(x, y): 移动画笔到指定坐标。
4. 颜色填充
begin_fill(): 开始填充。
fillcolor(color): 设置图形中填充的颜色。
end_fill(): 结束填充。
自定义的函数
为了精简代码,我自己定义了几个函数,在后面的代码中重复利用。
1.设置画笔到某一个点,每画一部分图形的开头都可以直接调用,COLOR是定义的一个全局变量。
def set_start(x, y, w, c=COLOR):
penup()
setx(x)
sety(y)
setheading(towards(0, 0))
width(w)
pencolor(c)
pendown()
speed(0)
2.将转向和移动的代码封装,转不同角度和移动不同的距离可以画出不同的弧线,封装后会节省非常多的代码。
def left_rotate(time, angle, length):
for i in range(time):
left(angle)
forward(length)
3.填充颜色定义成装饰器,当某部分图形完成时,加上装饰器即可完成颜色填充。
def fill_color(color):
def decorator_all(func):
def wrapper(*args, **kwargs):
begin_fill()
func(*args, **kwargs)
fillcolor(color)
end_fill()
return wrapper
return decorator_all
4.填充颜色的补丁函数。
turtle库填充颜色时会去关联上一个图形的终点,大部分情况填充颜色都没有问题,但少数情况下填充结果不符合预期。
我没有花时间去翻官方有没有这样的issue,自己写了个补丁函数,重置上一个图形的终点(重点:重置的是上一个),当填充颜色不符合预期时,打上补丁。补丁函数中调用了前面定义的set_start(),在要填充图形的起点画个点。
def fill_color_patch(x, y, c='#fffffb'):
set_start(x, y, 1, c=c)
forward(1)
经验总结
1.画图前先分析一下图形。
先定一个坐标原点,图形的每个部分都根据原点去找位置,这样可以避免图形出现大的偏差。
2.顺序很重要。
有些部分之间的先后顺序不能反,主要影响的是颜色填充,这点也是图形分析时要注意的,分析好图层顺序。
3.灵活运用。
目标是最大可能完成图像,如果能画得更好,代码增加很多,也是值得的。自定义的函数,适用就用,不适用的地方就算了。
4.耐心很重要。
用的是基本库,基本的函数,就那么几个,其实技术没那么重要,重要的是耐心。画得不像不怕,多试几次就行了。
代码
上面这份完整的Python代码,需要的可以直接微信扫描下方CSDN官方认证二维码免费领取
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
Python的学习路线
这里把Python常用的技术点做了整理,有各个领域的知识点汇总,可以按照上面的知识点找对应的学习资源。
学习软件
Python常用的开发软件,会给大家节省很多时间。
学习视频
编程学习一定要多多看视频,书籍和视频结合起来学习才能事半功倍。
100道Python练习题
实战案例
光学理论是没用的,学习编程切忌纸上谈兵,一定要动手实操,将自己学到的知识运用到实际当中。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。
虎年,用Python画一个小老虎,祝大家新年虎虎生威,大吉大利相关推荐
- 用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利
用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利! 虎年到了,祝大家新年虎虎生威!大吉大利! 去年我用Python画了一头金牛,参考:https://blog.csdn.net/ ...
- 用Python画一个生日蛋糕并写上生日祝福对象及生日祝福语
用Python画一个生日蛋糕并写上生日祝福对象及生日祝福语.画一个双层蛋糕并点上蜡烛.代码运行时间较长,请静待惊喜出现,代码运行截图: 完整程序代码: 干货主要有: ① 200 多本 Python 电 ...
- php饼图只有一个小方块_如何用Python画一个好看的饼图
这是一个关于画一个饼图的故事......话说在一个月黑风高的夜晚,笔者肚子饿了,脑海中回想起画饼充饥的典故,于是打算.... 成功冷到自己...... 好吧进入正题,这次我们来说说怎么用python画 ...
- 如何使用python画一个爱心
1 问题 如何使用python画一个爱心. 2 方法 桌面新建一个文本文档,文件后缀改为.py,输入相关代码ctrl+s保存,关闭,最后双击运行. 代码清单 1 from turtle import ...
- 如何用python画一个美队盾牌
如何用python画一个美队盾牌 import turtle# 画一个大圆 turtle.pensize(10) # 用pensize来设置画笔的粗细 turtle.pencolor('red') # ...
- 请问怎么用python画一个轮廓图,,例如中国地图这种,注意是轮廓图,求大佬指点
请问怎么用python画一个轮廓图,,例如中国地图这种,注意是轮廓图 例如这个:
- 怎么用python画房子_用python画一个小房子
用python画一个小房子 2020年07月22日 | 萬仟网IT编程 | 我要评论 如何用python画一个小房子?效果图如下:代码如下:import turtle# 前置p = turtle.Pe ...
- 用python画苹果的logo_简单几步,100行代码用Python画一个蝙蝠侠的logo
转自:菜鸟学Python 简单几步,100行代码用Python画一个蝙蝠侠的logo-1.jpg (35.33 KB, 下载次数: 0) 2020-7-30 12:04 上传 蝙蝠侠作为DC漫画的核心 ...
- python turtle画房子代码里面的窗子,如何用python画房子_用python画一个小房子
如何用python画一个小房子? 效果图如下: 代码如下: import turtle # 前置 p = turtle.Pen() # 作者要说的话 for i in range(6): print( ...
最新文章
- python 列表生成式、lower()和upper()的使用
- android sqlite 单例模式,数据储存之SQLite(单例模式)
- Java中Synchronized的用法(简单介绍)
- 离线轻量级大数据平台Spark之中文字符显示问题的解决
- 机器学习-关联之FP-Growth算法原理及实战
- acwing2060. 奶牛选美(bfs)
- [数据结构-严蔚敏版]P37定义一个带头结点的线性链表
- 如何为JavaScript选择文本编辑器
- 组件化网页开发 / 步骤一 · 5-1 课程总结
- 学好C++能够从事哪些岗位?
- 【论文笔记】EMNLP2019: 基于层次多图卷积网络的实体类型分类
- mysql hyperloglog_Redis HyperLogLog
- Android进程系列1---进程基础
- 【年薪百万之IT界大神成长之路零】年薪百万之IT界大神成长之路
- IT男人:四十岁是一枝花吗?
- SpringCloud Zuul 网关
- FLASH常见问题(转载)
- 线程池基本了解及其参数配置
- java毕业设计电商后台管理系统Mybatis+系统+数据库+调试部署
- 3DMAX2016安装教程【图文】