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
英文地址,請注明出處:http://en.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; 動…