用Python画一只小兔子,祝您新年前途似锦,大展宏图

news2025/4/27 21:32:45

用Python画一只小兔子,祝您新年前途似锦,大展宏图

兔年到了,祝大家新年前途似锦!大展宏图!

2021牛年,我用Python画了一头金牛,参考:Python画金牛
2022虎年,我用Python画了一只小老虎,参考:Python画小老虎

今年是第三年,还是一样的方式,今年画一只小兔子,为大家送上祝福。

绘图过程录制成了如下视频,点击视频可以先看到效果。文末提供完整代码获取方式。

视频展示

用Python画一只小兔子

实现方法介绍

本文的绘图工具使用Python标准库turtle库,无需安装,导入即可使用。

部分函数用法介绍(对绘图函数了解可以跳过此部分):

画布设置

  • title(): 设置窗口的标题。
  • bgpic():设置背景图片。
  • setup(width, height, x, y): 设置窗口大小和窗口左上角在屏幕中的位置。
  • shape():设置鼠标的形状。
  • done(): 绘图结束后,不自动关闭窗口。

画笔设置

  • 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(): 返回画笔当前的方向。

画笔操作

  • circle(radius[, extent=arc]): 画一个圆,传入圆的半径,根据画笔的方向控制圆心的位置,圆心与画笔的方向垂直。传入弧度值可以画出指定弧度的圆弧。
  • left(angle): 画笔左转,传入任意一个目标角度。
  • right(angle): 画笔右转。
  • forward(distance): 画笔前进一段距离。
  • backward(distance): 画笔后退一段距离。
  • goto(x, y): 移动画笔到指定坐标。

颜色填充

  • begin_fill(): 开始填充。
  • fillcolor(color): 设置图形中填充的颜色。
  • end_fill(): 结束填充。

具体画图时,调整画笔的起点,设置不同的转角度数和不同的前进长度,可以得到不同形状的弧线,用弧线构成完整的图形。

部分代码

# coding=utf-8
"""
作者:小斌哥ge
公众号: 小斌哥ge
微信:XiaoBinnGe-
发表时间:2023年1月
"""
from turtle import *
import time


def set_start(x, y, w=0.5, c='black'):
    penup()
    setx(x)
    sety(y)
    setheading(towards(0, 0))
    width(w)
    pencolor(c)
    pendown()
    speed(0)


def left_rotate(time, angle, length):
    for i in range(time):
        left(angle)
        forward(length)


def right_rotate(time, angle, length):
    for i in range(time):
        right(angle)
        forward(length)


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


def fill_color_patch(x, y, c='white'):
    set_start(x, y, 1, c=c)
    forward(1)


def draw_circle(radius, color, color2=''):
    if color2 == '':
        color2 = color
    penup()
    setheading(towards(0, 0))
    right(90)
    pencolor(color)
    pendown()
    begin_fill()
    circle(radius)
    fillcolor(color2)
    end_fill()


