1024特别剪辑: 使用Python Turtle 库绘制一棵随机生成的树

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨
🐻强烈推荐优质专栏: 🍔🍟🌯C++的世界(持续更新中)
🐻推荐专栏1: 🍔🍟🌯C语言初阶
🐻推荐专栏2: 🍔🍟🌯C语言进阶
🔑个人信条: 🌵知行合一
🍉本篇简介:>:使用Python Turtle 库绘制一棵随机生成的树
金句分享:
✨1024程序员节日快乐!✨

一、前言

这段代码使用 Python Turtle 库绘制一棵随机生成的树,并在最上层绘制一个 1024 程序员节快乐的文字。具体分析如下:

目录

  • 一、前言
  • 二、绘制随机树
    • 1. 导入 `turtle` 和 `random` 库。
    • 2. 创建一个 `turtle` 对象
    • 3. 定义一个 `draw_tree()` 函数
    • 4. 绘制文字
    • 5. 设置绘制速度
    • 代码示例:
  • 三、结语:

二、绘制随机树

1. 导入 turtlerandom 库。

import turtle
import random

2. 创建一个 turtle 对象

创建一个 turtle 对象,同时对画笔进行设置,如画笔颜色、宽度等。

使用Pythonturtle模块创建一个名为“pen”的乌龟对象,并设置其速度为0(最快)。然后,将它的颜色设置为棕色(brown),宽度为2,并将它的位置移动到屏幕中心下方。接着,将它的笔提起并将其放置到起始位置。最后,将屏幕背景颜色设置为白色(white)。

pen = turtle.Turtle()
pen.speed(0)
pen.color("brown")
pen.width(2)
pen.penup()
pen.setpos(0, -200)
pen.pendown()
turtle.bgcolor("white")	# 屏幕背景颜色设置为白色

3. 定义一个 draw_tree() 函数

该函数使用递归随机绘制树枝,并在最上层绘制花朵树顶

这是一个自定义函数,函数名是draw_tree()
它需要三个参数:
(1)branch_len表示分支长度
(2)t表示画图的turtle对象,
(3)level表示分支的层数。

这个函数使用递归来画树。当分支长度小于5时,树枝颜色会变为粉色,然后绘制一个小圆点表示花朵;否则,它会画出几个分支,并针对每个分支再次调用draw_tree()函数。在绘制分支之前,会选择一个随机的角度,使得分支看起来有随机性。此外,分支的宽度会根据分支长度自适应地调整,以使其外观更合理。

最后,在画完树之后,如果这是最顶层的分支,那么它会将画笔颜色改为绿色,并在树顶绘制一个小圆点,表示树叶。默认情况下,树的高度是150个单位,但可以在代码中修改。

def draw_tree(branch_len, t, level):if branch_len < 5:t.color("pink")		//颜色可自定义修改t.stamp()t.color("brown")else:angle = random.randint(20, 45)sf = random.uniform(0.6, 0.8)t.pensize(branch_len / 10)t.forward(branch_len)t.left(angle)draw_tree(branch_len * sf, t, level + 1)t.right(angle * 2)draw_tree(branch_len * sf, t, level + 1)t.left(angle)t.backward(branch_len)if level == 0:t.color("green")t.stamp()tree_height = 150
pen.left(90)
pen.backward(tree_height)
pen.pendown()
draw_tree(tree_height, pen, 0)

4. 绘制文字

绘制一些自己想要的文字

pen.penup()
pen.setpos(0, 200)
pen.pendown()
pen.write("牛牛祝大家!", align="center", font=("Arial", 30, "normal"))
pen.penup()
pen.setpos(0, 150)
pen.pendown()
pen.write("1024 程序员节快乐", align="center", font=("Arial", 30, "normal"))

5. 设置绘制速度

pen.speed(0)

代码示例:

