当前位置: 首页 > news >正文

Python圣诞主题绘图:用turtle库打造冬日奇妙画面【第31篇—python:圣诞节】

文章目录

  • Python圣诞主题绘图
    • 导言
    • 代码结构概览
    • 详细解析
      • drawlight函数
      • tree函数
      • xzs函数
      • drawsnow函数
      • 五角星的绘制
    • 完整代码
    • 代码解析
    • 总结

Python圣诞主题绘图

导言

圣诞季节是个充满欢乐和创意的时刻。在这个技术博客中,我们将深入探讨如何使用Python的turtle库创建一个有趣的圣诞主题绘图。这个项目包含了圣诞树、彩灯、雪花等元素,通过代码实现了一个生动的冬季场景。

在这里插入图片描述

代码结构概览

首先,我们将了解整个代码的结构,以及每个函数的作用。代码主要分为几个部分:

  1. 导入模块和库

    • 使用turtle库进行绘图
    • 导入random库生成随机数
    • 引入time库用于控制绘图速度
  2. 绘制彩灯

    • 定义drawlight函数,根据随机数绘制不同颜色和形状的彩灯
  3. 绘制圣诞树

    • 定义tree函数,递归绘制圣诞树的分支
    • 在适当的位置调用drawlight函数绘制彩灯
  4. 绘制树下装饰

    • 定义xzs函数,随机生成树下小装饰
  5. 绘制雪花

    • 定义drawsnow函数,绘制白色的雪花
  6. 绘制圣诞五角星

    • 利用turtle库绘制一个橙黄色的五角星
  7. 整体布局和文字

    • 将绘制的元素整合,完成整体布局
    • 使用turtle库的write函数添加"Merry Christmas"文字
  8. 绘制结束

    • 使用turtle库的done函数完成绘图

详细解析

drawlight函数

这个函数根据随机数绘制彩灯。通过判断随机数的取值,选择不同颜色和形状的彩灯,为圣诞树增添色彩。

tree函数

tree函数使用递归的方式绘制圣诞树,实现了树干和分支的绘制。在适当的位置调用drawlight函数,为圣诞树挂上彩灯。

xzs函数

xzs函数随机生成树下小装饰,为圣诞树的底部增加一些趣味性和多样性。

drawsnow函数

drawsnow函数绘制了白色的雪花,通过turtle库实现了雪花的形状,为整个场景增加了冬季的氛围。

五角星的绘制

通过turtle库的绘图功能,实现了一个橙黄色的五角星,为圣诞主题画面锦上添花。

完整代码

import turtle as  t
from turtle import *
import random as r
import  time#定义几个函数先#定义画彩灯的函数
def drawlight():if r.randint(0,30) == 0:color('tomato')circle(6)elif r.randint(0,30) == 1:color('orange')circle(3)else:linewidth = 5color('dark green')#定义画圣诞树的函数
def tree(d,s):if d <= 0:  returnforward(s)tree(d-1, s * .8)right(120)tree(d-3, s * .5)drawlight()right(120)tree(d-3, s * .5)right(120)backward(s)#定义树下面小装饰的函数
def  xzs():for i in range(200):a = 200-400* r.random()b = 10 -20* r.random()up()forward(b)left(90)forward(a)down()if  r.randint(0,1) == 0:color('tomato')else:color('wheat')circle(2)up()backward(a)right(90)backward(b)#定义一个画雪花的函数
def drawsnow():t.hideturtle()t.pensize(2)for i in range(200):t.pencolor("white")t.penup()t.setx(r.randint(-350,350))t.sety(r.randint(-100,350))t.pendown()dens = 6snowsize = r.randint(1,10)for j in range(dens):t.forward(int(snowsize))t.backward(int(snowsize))t.right(int(360/dens))n=100.0
t.pensize(10)
speed("fastest")
t.screensize(800,600, "black")
left(90)
forward(3 * n)
color("orange", "yellow")
begin_fill()
left(126)#画五角星
for i in range(5):forward(n/5)right(144)forward(n/5)left(72)end_fill()
right(126)color("dark green")
backward(n * 4.8)#调用画树的函数
tree(15 , n)
backward(n/2)xzs()#写文字
t.color("dark red", "red")
t.write("Merry Christmas", align="center", font=("Comic Sans MS", 40, "bold"))# 调用雪花函数
drawsnow()t.done()    #收笔