def draw_ear():
    # 左侧耳朵
    fill_color_patch(-50, 86, c='#9392B3')
    begin_fill()
    set_start(-50, 86, w=4, c='#9392B3')
    right_rotate(1, 174, 10)
    right_rotate(5, 5, 15)
    right_rotate(4, 6, 15)
    width(3)
    right_rotate(2, 4, 13)
    right_rotate(2, 5, 10)
    left_rotate(3, 9, 12)
    width(4)
    right_rotate(1, 128, 10)
    right_rotate(3, 9.5, 31)
    right_rotate(5, 7, 25)
    right_rotate(1, 80, 10)
    left_rotate(3, 7, 12)
    fillcolor('white')
    end_fill()
    width(3)
    right_rotate(1, 160, 5)
    left_rotate(1, 20, 10)
    left_rotate(3, 8, 20)
    width(4)
    left_rotate(1, 2, 15)
    left_rotate(5, 5, 15)
    left_rotate(4, 3, 15)
    fill_color_patch(-35, 105, c='#E6E6FA')
    begin_fill()
    set_start(-35, 105, w=1, c='#E6E6FA')
    right_rotate(1, 170, 10)
    right_rotate(3, 8, 25)
    right_rotate(3, 11, 23)
    right_rotate(1, 130, 20)
    right_rotate(5, 8, 25)
    goto(-35, 105)
    fillcolor('#E6E6FA')
    end_fill()
    fill_color_patch(-32, 110, c='#D6D2F6')
    begin_fill()
    set_start(-32, 110, w=1, c='#D6D2F6')
    right_rotate(1, 170, 10)
    right_rotate(3, 7, 23)
    right_rotate(3, 11, 20)
    right_rotate(1, 131, 20)
    right_rotate(5, 8, 23)
    goto(-32, 110)
    fillcolor('#D6D2F6')
    end_fill()
    set_start(-48.87, 85.22, w=3, c='#9392B3')
    setheading(195.67)
    right_rotate(1, 160, 5)
    left_rotate(1, 20, 10)
    left_rotate(3, 8, 20)
    width(4)
    left_rotate(1, 2, 15)
    left_rotate(5, 5, 15)
    left_rotate(4, 3, 15)
    # 右侧耳朵
    fill_color_patch(90, 67, c='#9392B3')
    begin_fill()
    set_start(90, 67, w=4, c='#9392B3')
    left_rotate(1, 180, 10)
    left_rotate(3, 5, 13)
    left_rotate(2, 8, 15)
    left_rotate(3, 6, 15)
    left_rotate(4, 5, 15)
    right_rotate(4, 5.5, 8)
    left_rotate(1, 132, 15)
    left_rotate(2, 8, 18)
    left_rotate(5, 5, 18)
    left_rotate(4, 4, 17)
    left_rotate(1, 70, 5)
    right_rotate(3, 5, 8)
    goto(90, 67)
    fillcolor('white')
    end_fill()
    left_rotate(1, 180, 5)
    right_rotate(1, 63, 10)
    left_rotate(4, 2, 12)
    right_rotate(3, 3, 16)
    width(3)
    right_rotate(3, 6, 15)
    right_rotate(4, 5, 13.5)
    fill_color_patch(90, 80, c='#E6E6FA')
    begin_fill()
    set_start(90, 80, w=1, c='#E6E6FA')
    left_rotate(1, 175, 10)
    left_rotate(4, 10, 12)
    left_rotate(4, 7, 15)
    right_rotate(4, 5, 9)
    left_rotate(1, 150, 15)
    left_rotate(4, 7.5, 15)
    left_rotate(2, 3, 15)
    right_rotate(2, 2, 10)
    left_rotate(2, 7, 12)
    goto(90, 80)
    fillcolor('#E6E6FA')
    end_fill()
    fill_color_patch(90, 85, c='#D6D2F6')
    begin_fill()
    set_start(90, 85, w=1, c='#D6D2F6')
    left_rotate(1, 175, 10)
    left_rotate(4, 10, 10)
    left_rotate(4, 6, 15)
    right_rotate(4, 5, 7)
    left_rotate(1, 153, 15)
    left_rotate(3, 9.5, 15)
    left_rotate(2, 2, 15)
    right_rotate(3, 0, 10)
    goto(90, 85)
    fillcolor('#D6D2F6')
    end_fill()
    set_start(90.00, 67.00, w=4, c='#9392B3')
    setheading(327.67)
    left_rotate(1, 180, 5)
    right_rotate(1, 63, 10)
    left_rotate(4, 2, 12)
    right_rotate(3, 3, 16)
    width(3)
    right_rotate(3, 6, 15)
    right_rotate(4, 5, 13.5)


