Python七彩花朵

七彩花朵

系列文章

序号直达链接
Tkinter
1Python李峋同款可写字版跳动的爱心
2Python跳动的双爱心
3Python蓝色跳动的爱心
4Python动漫烟花
5Python粒子烟花
Turtle
1Python满屏飘字
2Python蓝色流星雨
3Python金色流星雨
4Python漂浮爱心
5Python爱心光波①
6Python爱心光波②
7Python满天繁星
8Python五彩气球
9Python白色飘雪
10Python七彩花朵
11Python 3D星空
12Python大雪纷飞
13Python一闪一闪亮星星
14Python爱心泡泡
15Python爱心射线
16Python圣诞礼物
17Python礼物圣诞树
18Python浪漫星空
19Python飞舞蝙蝠
20Python万圣礼物
21Python蓝色飘雪
Pygame
1Python跨年烟花
2Python炫酷烟花
3Python黑客帝国字母雨
敬请期待……

写在前面

Python绘制七彩花朵动画的完整代码。

技术需求

  1. Turtle 图形库

    • 利用 turtle 模块实现图形绘制与动画控制。作为 Python 的标准图形化编程库,turtle 提供了直观的绘图功能。
    • 通过 Pen 类创建画笔对象,灵活调整其位置、颜色、方向和路径,以绘制花朵及其动态效果。
  2. 随机数生成

    • 借助 random 模块生成随机数,使花朵的位置、颜色、大小及运动速度等属性随机化,提升动画的多样性和趣味性。
    • random.randint()random.uniform() 分别用于生成整数和浮点数,确保花朵属性的随机分配。
  3. 数学函数

    • 运用 math 模块中的 sin() 函数,模拟花朵的左右摆动。借助正弦波,实现花朵在水平方向上的周期性运动,营造自然漂浮的效果。
  4. 面向对象编程(OOP)

    • 定义 Flower 类,每朵花均为该类的实例。此类包含花朵的属性(如位置、颜色、大小)和方法(如移动、绘制),赋予每个花朵独立的行为和状态。
  5. 动画与画面更新

    • 使用 tu.tracer(0)tu.update() 调节动画更新频率,消除画面闪烁,确保动画流畅。
    • 在每次画面更新前调用 t.clear() 清除先前内容,实现动态变化效果。
  6. 无限循环与事件驱动

    • 采用 while True 实现无限循环,持续更新和绘制花朵,保证动画连续运行。
    • tu.mainloop() 启动主事件循环,维持图形窗口开启状态,直至用户关闭窗口。

完整代码

import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red','skyblue','orange','yellow','lime','pink','violet']
class Flower():    #每个花朵(花朵类)def __init__(self):self.r = ra.randint(8,12)        #花朵的半径self.x = ra.randint(-1000,1000)   #花朵的横坐标self.y = ra.randint(-500,500)     #花朵的纵坐标self.f = ra.uniform(-3.14,3.14)   #花朵左右移动呈正弦函数self.speed = ra.randint(5,10)     #花朵移动速度self.color = ra.choice(colors)    #花朵的颜色self.outline = 1                  #花朵的外框大小(可不要)def move(self):                    #花朵移动函数if self.y >= -500:            #当花朵还在画布中时self.y -= self.speed     #设置上下移动速度self.x += self.speed * math.sin(self.f)    #设置左右移动速度self.f += 0.1            #可以理解成标志,改变左右移动的方向else:                        #当花朵漂出了画布时,重新生成一个花朵self.r = ra.randint(8,12)self.x = ra.randint(-1000,1000)self.y = 500self.f = ra.uniform(-3.14,3.14)self.speed = ra.randint(5,10)self.color = ra.choice(colors)self.outline = 1
……

代码分析

这段代码利用 Python 的 Turtle 图形库和随机模块,通过定义一个花朵类来模拟屏幕上随机漂浮的花朵。核心在于主循环中随机生成花朵的位置、颜色、大小及运动方式,使花朵呈现出自由飘动的效果。以下是代码的详细分析。

