百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2024-09-26 16:07 24 浏览 0 评论

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

去年我用Python画了一头金牛,今年朋友问我什么时候能画一只老虎。不能辜负朋友的期待,还是一样的流程,在百度图片里下载了一张虎年的图片(原图局部见上图),然后开始肝代码。

效果如下。

结果与原图对比

与原图对比,我自己认为还原度是高于95%的。

部分细节无法完全还原,或是代码调试的时间不够。感兴趣的朋友可以联系我获取代码,更进一步优化细节。

用到的方法

使用的都是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.耐心很重要。

用的是基本库,基本的函数,就那么几个,其实技术没那么重要,重要的是耐心。画得不像不怕,多试几次就行了。

代码拿去吧

我已经尽力精简代码了,但还是超过了1000行,本文就不全贴了。

如果需要完整代码,可以关注公众号“Python碎片”,然后在后台回复“虎虎生威”关键字获取。

相关推荐

大文件传不动?WinRAR/7-Zip 入门到高手,这 5 个技巧让你效率翻倍

“这200张照片怎么传给女儿?微信发不了,邮箱附件又超限……”62岁的张阿姨对着电脑犯愁时,儿子只用了3分钟就把照片压缩成一个文件,还教她:“以后用压缩软件,比打包行李还方便!”职场人更懂这...

电脑解压缩软件推荐——7-Zip:免费、高效、简洁的文件管理神器

在日常工作中,我们经常需要处理压缩文件。无论是下载软件包、接收文件,还是存储大量数据,压缩和解压缩文件都成为了我们日常操作的一部分。而说到压缩解压软件,7-Zip绝对是一个不可忽视的名字。今天,我就来...

设置了加密密码zip文件要如何打开?这几个方法可以试试~

Zip是一种常见的压缩格式文件,文件还可以设置密码保护。那设置了密码的Zip文件要如何打开呢?不清楚的小伙伴一起来看看吧。当我们知道密码想要打开带密码的Zip文件,我们需要用到适用于Zip格式的解压缩...

大文件想要传输成功,怎么把ZIP文件分卷压缩

不知道各位小伙伴有没有这样的烦恼,发送很大很大的压缩包会受到限制,为此,想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置?方法一:使用7-Zip免费且强大的文件管理工具7...

高效处理 RAR 分卷压缩包:合并解压操作全攻略

在文件传输和存储过程中,当遇到大文件时,我们常常会使用分卷压缩的方式将其拆分成多个较小的压缩包,方便存储和传输。RAR作为一种常见的压缩格式,分卷压缩包的使用频率也很高。但很多人在拿到RAR分卷...

2个方法教你如何删除ZIP压缩包密码

zip压缩包设置了加密密码,每次解压文件都需要输入密码才能够顺利解压出文件,当压缩包文件不再需要加密的时候,大家肯定想删除压缩包密码,或是忘记了压缩包密码,想要通过删除操作将压缩包密码删除,就能够顺利...

速转!漏洞预警丨压缩软件Winrar目录穿越漏洞

WinRAR是一款功能强大的压缩包管理器,它是档案工具RAR在Windows环境下的图形界面。该软件可用于备份数据,缩减电子邮件附件的大小,解压缩从Internet上下载的RAR、ZIP及其它类...

文件解压方法和工具分享_文件解压工具下载

压缩文件减少文件大小,降低文件失效的概率,总得来说好处很多。所以很多文件我们下载下来都是压缩软件,很多小伙伴不知道怎么解压,或者不知道什么工具更好,所以今天做了文件解压方法和工具的分享给大家。一、解压...

[python]《Python编程快速上手:让繁琐工作自动化》学习笔记3

1.组织文件笔记(第9章)(代码下载)1.1文件与文件路径通过importshutil调用shutil模块操作目录,shutil模块能够在Python程序中实现文件复制、移动、改名和删除;同时...

Python内置tarfile模块:读写 tar 归档文件详解

一、学习目标1.1学习目标掌握Python内置模块tarfile的核心功能,包括:理解tar归档文件的原理与常见压缩格式(gzip/bz2/lzma)掌握tar文件的读写操作(创建、解压、查看、过滤...

使用python展开tar包_python拓展

类Unix的系统,打包文件经常使用的就是tar包,结合zip工具,可以方便的打包并解压。在python的标准库里面有tarfile库,可以方便实现生成了展开tar包。使用这个库最大的好处,可能就在于不...

银狐钓鱼再升级:白文件脚本化实现GO语言后门持久驻留

近期,火绒威胁情报中心监测到一批相对更为活跃的“银狐”系列变种木马。火绒安全工程师第一时间获取样本并进行分析。分析发现,该样本通过阿里云存储桶下发恶意文件,采用AppDomainManager进行白利...

ZIP文件怎么打开?2个简单方法教你轻松搞定!

在日常工作和生活中,我们经常会遇到各种压缩文件,其中最常见的格式之一就是ZIP。ZIP文件通过压缩数据来减少文件大小,方便我们进行存储和传输。然而,对于初学者来说,如何打开ZIP文件可能会成为一个小小...

Ubuntu—解压多个zip压缩文件.zip .z01 .z02

方法将所有zip文件放在同一目录中:zip_file.z01,zip_file.z02,zip_file.z03,...,zip_file.zip。在Zip3.0版本及以上,使用下列命令:将所有zi...

如何使用7-Zip对文件进行加密压缩

7-Zip是一款开源的文件归档工具,支持多种压缩格式,并提供了对压缩文件进行加密的功能。使用7-Zip可以轻松创建和解压.7z、.zip等格式的压缩文件,并且可以通过设置密码来保护压缩包中的...

取消回复欢迎 发表评论: