虎年到了,祝大家新年快乐!虎虎生威!大吉大利!


前几天有朋友问我,听说学习了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画一个小老虎,祝大家新年虎虎生威,大吉大利相关推荐

  1. 用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利

    用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利! 虎年到了,祝大家新年虎虎生威!大吉大利! 去年我用Python画了一头金牛,参考:https://blog.csdn.net/ ...

  2. 用Python画一个生日蛋糕并写上生日祝福对象及生日祝福语

    用Python画一个生日蛋糕并写上生日祝福对象及生日祝福语.画一个双层蛋糕并点上蜡烛.代码运行时间较长,请静待惊喜出现,代码运行截图: 完整程序代码: 干货主要有: ① 200 多本 Python 电 ...

  3. php饼图只有一个小方块_如何用Python画一个好看的饼图

    这是一个关于画一个饼图的故事......话说在一个月黑风高的夜晚,笔者肚子饿了,脑海中回想起画饼充饥的典故,于是打算.... 成功冷到自己...... 好吧进入正题,这次我们来说说怎么用python画 ...

  4. 如何使用python画一个爱心

    1 问题 如何使用python画一个爱心. 2 方法 桌面新建一个文本文档,文件后缀改为.py,输入相关代码ctrl+s保存,关闭,最后双击运行. 代码清单 1 from turtle import ...

  5. 如何用python画一个美队盾牌

    如何用python画一个美队盾牌 import turtle# 画一个大圆 turtle.pensize(10) # 用pensize来设置画笔的粗细 turtle.pencolor('red') # ...

  6. 请问怎么用python画一个轮廓图,,例如中国地图这种,注意是轮廓图,求大佬指点

    请问怎么用python画一个轮廓图,,例如中国地图这种,注意是轮廓图 例如这个:

  7. 怎么用python画房子_用python画一个小房子

    用python画一个小房子 2020年07月22日 | 萬仟网IT编程 | 我要评论 如何用python画一个小房子?效果图如下:代码如下:import turtle# 前置p = turtle.Pe ...

  8. 用python画苹果的logo_简单几步,100行代码用Python画一个蝙蝠侠的logo

    转自:菜鸟学Python 简单几步,100行代码用Python画一个蝙蝠侠的logo-1.jpg (35.33 KB, 下载次数: 0) 2020-7-30 12:04 上传 蝙蝠侠作为DC漫画的核心 ...

  9. python turtle画房子代码里面的窗子,如何用python画房子_用python画一个小房子

    如何用python画一个小房子? 效果图如下: 代码如下: import turtle # 前置 p = turtle.Pen() # 作者要说的话 for i in range(6): print( ...

最新文章

  1. python 列表生成式、lower()和upper()的使用
  2. android sqlite 单例模式,数据储存之SQLite(单例模式)
  3. Java中Synchronized的用法(简单介绍)
  4. 离线轻量级大数据平台Spark之中文字符显示问题的解决
  5. 机器学习-关联之FP-Growth算法原理及实战
  6. acwing2060. 奶牛选美(bfs)
  7. [数据结构-严蔚敏版]P37定义一个带头结点的线性链表
  8. 如何为JavaScript选择文本编辑器
  9. 组件化网页开发 / 步骤一 · 5-1 课程总结
  10. 学好C++能够从事哪些岗位?
  11. 【论文笔记】EMNLP2019: 基于层次多图卷积网络的实体类型分类
  12. mysql hyperloglog_Redis HyperLogLog
  13. Android进程系列1---进程基础
  14. 【年薪百万之IT界大神成长之路零】年薪百万之IT界大神成长之路
  15. IT男人:四十岁是一枝花吗?
  16. SpringCloud Zuul 网关
  17. FLASH常见问题(转载)
  18. 线程池基本了解及其参数配置
  19. java毕业设计电商后台管理系统Mybatis+系统+数据库+调试部署
  20. 3DMAX2016安装教程【图文】

热门文章

  1. mysql取出时间最近的一条字段_Mysql 根据时间取出每组数据中最新的一条
  2. Maven插件列表_Maven插件查询_Maven插件查看
  3. 陆奇-奇绩创坛-chatGPT新范式,新时代,新机会
  4. Luckysheet 导入导出 - Java后台处理和js前端实现
  5. tweepy抓取Twitter数据
  6. NAS折腾系列二:番外篇之瘦客户机+DoraOS实现远程办公
  7. Linux系统中社保卡阅读
  8. 学习笔记——3-8译码器实例(FPGA)
  9. 美团App用户界面分析
  10. html找到多行注释报错,前端注释总结