def draw_cat():
    set_start(34, 141, w=1, c='#C65B03')
    draw_circle(5, '#C65B03', color2='')
    set_start(33.5, 139, w=1, c='#ED9C22')
    draw_circle(3, '#ED9C22', color2='')
    fill_color_patch(-23, 90, c='#850009')
    begin_fill()
    set_start(-23, 90, w=2, c='#850009')
    left_rotate(1, 80, 10)
    right_rotate(6, 4, 14.2)
    left_rotate(1, 105, 9)
    left_rotate(2, 8, 8)
    width(3)
    left_rotate(11, 12, 10)
    width(2)
    left_rotate(2, 12, 12)
    goto(-23, 90)
    fillcolor('#B80705')
    end_fill()
    fill_color_patch(46, 110, c='#850009')
    begin_fill()
    set_start(46, 110, w=3, c='#850009')
    right_rotate(1, 145, 9)
    left_rotate(2, 16, 8)
    width(2)
    left_rotate(3, 22, 2)
    left_rotate(3, 12, 9)
    goto(46, 110)
    fillcolor('#E50703')
    end_fill()
    fill_color_patch(-23, 90, c='#BE7728')
    begin_fill()
    set_start(-23, 90, w=2, c='#BE7728')
    left_rotate(1, 80, 10)
    right_rotate(6, 4, 14.2)
    left_rotate(1, 105, 9)
    left_rotate(2, 8, 8)
    width(3)
    left_rotate(1, 55, 10)
    left_rotate(2, 5, 15)
    left_rotate(3, 6.5, 16)
    width(2)
    left_rotate(1, 55, 10)
    left_rotate(2, 10, 8)
    goto(-23, 90)
    fillcolor('#E4C127')
    end_fill()
    fill_color_patch(20, 98, c='#DC960D')
    begin_fill()
    set_start(20, 98, w=1, c='#DC960D')
    left_rotate(1, 75, 5)
    left_rotate(2, 12, 5)
    left_rotate(3, 33, 4)
    left_rotate(3, 35, 1)
    right_rotate(3, 28, 2)
    left_rotate(3, 35, 3)
    right_rotate(3, 30, 2)
    left_rotate(3, 45, 2)
    left_rotate(1, 30, 2)
    right_rotate(3, 25, 1)
    left_rotate(3, 45, 2)
    left_rotate(1, 30, 2)
    goto(20, 98)
    fillcolor('#DC960D')
    end_fill()
    fill_color_patch(22, 99, c='#839D76')
    begin_fill()
    set_start(22, 99, w=1, c='#839D76')
    left_rotate(1, 25, 0)
    left_rotate(3, 30, 4)
    left_rotate(3, 30, 2)
    left_rotate(3, 30, 4)
    left_rotate(3, 30, 2)
    fillcolor('#839D76')
    end_fill()
    begin_fill()
    set_start(24, 99, w=1, c='#398640')
    left_rotate(1, 25, 0)
    left_rotate(3, 30, 2.5)
    left_rotate(3, 30, 2)
    left_rotate(3, 30, 2.5)
    left_rotate(3, 30, 2)
    fillcolor('#398640')
    end_fill()
    begin_fill()
    set_start(25.5, 101, w=1, c='#0ADBC9')
    left_rotate(1, 25, 0)
    left_rotate(3, 30, 1.8)
    left_rotate(3, 30, 1)
    left_rotate(3, 30, 1.8)
    left_rotate(3, 30, 1)
    fillcolor('#0ADBC9')
    end_fill()


def draw_head():
    fill_color_patch(46, 83, c='#9392B3')
    begin_fill()
    set_start(46, 83, w=4, c='#9392B3')
    left_rotate(1, 105, 10)
    right_rotate(3, 8, 20)
    right_rotate(3, 10, 22)
    right_rotate(1, 13, 15)
    left_rotate(3, 3, 9)
    left_rotate(2, 12, 6)
    left_rotate(1, 30, 5)
    left_rotate(2, 15, 3)
    right_rotate(1, 135, 8)
    right_rotate(3, 8, 8)
    left_rotate(1, 140, 8)
    left_rotate(2, 10, 8)
    right_rotate(1, 130, 8)
    right_rotate(5, 7.5, 7.5)
    left_rotate(1, 140, 5)
    left_rotate(2, 8, 5)
    right_rotate(1, 125, 5)
    right_rotate(5, 8, 6)
    goto(125, -130)
    set_start(125, -130, w=4, c='#9392B3')
    left_rotate(1, 78, 10)
    right_rotate(3, 5, 18)
    right_rotate(4, 6, 21)
    right_rotate(5, 5, 18)
    right_rotate(3, 7, 20)
    left_rotate(1, 15, 10)
    right_rotate(2, 5, 6)
    right_rotate(4, 7, 6.5)
    right_rotate(1, 130, 5)
    left_rotate(3, 11, 4.5)
    left_rotate(1, 140, 7)
    right_rotate(3, 12, 6)
    right_rotate(5, 5, 5)
    right_rotate(1, 130, 5)
    left_rotate(3, 5, 4)
    left_rotate(3, 13, 3)
    left_rotate(1, 120, 8)
    right_rotate(5, 10, 6.5)
    right_rotate(1, 95, 5)
    left_rotate(3, 12, 5)
    left_rotate(3, 10, 10)
    right_rotate(3, 5, 12)
    right_rotate(3, 2, 5)
    right_rotate(3, 5, 12)
    right_rotate(4, 5, 13)
    left_rotate(3, 6, 6)
    left_rotate(5, 13.5, 7)
    right_rotate(1, 158, 8)
    right_rotate(3, 7, 7)
    right_rotate(5, 15, 5)
    fillcolor('white')
    end_fill()