import turtle
import random# 创建 turtle 对象
pen = turtle.Turtle()
pen.speed(0)
pen.color("brown")
pen.width(2)
pen.penup()
pen.setpos(0, -200)
pen.pendown()
turtle.bgcolor("white")# 定义绘制树的函数
def draw_tree(branch_len, t, level):if branch_len < 5:t.color("pink")  # 小于5时,树叶变粉红色t.stamp()  # 绘制花朵t.color("brown")  # 切换回树干颜色else:angle = random.randint(20, 45)  # 随机选择分支角度sf = random.uniform(0.6, 0.8)  # 随机选择分支长度缩放因子t.pensize(branch_len / 10)  # 根据树枝长度设置画笔粗细t.forward(branch_len)  # 绘制树枝t.left(angle)  # 左转分支角度draw_tree(branch_len * sf, t, level + 1)  # 递归绘制右分支,增加level参数t.right(angle * 2)  # 右转2倍的分支角度,即左转分支角度的2倍draw_tree(branch_len * sf, t, level + 1)  # 递归绘制左分支,增加level参数t.left(angle)  # 恢复方向t.backward(branch_len)  # 返回到原位置# 在树的最顶层(level=0)改变树叶和树干颜色if level == 0:t.color("green")  # 树干变绿色t.stamp()  # 绘制树顶# 初始化树干长度
tree_height = 150
pen.left(90)
pen.backward(tree_height)
pen.pendown()# 开始绘制树
draw_tree(tree_height, pen, 0)  # 初始level为0# 绘制文字
pen.penup()
pen.setpos(0, 200)  # 设置文字位置
pen.pendown()
pen.write("牛牛祝大家!", align="center", font=("Arial", 30, "normal"))
pen.penup()
pen.setpos(0, 150)  # 设置文字位置
pen.pendown()
pen.write("1024 程序员节快乐", align="center", font=("Arial", 30, "normal"))# 设置绘制速度
pen.speed(0)  # 设置绘制速度为0,最快速度while True:pen.hideturtle()  # 隐藏画笔turtle.delay(500)  # 等待一段时间pen.showturtle()  # 显示画笔turtle.delay(500)  # 等待一段时间

最后的效果图:

在这里插入图片描述

三、结语:

日期:20231024

今天是属于我们的节日,让我们一起庆祝自己的职业与热爱,致敬技术的追求!

我们追求极致的代码质量,痴迷于算法优化和性能提升。我们编写的软件能够帮助人们提高工作效率、改善生活品质、推动科技发展。

但同时,我们也面临着巨大的挑战。代码bug、技术可能过时、沟通协作等问题都可能影响我们的日常工作。因此,我们需要持续学习、不断进步,才能够应对新技术的挑战,确保我们的软件和系统能够不断地满足人们的需求。

祝福:
祝愿所有程序员节日快乐,愿我们的代码无bug,技术日新月异,能够在这个领域中不断成长、创造绚丽多彩的生活!

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

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

相关文章

MYSQL(事务+锁+MVCC+SQL执行流程)理解(2)

一)MYSQL中的锁(知识补充) 可以通过In_use字段来进行判断是否针对于表进行加了锁 1)对于undo log日志来说:新增类型的&#xff0c;在事务提交之后就可以清除掉了&#xff0c;修改类型的&#xff0c;事务提交之后不能立即清除掉这些日志会用于mvcc只有当没有事务用到该版本信息时…

【原创】解决Kotlin无法使用@Slf4j注解的问题

前言 主要还是辟谣之前的网上的用法&#xff0c;当然也会给出最终的使用方法。这可是Kotlin&#xff0c;关Slf4j何事&#xff01;&#xff1f; 辟谣内容&#xff1a;创建注解来解决这个问题 例如&#xff1a; Target(AnnotationTarget.CLASS) Retention(AnnotationRetentio…

Spark内核调度

目录 一、DAG &#xff08;1&#xff09;概念 &#xff08;2&#xff09;Job和Action关系 &#xff08;3&#xff09;DAG的宽窄依赖关系和阶段划分 二、Spark内存迭代计算 三、spark的并行度 &#xff08;1&#xff09;并行度设置 &#xff08;2&#xff09;集群中如何规划并…

javascript IP地址正则表达式

/^(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2})\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2}|0)\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2}|0)\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|(\d){1,2}|0)$/g.test(10.2.35.8) 注&#xff1a; 一定不要把表达式赋值给变量&#xff0c;直接…

FPGA/SoC控制机械臂

FPGA/SoC控制机械臂 机器人技术处于工业 4.0、人工智能和边缘革命的前沿。让我们看看如何创建 FPGA 控制的机器人手臂。 介绍 机器人技术与人工智能和机器学习一起处于工业 4.0 和边缘革命的最前沿。 因此&#xff0c;我认为创建一个基础机器人手臂项目会很有趣&#xff0c;我们…

听GPT 讲Rust源代码--library/std(3)

rust标准库std中的src目录主要包含以下内容和模块: alloc:内存分配相关函数,比如alloc::boxed::Box、alloc::string::String等。 ascii:ASCII相关工具函数。 char:字符相关类型和函数,如Char、char等。 cmp:比较相关trait和函数,如Ord、Eq、PartialOrd等。 env:环境变量相关功能…