代码解析

这段代码使用turtle库绘制了一个圣诞树和相关的装饰,包括五角星、彩灯、小装饰和雪花。以下是对代码的解释:

  1. import turtle as t: 导入turtle库,并使用别名t。

  2. from turtle import *: 从turtle库中导入所有的符号(symbol)。

  3. import random as r: 导入random库,并使用别名r。

  4. import time: 导入time库。

  5. 定义画彩灯的函数drawlight()

    • 如果随机数在范围[0, 30]中,设置彩灯颜色为’tomato’,并画一个半径为6的圆。
    • 如果随机数在范围[0, 30]中,设置彩灯颜色为’orange’,并画一个半径为3的圆。
    • 否则,设置颜色为’dark green’。
  6. 定义画圣诞树的函数tree(d, s)

    • 如果递归深度小于等于0,则返回。
    • 向前移动分支长度。
    • 递归调用tree函数,减小深度d,缩小分支长度为当前的0.8倍。
    • 右转120度。
    • 递归调用tree函数,减小深度d-3,缩小分支长度为当前的0.5倍。
    • 调用drawlight方法,画彩灯。
    • 右转120度。
    • 递归调用tree函数,减小深度d-3,缩小分支长度为当前的0.5倍。
    • 右转120度。
    • 向后移动分支长度。
  7. 定义树下面小装饰的函数xzs()

    • 循环200次,随机生成a和b,分别用于控制小装饰的位置。
    • 提起笔,移动到新的位置。
    • 如果随机数为0,设置颜色为’tomato’;否则,设置颜色为’wheat’。
    • 画一个半径为2的圆。
    • 提起笔,回到原位置。
  8. 定义一个画雪花的函数drawsnow()

    • 隐藏画笔,设置笔的大小。
    • 循环200次,生成雪花的位置和大小。
    • 设置雪花的颜色为白色。
    • 画雪花,使用六个线段模拟五角星的形状。
  9. 初始化一些变量,包括分支长度n、编码方式、背景颜色等。

  10. t.pensize(10): 设置画笔的宽度。

  11. speed("fastest"): 设置绘图速度为最快。

  12. t.screensize(800, 600, "black"): 设置画布大小和背景颜色。

  13. left(90): 将turtle当前方向左旋转90度,为绘制树的准备。

  14. forward(3 * n): 向前移动3倍的分支长度,用于确定树的高度。

  15. color("orange", "yellow"): 设置画笔颜色为橙色,填充颜色为黄色。

  16. begin_fill(): 开始填充颜色。

  17. 用for循环绘制五角星。

  18. end_fill(): 结束填充颜色。

  19. right(126): 向右旋转126度,为绘制树干的准备。

  20. color("dark green"): 设置画笔颜色为深绿色。

  21. backward(n * 4.8): 向相反的方向移动4.8倍的分支长度,回到树干的位置。

  22. 调用tree(15, n):开始绘制圣诞树的绿叶,传入递归深度15和分支长度n。

  23. backward(n/2): 向相反的方向移动五分之一的分支长度,为绘制完整树形状。

  24. 调用xzs():绘制树下面的小装饰。

  25. t.color("dark red", "red"): 设置字体颜色为深红色,填充颜色为红色。

  26. `t.write(“Merry Christmas”, align=“center”, font=(“Comic Sans MS”,

40, “bold”))`: 在画布中央写上"Merry Christmas"。

  1. 调用drawsnow():绘制雪花。

  2. t.done(): 完成绘制。

总结

通过这个项目,我们深入学习了turtle库的使用,并利用递归的方式实现了复杂的绘图。整个代码结构清晰,函数模块化,使得代码易于理解和扩展。通过调整参数,可以生成不同形状和规模的圣诞主题画面,为我们的创意提供了更多的可能性。