if __name__ == '__main__':
    title('前途似锦(公众号:小斌哥ge)')
    wide = 800
    height = 600
    screensize(wide, height, '#DC0058')
    setup(wide+30, height+30, 50, 10)
    shape(name='turtle')
    time.sleep(2)
    draw_ear()
    draw_cat()
    draw_head()
    # draw_face()
    # draw_mouth()
    # draw_eye()
    # draw_eyebrow()
    # draw_nose()
    # draw_cheek()
    # draw_forehead()
    # draw_foot()
    # draw_body()
    # draw_hand()
    # draw_clothes()
    # draw_jade()

    set_start(1000, 1000, 2.5)
    done()

绘图结果

在这里插入图片描述

代码获取

代码有1800行,可以用WX关注我,在后台回复关键字“前途似锦”获取完整代码。

声明:转载、二创等使用本文代码,请注明出处。


相关阅读:
用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利
用Python标准库turtle画一头金牛,祝您新年牛气冲天!

📢欢迎 点赞👍 收藏⭐ 评论📝 关注 如有错误敬请指正!

☟ 学Python,点击下方名片关注我。☟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MarkDown语法 + Typora笔记本

目录 一、多级标题 二、有序列表 三、无序列表 四、任务列表 五、行内代码 六、代码块 七、插入表格 八、插入图片 一、多级标题 1、语法 一级标题:# 二级标题:## 三级标题:### 四级标题:#### 五级标题:…

stackoverflow网站左下角弹框点击我接收所有cookie没反应怎么解决?

问题描述:打开stackoverflow网页后左下角总是有一个弹窗,点击接受所有cookie没有反应。 产生原因:因为是外网,因此点击按钮触发的时候被拦截了。 微软自带的edge浏览器: 打开浏览器进入扩展 选择管理扩展 获取Micro…

如何轻松应对IB数学?

如何轻松应对IB数学?同学想要在IB数学科取得好成绩,可以从两个方面来着手。 1.复习技巧 第一个是复习技巧。这方面,同学要清楚知道自己读的课程,它的教学大纲(Syllabus)要求是什么,还有它背后想…

【Bp2Lua】常量折叠和变量折叠

【Bp2Lua】常量折叠和变量折叠 谈一下编译器折叠优化算法 动机 变量折叠是 bp2lua 早期确定的两个技术卡点之一 bp2lua 做尽可能保守和必要的优化,提升生成代码的可读性,方便在生成代码上进行二次开发 常量折叠 常量折叠 - 维基百科,自…

Stlink固件更新问题“ST-Link is not in the dfu mode Please restart it“的解决方法

安装stlink utility:官网下载:https://www.st.com/content/st_com/zh.html在ST-LINK utility中连接芯片,提示仿真器版本过低,点击更新,报错提示:“ST LINK is not in the DFU mode plesse restart it”操作…

Day 6 Bean 的生命周期

建议浏览顺序从Day 1 开始。1 Bean的声明周期Spring Bean的生命周期是从 Bean 实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。Spring Bean的生命周期大体…

ArcGIS JS API分页查询小结

如果遇到发布的服务要素非常多,比如点要素,此时如果想要查询相关的属性或几何信息,如果使用featurelayer的query方法,可能会遇到server后台返回数限制,而只能返回获取到返回数上限的要素数目。 一个简单的方法是&…