什么是React中的有状态组件(stateful component)和无状态组件(stateless component)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

微信小程序如何跳转页面

1.wx.navigateTo&#xff1a;用于跳转到其他页面&#xff0c;并保留当前页面。通过该 API 跳转后&#xff0c;可以通过返回按钮回到原页面。 wx.navigateTo({url: /pages/otherPage/otherPage })2.wx.redirectTo&#xff1a;用于跳转到其他页面&#xff0c;并关闭当前页面。通…

Linux中关于glibc包导致的服务器死机或者linux命令无法使用的情况

glibc是gnu发布的libc库&#xff0c;即c运行库。glibc是linux系统中最底层的api&#xff0c;几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外&#xff0c;它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX …

量子计算与量子密码(入门级)

量子计算与量子密码 写在最前面一些可能带来的有趣的知识和潜在的收获 1、Introduction导言四个特性不确定性&#xff08;自由意志论&#xff09;Indeterminism不确定性Uncertainty叠加原理(线性)superposition (linearity)纠缠entanglement 虚数的常见基本运算欧拉公式&#x…

基于C/C++的UG二次开发流程

文章目录 基于C/C的UG二次开发流程1 环境搭建1.1 新建工程1.2 项目属性设置1.3 添加入口函数并生成dll文件1.4 执行程序1.5 ufsta入口1.5.1 创建程序部署目录结构1.5.2 创建菜单文件1.5.3 设置系统环境变量1.5.4 制作对话框1.5.5 创建代码1.5.6 部署和执行 基于C/C的UG二次开发…

hypercube背景设置为白色,绘制高光谱3D立方体

import scipy pip install wxpython PyOpenGL和Spectral需要本地安装 可参考链接https://blog.csdn.net/qq_43204333/article/details/119837870 参考&#xff1a;https://blog.csdn.net/Tiandailan/article/details/132719745?spm1001.2014.3001.5506Mouse Functions:left-cl…

看完这篇 教你玩转渗透测试靶机Vulnhub——Hacksudo: Aliens

Vulnhub靶机Bluemoon: 2021渗透测试详解 Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;数据库后台传木马&#xff1a;③&#xff1a;反弹shell&#x…

Java设计模式之模板方法模式

目录 定义 结构 案例 优缺点 优点 缺点 使用场景 JDK源码解析 无法查看的无参read()原因 定义 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类中&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。简单来说&#xf…

二十、设计模式之迭代器模式

目录 二十、设计模式之迭代器模式能帮我们干什么&#xff1f;主要解决什么问题&#xff1f;优缺点优点缺点&#xff1a; 使用的场景角色 实现迭代器模式定义迭代器容器实现可迭代接口迭代器实现使用 总结 二十、设计模式之迭代器模式 所属类型定义行为型提供一种方法顺序访问一…

Postman如何导出接口的几种方法?

本文主要介绍了Postman如何导出接口的几种方法&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 前言&#xff1a; 我的文章还是一贯的作风&#xff0c;简确用风格&#xff08;简单确实有用&#xff09;&a…

单片机核心/RTOS必备 (ARM汇编)

ARM汇编概述 一开始&#xff0c;ARM公司发布两类指令集&#xff1a; ARM指令集&#xff0c;这是32位的&#xff0c;每条指令占据32位&#xff0c;高效&#xff0c;但是太占空间。Thumb指令集&#xff0c;这是16位的&#xff0c;每条指令占据16位&#xff0c;节省空间。 要节…

《排错》Python重新安装后,执行yum命令报错

安装完新的python以后&#xff0c;发现yum命令没法用 以下是报错信息&#xff1a; [rootmaster ~]# yum There was a problem importing one of the Python modules required to run yum. The error leading to this problem was:No module named yumPlease install a packag…

8.MySQL内外连接

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 表的内连和外连 内连接 外连接 左外连接 右外连接 我们进行演示的表结构是这样的&#xff1a; 表的内连和外连 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的…

Redis快速上手篇(三)(事务+Idea的连接和使用)

Redis事务 可以一次执行多个命令&#xff0c;本质是一组命令的集合。一个事务中的 所有命令都会序列化&#xff0c;按顺序地串行化执行而不会被其它命令插入&#xff0c;不许加塞。 单独的隔离的操作 官网说明 https://redis.io/docs/interact/transactions/ MULTI、EXEC、…