希望这篇技术博客能够帮助读者更深入地理解Python绘图库的使用,并激发更多有趣的创意和项目实现。祝大家圣诞快乐!

相关文章:

Python圣诞主题绘图:用turtle库打造冬日奇妙画面【第31篇—python:圣诞节】

文章目录 Python圣诞主题绘图导言代码结构概览详细解析drawlight函数tree函数xzs函数drawsnow函数五角星的绘制 完整代码代码解析总结 Python圣诞主题绘图 导言 圣诞季节是个充满欢乐和创意的时刻。在这个技术博客中&#xff0c;我们将深入探讨如何使用Python的turtle库创建一…...

[开发语言][c++]:Static关键字和全局变量

Static关键字和全局变量 1. 生命周期、作用域和初始化时机2. 全局变量3. Static 关键字3.1 面向过程3.1.1 静态全局变量3.1.2 静态局部变量&#xff08;单例中会使用&#xff09;3.1.3 静态函数 3.2 面向对象3.2.1 类内静态成员变量3.2.2 类内静态成员函数 Reference 写在前面&…...

计算机组成原理 第一弹

ps&#xff1a;本文章的图片来源都是来自于湖科大教书匠高老师的视频&#xff0c;声明&#xff1a;仅供自己复习&#xff0c;里面加上了自己的理解 这里附上视频链接地址&#xff1a;1-2 计算机的发展_哔哩哔哩_bilibili ​​ 目录 &#x1f680;计算机系统 &#x1f680;计…...

Hadoop基础知识

Hadoop基础知识 1、Hadoop简介 广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念——Hadoop生态圈。狭义上说&#xff0c;Hadoop指Apache这款开源框架&#xff0c;它的核心组件有&#xff1a; HDFS&#xff08;分布式文件系统&#xff09;&#xff1a;解决海量数据存储Y…...

Java进阶之旅第五天

Java进阶之旅第五天 不可变集合 应用场景 1.如果某个数据不能被修改,把它拷贝到不可变集合中是个很好的实践2.当集合对象被不可信的库调用时,不可变形式是安全的3.不可变集合不能修改,只能进行查询 获取方式 在List,Set,Map接口中,都存在静态的of方法,可以获取一个不可变的…...

拓展边界:前端世界的跨域挑战

目录 什么是跨域 概念 同源策略及限制内容 常见跨域场景 如何解决跨域 CORS Nginx代理跨域 Node中间件代理跨域 WebSocket postMessage JSONP 其他 什么是跨域 概念 在此之前&#xff0c;我们了解一下一个域名地址的组成&#xff1a; 跨域指的是在网络安全中&…...

旅游项目day03

1. 前端整合后端发短信接口 2. 注册功能 后端提供注册接口&#xff0c;接受前端传入的参数&#xff0c;创建新的用户对象&#xff0c;保存到数据库。 接口设计&#xff1a; 实现步骤&#xff1a; 手机号码唯一性校验&#xff08;后端一定要再次校验手机号唯一性&#xff09…...

单片机学习记录(一)

简答题 第1章 1.微处理器、微计算机、CPU、单片机、嵌入式处理器他们之间有何区别&#xff1f; 答&#xff1a;微处理器、CPU都是中央处理器的不同称谓&#xff0c;微处理器芯片本身不是计算机&#xff1b; 单片机、微计算机都是一个完整的计算机系统&#xff0c;单片机是集…...

MacBookPro怎么数据恢复? mac电脑数据恢复?

使用电脑的用户都知道&#xff0c;被删除的文件一般都会经过回收站&#xff0c;想要恢复它直接点击“还原”就可以恢复到原始位置。mac电脑同理也是这样&#xff0c;但是“回收站”在mac电脑显示为“废纸篓”。 如果电脑回收站&#xff0c;或者是废纸篓里面的数据被清空了&…...

Python多线程—threading模块

参考&#xff1a;《Python核心编程》 threading 模块的Thread 类是主要的执行对象&#xff0c;而且&#xff0c;使用Thread类可以有很多方法来创建线程&#xff0c;这里介绍以下两种方法&#xff1a; 创建 Thread 实例&#xff0c;传给它一个函数。派生 Thread 的子类&#xf…...