nginx学习笔记4(小d课堂)

linux服务器安装jdk和jar包上传 我们把我们的文件放到我们的路径下,这部分之前学过了,这里我们再来复习一遍。 然后我们去解压这个压缩包: 然后我们给这个文件改个名字: 然后我们要去配置环境变量: 在文件末尾加 然后我…

新库上线 | CnOpenDataA股上市公司招投标数据

A股上市公司招投标数据 一、数据简介 招投标是指在市场经济条件下进行大宗货物的买卖、工程建设项目的发包与承包以及服务项目的采购与提供时所采取的一种普遍交易方式。招标和投标是一种商品交易行为,是交易过程的两个方面。历经三十多年的发展,我国已…

resultType自动映射与结果映射resultMap

今天继续完善一下mybatis系列相关博客,以便查阅,同时也希望能帮助到有需要的小伙伴,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢! 这一篇记录一下…

week 9 吴恩达 迁移学习 多任务学习 端到端学习

文章目录一、错误分析二、快速构建系统然后迭代三、训练和测试的不同数据分布1、不匹配数据的偏差和方差2、解决数据不匹配问题。四、迁移学习 transfer learning五、多任务学习 multi-task learning六、端到端 end-to-end learning一、错误分析 当我们在构建一个系统时&#…

自动驾驶BEV火了,再给它加点脑洞会靠谱吗?

作者 | 洪泽鑫 编辑 | Bruce百度今年Create大会上辅助驾驶板块的内容挺硬核的,不在这个行业内基本听不懂。 正好是研究兴趣所在,结合百度给的资料,试着来中译中一下。 总的来说,百度是弄了一个车路一体的BEV感知方案——叫UniBEV。…

基于FPGA的UDP 通信(二)

引言前文链接:基于FPGA的UDP 通信(一)本文继续介绍与以太网数据协议相关的内容。以太网帧协议IEEE802.3标准规定了,以太网数据传输的格式:字段解释:字段名称字段长度/(字节)含义前导…

【MyBatis】第二篇:核心配置文件常用标签

前提 Mbatis的配置文件中的顺序如下: MyBatis核心配置文件中的标签必须安装指定的顺序配置。 (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?…

SweetAlert让消息弹出窗口更加具有个性化!

SweetAlertSweetAlert是指可对JavaScript标准功能alert()和confirm()进行个性化定制的库。SweetAlert的要点官网上有很多示例,看了这些基本上就OK了。但是,在kintone上使用时,【弹出消息后更新页面】这个处理只参照示例来写的话,一…

微信小程序分包

1.什么是分包? 分包指的是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。 2.分包的好处对小程序进行分包的好处主要有以下两点: 可以优化小程序首次启动的下载时间在多…

Elasticsearch 核心技术(四):索引管理、映射管理、文档管理(REST API)

❤️ 个人主页:水滴技术 🚀 支持水滴:点赞👍 收藏⭐ 留言💬 🌸 订阅专栏:大数据核心技术从入门到精通 文章目录一、索引管理1. 创建索引创建一个索引索引设置映射字段别名2. 获取索引3. 删除索…

阿拉伯数转中文与英文[找到规律,抽象问题,转换成代码]

阿拉伯数转中文与英文前言一、阿拉伯数字转换1、阿拉伯数字转中文a、案例b、解决方案2、阿拉伯数转英文a、案例b、解决方案总结参考文献前言 如果思考算法的解法方案是一种模拟,那么这一般不是个好的解决方案。对于一个复杂的问题,挖掘其中的规律&#…

制造业管理系统如何帮助企业快速应对品质异常问题?

在企业生产制造过程中,成品发生品质异常问题是不可避免的。当成品出现问题,为了有效防范批量品质事故,品管需要快速判断可能是哪个材料引起的,需要知道这批成品是谁做的,什么时候做的,提供材料的分别是哪个…

MySQL基础篇语句--DDL语句

SQL简介 当面对一个陌生的数据库时,通常需要一种方式与它交互,以完成用户所需要的各种工作,这个时候,就要用到SQL语言了。 SQL是Structure Query Language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言,由…