1. 模块导入与初始设置

import turtle as tu
import random as ra
import math
tu.setup(1.0, 1.0)
t = tu.Pen()
t.ht()
colors = ['red', 'skyblue', 'orange', 'yellow', 'lime', 'pink', 'violet']
  • turtle 模块用于图形绘制和动画,此处别名为 tu
  • random 模块生成随机数,支持花朵的随机生成与运动。
  • math 模块提供数学函数,如正弦函数 (math.sin) 控制花朵的左右移动。
  • tu.setup(1.0, 1.0) 设置画布为全屏模式。
  • t = tu.Pen() 创建 Pen 对象用于绘图,t.ht() 隐藏画笔箭头。
  • colors 列表存储花朵可能的颜色,供随机选择。

2. 花朵类(Flower)

花朵类是动画的核心,描述每朵花的属性和行为。

2.1 构造方法(__init__

class Flower:def __init__(self):self.r = ra.randint(8, 12)        # 花朵半径self.x = ra.randint(-1000, 1000)   # 横坐标self.y = ra.randint(-500, 500)     # 纵坐标self.f = ra.uniform(-3.14, 3.14)   # 左右移动角度self.speed = ra.randint(5, 10)     # 移动速度self.color = ra.choice(colors)     # 颜色self.outline = 1                   # 外框大小
  • self.r 设定花朵半径,范围 8 至 12。
  • self.xself.y 分别设定横纵坐标,范围分别为 -1000 至 1000 和 -500 至 500。
  • self.f 决定左右摇动程度,范围 -π 至 π。
  • self.speed 设定移动速度,范围 5 至 10。
  • self.color 随机选择颜色。
  • self.outline 固定外框大小为 1。

2.2 移动方法(move

该方法更新花朵坐标,通过正弦函数实现水平波动运动。

  • self.y -= self.speed 实现向下移动。
  • self.x += self.speed * math.sin(self.f) 通过正弦函数实现周期性左右摆动。
  • self.f += 0.1 更新方向,改变摆动周期。
  • self.y < -500,表示花朵移出画布,重新生成并重置纵坐标为 500。

2.3 绘制方法(draw

控制是否绘制路径,移动到初始位置,设置方向和颜色,填充形状,绘制花瓣。

  • t.penup()t.pendown() 控制绘制路径。
  • t.goto(self.x, self.y) 移动至初始位置。
  • t.setheading(self.x) 设置方向。
  • t.color(self.color) 设置颜色。
  • t.begin_fill()t.end_fill() 填充形状。
  • for i in range(5): 循环绘制花瓣,使用 t.circle(self.r, extent=144) 绘制圆弧形花瓣,形成花朵整体形态。

3. 主程序

  • Flowers 列表存储所有花朵对象。
  • for i in range(100): 循环创建 100 个花朵对象。
  • tu.bgcolor('black') 设置背景色为黑色,突出花朵颜色。

4. 动画循环

  • tu.tracer(0) 禁用自动更新,避免闪烁,提高效率。
  • t.clear() 清除旧图形。
  • for i in range(50): 控制每帧 50 朵花的移动和绘制。
  • Flowers[i].move()Flowers[i].draw() 分别移动和绘制花朵。
  • tu.update() 更新画面显示花朵。

5. 事件循环

  • tu.mainloop() 启动主事件循环,持续显示窗口并响应输入。

6. 总结

此代码通过随机生成、运动和绘制花朵,实现了动态漂浮效果。每次运行时花朵表现不同,结合 turtle 库和 random 模块,展示了 Python 在图形和动画编程中的能力。

写在后面

我是一只有趣的兔子,感谢你的喜欢!

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

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

相关文章

【保姆级图文详解】MCP架构(客户端-服务端)、三种方式使用MCP服务、Spring AI MCP客户端和服务端开发、MCP部署方案、MCP安全性

文章目录前言一、MCP(model context protocol)1.1、概念描述1.2、MCP作用与意义1.3、MCP架构二、使用MCP(model context protocol)2.1、云平台使用MCP2.2、软件客户端使用MCP2.3、Spring AI程序中使用MCP三、Spring AI MCP(model context protocol)开发过程3.1、MCP服务端开发3…

Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge)笔记250713

Linux的 iproute2 配置:以太网(Ethernet)、绑定(Bond)、虚拟局域网(VLAN)、网桥(Bridge&#xff09;笔记250713 在 Linux 中使用 iproute2 工具集配置网络是现代且推荐的方法&#xff0c;它取代了旧的 ifconfig、route、brctl、vconfig 等命令。iproute2 提供了统一的接口 ip …

当信任上链解码区块链溯源系统开发逻辑与产业变革

当信任上链&#xff1a;解码区块链溯源系统的开发逻辑与产业变革在上海某高端超市的进口水果区&#xff0c;消费者王女士拿起一盒车厘子&#xff0c;用手机扫描包装上的二维码&#xff0c;屏幕立刻弹出一串动态信息&#xff1a;智利瓦尔帕莱索港口的装船时间、海关清关的具体日…

可视化DIY小程序工具!开源拖拽式源码系统,自由搭建,完整的源代码包分享

温馨提示&#xff1a;文末有资源获取方式传统的小程序开发对技术要求较高&#xff0c;这使得许多非技术人员望而却步。可视化DIY小程序工具应运而生&#xff0c;它通过拖拽式操作和开源代码系统&#xff0c;极大地降低了开发门槛&#xff0c;让更多人能够快速构建个性化小程序。…

【MLLM】多模态理解GLM-4.1V-Thinking模型

note GLM-4.1V-Thinking模型引入 课程采样强化学习&#xff08;RLCS, Reinforcement Learning with Curriculum Sampling&#xff09; 策略&#xff0c;在多个复杂推理任务中实现能力突破&#xff0c;整体性能达到 10B 级别视觉语言模型的领先水平。GLM-4.1V-9B-Thinking 通过…

【C++详解】STL-priority_queue使用与模拟实现,仿函数详解

文章目录一、priority_queue使用仿函数控制优先级sort算法里的仿函数二、手撕优先级队列优先级队列的容器适配器入堆出堆top/size/empty迭代器区间构造初始化(解耦)三、仿函数仿函数控制冒泡排序仿函数控制priority_queue比较逻辑仿函数使用场景仿函数的其他使用场景源码一、pr…

在mac m1基于ollama运行deepseek r1

1 下载和安装 在ollama的官网下载mac m1版本的ollama https://ollama.com/ 最终获得如下所示的下载地址 https://github.com/ollama/ollama/releases/latest/download/Ollama.dmg 然后点击安装&#xff0c;然后测试 ollama list 2 运行deepseek r1 deepseek-r1:8b 比较适…

TCP与UDP协议详解:网络世界的可靠信使与高速快递

> 互联网的骨架由传输层协议支撑,而TCP与UDP如同血管中的红细胞与血小板,各司其职却又缺一不可 ### 一、初识传输层双雄:网络通信的基石 想象你要给朋友寄送重要文件: - **TCP** 如同顺丰快递:**签收确认+物流追踪**,确保文件完整送达 - **UDP** 如同普通信件:**直接…

Datawhale AI 夏令营【更新中】

Datawhale AI 夏令营【更新中】夏令营简介大模型技术&#xff08;文本&#xff09;方向&#xff1a;用AI做带货视频评论分析机器学习&#xff08;数据挖掘&#xff09;方向&#xff1a;用AI预测新增用户夏令营简介 本次AI夏令营是Datawhale在暑期发起的大规模AI学习活动&#…

AutoDL挂载阿里云OSS

文章目录前言AutoDL 设置阿里OSS设置OSS配置相关key 相关竞猜时间前言 最近&#xff0c;AutoDL提示北京A区网盘功能要下架&#xff0c;然后需要对网盘中数据进行转移等操作&#xff0c;我想网盘中数据下载到本地&#xff0c;大概16G&#xff1b;直接在网盘那里下载&#xff0c…

java 基本数据类型所对应的包装类

一,对应列举Java 中有 8 种基本数据类型&#xff0c;每种基本数据类型都有对应的包装类&#xff0c;它们分别是&#xff1a;二,包装类的作用1. 满足面向对象编程需求Java 是面向对象的编程语言&#xff0c;基本数据类型不是对象&#xff0c;无法使用面向对象的特性&#xff08;…

牛客网50题-10

1.小苯的数字权值#include <iostream> #include <algorithm> using namespace std;const int max_n 2000000; int d[max_n 1]; int f[max_n 1];int main() {for(int i 1; i<max_n;i){for(int j i; j<max_n;ji){d[j];}}for(int i1; i<max_n;i){f[i] d…

基于springboot的大学公文收发管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

【机器学习】反向传播如何求梯度(公式推导)

写在前面 前期学习深度学习的时候&#xff0c;很多概念都是一笔带过&#xff0c;只是觉得它在一定程度上解释得通就行&#xff0c;但是在强化学习的过程中突然意识到&#xff0c;反向传播求梯度其实并不是一件简单的事情&#xff0c;这篇博客的目的就是要讲清楚反向传播是如何对…

ALB、NLB、CLB 负载均衡深度剖析

ALB、NLB、CLB 负载均衡深度剖析 前言 笔者在上周的实际工作中遇到了一个典型的负载均衡选择问题&#xff1a;在使用代理调用相关模型时&#xff0c;最初配置 Nginx 的代理地址为 ALB 的 7 层虚拟 IP&#xff08;VIP&#xff09;&#xff0c;但由于集团网络默认的超时时间为 3 …

历史数据分析——云南白药

医药板块走势分析: 从月线级别来看 2008年11月到2021年2月,月线上走出了两个震荡中枢的月线级别2085-20349的上涨段; 2021年2月到2024年9月,月线上走出了20349-6702的下跌段; 目前月线级别放巨量,总体还在震荡区间内,后续还有震荡和上涨的概率。 从周线级别来看 从…

【读书笔记】《Effective Modern C++》第3章 Moving to Modern C++

《Effective Modern C》第3章 Moving to Modern C 一、区分圆括号 () 与大括号 {} &#xff08;Item 7&#xff09; C11 引入统一初始化&#xff08;brace‑initialization&#xff09;&#xff0c;即使用 {} 来初始化对象&#xff0c;与传统的 () 存在细微差别&#xff1a;避…

Rust基础-part1

Rust基础[part1]—安装和编译 安装 ➜ rust curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh安装成功 [外链图片转存中…(img-ClSHJ4Op-1752058241580)] 验证 ➜ rust rustc --version zsh: command not found: rustc因为我是用的是zsh&#xff0c;所以zsh配置…

PyQt5布局管理(QGridLayout(网格布局))

QGridLayout&#xff08;网格布局&#xff09; QGridLayout&#xff08;网格布局&#xff09;是将窗口分隔成行和列的网格来进行排列。通常可以使用函数addWidget()将被管理的控件&#xff08;Widget)添加到窗口中&#xff0c;或者使用addLayout() 函数将布局&#xff08;Layou…

Java设计模式之行为型模式(责任链模式)介绍与说明

一、核心概念与定义 责任链模式是一种行为型设计模式&#xff0c;其核心思想是将请求沿着处理对象链传递&#xff0c;直到某个对象能够处理该请求为止。通过这种方式&#xff0c;解耦了请求的发送者与接收者&#xff0c;使多个对象有机会处理同一请求。 关键特点&#xff1a; 动…