mysql limit

语法 SELECT * FROM TABLE_NAME LIMIT 起始位置&#xff0c;偏移量注&#xff1a; 起始位置从0开始 示例 查询的第1条数据到第100条数据 limit 0,100查询的第101条数据到第200条数据 limit 100,100注意不要用 limit 101,100示例2 limit 语句应放在order by语句后面执行 …...

解决国内Linux服务器无法使用Github的方法

解决思路&#xff1a;修改Host https://www.ipaddress.com/ 利用上面的网站查询github.com和raw.githubusercontent.com的DNS解析的IP地址 最后&#xff0c;修改服务器的/etc/hosts 添加如下两行&#xff1a; 140.82.112.3 github.com 185.199.108.133 raw.githubuserconte…...

动态规划基础(二)最长公共子序列 LCS

讲解求两个串中最长的公共的子序列长度或输出子序列等 poj1458 题目大意 给定两个字符串&#xff0c;要求输出两个字符串中最长公共子序列长度 思路 我们定义 a [ i ] [ j ] a[i][j] a[i][j]为&#xff0c;当字串 s t r 1 str1 str1到 i i i位置&#xff0c;字串 s t r 2 s…...

React配置src根目录@

文章目录 1.打开webpack配置文件2.配置webpack 1.打开webpack配置文件 yarn eject or npm run eject 如果报错了记得提前 git commit一下 2.配置webpack 找到 webpack.config.js 文件在 webpack.config.js 文件中找到 alias 配置在alias里添加: path.resolve(src) , 或者 : pa…...

SQL Povit函数使用及实例

PIVOT函数常用于数据的行转列&#xff0c;同时也可以用此函数实现类似于Excel中的数据透视表的效果。 PIVOT函数 PIVOT 函数的基本语法如下&#xff1a; -- PIVOT 语法 SELECT <非透视的列>,[第一个透视的列] AS <列名称>,[第二个透视的列] AS <列名称>,.…...

Lite AD的安装

1、Lite AD的安装及配置 Lite AD流程&#xff1a; &#xff08;1&#xff09;创建一个新的Windows 10&#xff0c;安装tools&#xff0c;再安装ITA组件&#xff08;安装Lite AD会自动安装VAG/VLB&#xff09; &#xff08;2&#xff09;创建一个新的Windows 10&#xff0c;安…...

限流算法之流量控制的平滑之道:滑动时间窗算法

文章目录 引言简介优点缺点样例样例图样例代码 应用场景结论 引言 在互联网应用中&#xff0c;流量控制是一个重要的组件&#xff0c;用于防止系统过载和保护核心资源。常见的限流算法包括固定窗口算法和滑动时间窗算法。本文将重点介绍滑动时间窗算法&#xff0c;并分析其优缺…...

C语言数据结构——顺序表

&#xff08;图片由AI生成&#xff09; 0.前言 在程序设计的世界里&#xff0c;数据结构是非常重要的基础概念。本文将专注于C语言中的一种基本数据结构——顺序表。我们将从数据结构的基本概念讲起&#xff0c;逐步深入到顺序表的内部结构、分类&#xff0c;最后通过一个实…...

网络安全:守护数字世界的盾牌

在当今数字化的时代&#xff0c;网络已经渗透到我们生活的方方面面。从社交媒体到在线银行&#xff0c;从在线购物到工作文件传输&#xff0c;网络几乎无处不在。然而&#xff0c;随着网络的普及&#xff0c;网络安全问题也日益凸显。那么&#xff0c;如何确保我们的数字资产安…...

vue3hooks的使用

hook是钩子的意思&#xff0c;看到“钩子”是不是就想到了钩子函数&#xff1f;事实上&#xff0c;hooks 还真是函数的一种写法。 vue3 借鉴 react hooks 开发出了 Composition API &#xff0c;所以也就意味着 Composition API 也能进行自定义封装 hooks。 vue3 中的 hooks …...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...