目錄
一、方法步驟
二、代碼實(shí)現(xiàn)
三、代碼解釋
?四、優(yōu)化代碼
五、Python turtle模塊介紹
六、Python turtle模塊使用方法
創(chuàng)建畫布和畫筆對(duì)象
控制畫筆移動(dòng)和旋轉(zhuǎn)
控制畫筆外觀
繪制基本圖形
控制畫布參數(shù)
這段代碼使用Python turtle模塊,利用遞歸的方式繪制出了5棵櫻花樹(shù)的效果,并在畫布上添加了一段文字。主要實(shí)現(xiàn)過(guò)程如下:
- 定義了一個(gè)名為“Tree(branch, t)”的函數(shù),該函數(shù)用于繪制櫻花樹(shù)的軀干和分支。在函數(shù)中,通過(guò)對(duì)畫筆顏色、畫筆粗細(xì)和旋轉(zhuǎn)角度進(jìn)行設(shè)置,使得每次調(diào)用自身(遞歸)時(shí)都會(huì)繪制出兩個(gè)較小的分支,最終形成完整的櫻花樹(shù)形狀。
- 初始化畫筆對(duì)象t,并設(shè)置畫布大小、背景圖片等參數(shù)。然后,通過(guò)多次調(diào)用“Tree()”函數(shù)并調(diào)整畫筆位置和角度,依次繪制出5棵櫻花樹(shù)。
- 最后,將畫筆抬起并移動(dòng)到適當(dāng)?shù)奈恢?,使用“write()”函數(shù)在畫布上寫入一段文本。并通過(guò)監(jiān)聽(tīng)畫布點(diǎn)擊事件,讓程序等待用戶點(diǎn)擊畫布后退出,結(jié)束整個(gè)繪圖過(guò)程。
一、方法步驟
- 首先導(dǎo)入需要用到的模塊turtle、random、time。
- 接著定義一個(gè)函數(shù)Tree(branch,t),用于繪制櫻花樹(shù)的分支。函數(shù)中的branch參數(shù)表示分支長(zhǎng)度,t參數(shù)表示Turtle實(shí)例。
- 在Tree函數(shù)中,首先設(shè)置一個(gè)適當(dāng)?shù)睦L制速度,每次繪制后遞歸調(diào)用自身前暫停一小段時(shí)間,避免繪制過(guò)快。然后根據(jù)分支長(zhǎng)度設(shè)置不同的顏色和粗細(xì)。當(dāng)分支長(zhǎng)度在8-12之間時(shí),有一定概率繪制白色分支,否則繪制淡珊瑚色分支;當(dāng)分支長(zhǎng)度小于8時(shí),也有一定概率繪制白色分支,否則繪制淡珊瑚色分支;否則繪制赭色(樹(shù)干)。
- 接下來(lái)在Tree函數(shù)中繪制當(dāng)前分支。根據(jù)隨機(jī)產(chǎn)生的旋轉(zhuǎn)角度和長(zhǎng)度系數(shù),遞歸調(diào)用自身繪制左右兩個(gè)子分支。注意每次繪制后需要返回到上一層分支處。
- 在主程序中,首先創(chuàng)建一個(gè)Turtle實(shí)例,并進(jìn)行初始化操作。
- 然后使用Turtle實(shí)例繪制背景圖片,并隱藏畫筆。
- 設(shè)置畫筆位置和方向,調(diào)用Tree函數(shù)繪制五棵櫻花樹(shù)。具體來(lái)說(shuō),我們將畫筆移動(dòng)到指定位置,下方留出一定空白區(qū)域,然后調(diào)用Tree函數(shù)繪制櫻花樹(shù)。
- 繪制文本“愿我們向上生長(zhǎng),如花一般燦爛!!!”,并設(shè)置字體顏色和大小??梢允褂肨urtle實(shí)例的write方法在畫布上輸出文本。
- 最后等待用戶關(guān)閉畫布。可以使用Screen類的exitonclick方法實(shí)現(xiàn)此功能。
二、代碼實(shí)現(xiàn)
import turtle as T # 引入 turtle 庫(kù)并起一個(gè)別名 T
import random # 引入 random 庫(kù)
import time # 引入 time 庫(kù)
# 畫櫻花的軀干(60,t)
def Tree(branch, t):
time.sleep(0.0005) # 使程序暫停 0.0005 秒,以便視覺(jué)效果
if branch > 3:
if 8 <= branch <= 12:
if random.randint(0, 2) == 0:
t.color('snow') # 白色
else:
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 3)
elif branch < 8:
if random.randint(0, 1) == 0:
t.color('snow') # 白色
else:
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 2)
else:
t.color('sienna') # 赭(zhě)色
t.pensize(branch / 10) # 筆畫寬度為枝干長(zhǎng)度的 1/10
t.forward(branch) # 前進(jìn) branch 的距離
a = 1.5 * random.random() # 隨機(jī)調(diào)整角度
t.right(20 * a) # 向右旋轉(zhuǎn)一定角度
b = 1.5 * random.random() # 隨機(jī)分支長(zhǎng)度
Tree(branch - 10 * b, t) # 遞歸調(diào)用自身,繪制左側(cè)小樹(shù)枝
t.left(40 * a) # 向左旋轉(zhuǎn)一定角度
Tree(branch - 10 * b, t) # 遞歸調(diào)用自身,繪制右側(cè)小樹(shù)枝
t.right(20 * a) # 向右旋轉(zhuǎn)回原方向
t.up() # 抬起畫筆
t.backward(branch) # 后退 branch 的距離
t.down() # 落下畫筆,準(zhǔn)備繪制下一個(gè)小樹(shù)枝
# 繪圖區(qū)域
t = T.Turtle() # 初始化畫筆 t
# 畫布大小
w = T.Screen() # 初始化畫布 w
t.hideturtle() # 隱藏畫筆
t.getscreen().tracer(5, 0) # 設(shè)置畫筆的行進(jìn)速度和動(dòng)畫開(kāi)關(guān)狀態(tài),使得畫筆更加流暢
w.bgpic('6a89450a1da14f33a44582542240f48b(1).png') # 使用背景圖片作為畫布的背景
t.left(90) # 向左旋轉(zhuǎn) 90 度
t.up() # 抬起畫筆
t.backward(150) # 后退 150 的距離
t.down() # 落下畫筆
t.color('sienna') # 設(shè)置畫筆顏色為赭(zhě)色
# 畫第一棵櫻花樹(shù)
Tree(70, t) # 枝干長(zhǎng)度為 70
Tree(60, t) # 枝干長(zhǎng)度為 60
Tree(40, t) # 枝干長(zhǎng)度為 40
# 畫第二棵櫻花樹(shù)
t.up() # 抬起畫筆
t.goto(-350, -300) # 定位畫筆位置
t.setheading(90) # 設(shè)置畫筆朝向
t.color('sienna') # 設(shè)置畫筆顏色為赭(zhě)色
t.down() # 落下畫筆
Tree(60, t) # 枝干長(zhǎng)度為 60
# 畫第三棵櫻花樹(shù)
t.up() # 抬起畫筆
t.goto(350, -300) # 定位畫筆位置
t.setheading(90) # 設(shè)置畫筆朝向
t.color('sienna') # 設(shè)置畫筆顏色為赭(zhě)色
t.down() # 落下畫筆
Tree(40, t) # 枝干長(zhǎng)度為 40
# 畫第四棵櫻花樹(shù)
t.up() # 抬起畫筆
t.goto(300, -300) # 定位畫筆位置
t.setheading(90) # 設(shè)置畫筆朝向
t.color('sienna') # 設(shè)置畫筆顏色為赭(zhě)色
t.down() # 落下畫筆
Tree(40, t) # 枝干長(zhǎng)度為 40
Tree(20, t) # 枝干長(zhǎng)度為 20
# 畫第五棵櫻花樹(shù)
t.up() # 抬起畫筆
t.goto(300, -300) # 定位畫筆位置
t.setheading(90) # 設(shè)置畫筆朝向
t.color('sienna') # 設(shè)置畫筆顏色為赭(zhě)色
t.down() # 落下畫筆
Tree(20, t) # 枝干長(zhǎng)度為 20
# 繪制文本
t.up() # 抬起畫筆
t.goto(0, -300) # 定位文本位置
t.color('white') # 設(shè)置文本顏色為白色
t.write("愿我們向上生長(zhǎng),如花一般燦爛!!!", align="center", font=("華文楷體", 30, "bold")) # 繪制文本
w.exitonclick() # 點(diǎn)擊畫布可退出程序
三、代碼解釋
第 1 行引入 turtle 庫(kù)并起一個(gè)別名 T。
第 2 行引入 random 庫(kù)。
第 3 行引入 time 庫(kù)。
第 5~17 行定義函數(shù) Tree(branch, t),接受兩個(gè)參數(shù):branch 是櫻花樹(shù)的軀干長(zhǎng)度,t 是畫筆對(duì)象。函數(shù)中使用遞歸繪制櫻花樹(shù)的枝干和花朵,其中 time.sleep(0.0005) 使程序暫停 0.0005 秒,以便視覺(jué)效果;if 和 elif 語(yǔ)句用于設(shè)置不同長(zhǎng)度的櫻花枝干的顏色、粗細(xì)和隨機(jī)生長(zhǎng)方向;最后使用 up() 和 down() 方法控制畫筆的行進(jìn)方向,使得櫻花樹(shù)畫完后畫筆回到原點(diǎn)。
第 20 行初始化畫筆 t。
第 22 行初始化畫布 w,并設(shè)置畫筆的行進(jìn)速度和動(dòng)畫開(kāi)關(guān)狀態(tài)。
第 23 行使用 bgpic() 方法設(shè)置背景圖片作為畫布的背景。
第 24~28 行左轉(zhuǎn) 90 度、將畫筆提起并向后移動(dòng) 150、放下畫筆、設(shè)置畫筆顏色,分別控制第一棵櫻花樹(shù)的繪制。
第 29~32 行使用 up() 和 down() 方法、setheading() 方法和顏色設(shè)置,控制第二棵櫻花樹(shù)的繪制。
第 33~36 行使用 up() 和 down() 方法、setheading() 方法和顏色設(shè)置,控制第三棵櫻花樹(shù)的繪制。
第 37~41 行使用 up() 和 down() 方法、setheading() 方法和顏色設(shè)置,控制第四棵櫻花樹(shù)的繪制。
第 42~44 行使用 up() 和 down() 方法、setheading() 方法和顏色設(shè)置,控制第五棵櫻花樹(shù)的繪制。
最后三行使用 up() 和 goto() 方法定位文本位置,使用 write() 方法繪制文本,使用 exitonclick() 方法使得點(diǎn)擊畫布可以退出程序。
?四、優(yōu)化代碼
import turtle as T
import random
import time
# 畫櫻花的軀干(60,t)
def Tree(branch, t):
time.sleep(0.0005)
if branch > 3:
if 8 <= branch <= 12:
if random.randint(0, 2) == 0:
t.color('snow') # 白
else:
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 3)
elif branch < 8:
if random.randint(0, 1) == 0:
t.color('snow')
else:
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 2)
else:
t.color('sienna') # 赭(zhě)色
t.pensize(branch / 10) # 6
t.forward(branch)
a = 1.5 * random.random()
t.right(20 * a)
b = 1.5 * random.random()
Tree(branch - 10 * b, t)
t.left(40 * a)
Tree(branch - 10 * b, t)
t.right(20 * a)
t.up()
t.backward(branch)
t.down()
# 繪圖區(qū)域
t = T.Turtle()
# 畫布大小
w = T.Screen()
t.hideturtle() # 隱藏畫筆
t.getscreen().tracer(5, 0)
w.bgpic('6a89450a1da14f33a44582542240f48b(1).png')
t.left(90)
t.up()
t.backward(150)
t.down()
t.color('sienna')
# 定義繪制櫻花樹(shù)的函數(shù)
def draw_tree(x, height, t):
t.up()
t.goto(x, -300)
t.setheading(90)
t.color('sienna')
t.down()
Tree(height, t)
# 繪制五棵櫻花樹(shù)
draw_tree(-400, 65, t)
draw_tree(-250, 50, t)
draw_tree(-10, 30, t)
draw_tree(-50, 40, t)
draw_tree(0, 45, t)
draw_tree(100, 40, t)
draw_tree(200, 30, t)
draw_tree(300, 38, t)
draw_tree(400, 30, t)
draw_tree(500, 38, t)
draw_tree(600, 45, t)
# 繪制文本
t.up()
t.goto(0, -300)
t.color('white')
t.write("愿我們向上生長(zhǎng),如花一般燦爛!!!", align="center", font=("華文楷體", 30, "bold"))
w.exitonclick()
第二版代碼在第一版的基礎(chǔ)上做了以下修改:
- 將繪制櫻花樹(shù)的代碼抽象成一個(gè)函數(shù),減少了代碼的重復(fù)性,提高了代碼的復(fù)用性。
- 增加了更多的櫻花樹(shù),讓場(chǎng)景更加豐富。
- 定義了更加清晰的函數(shù)參數(shù),增強(qiáng)了代碼的可讀性。
- 刪除了一些冗余的代碼,使得代碼更加簡(jiǎn)潔明了。
五、Python turtle模塊介紹
Python turtle模塊是一個(gè)圖形化編程工具,可以在屏幕上繪制各種圖形。使用turtle模塊可以方便快捷地實(shí)現(xiàn)基礎(chǔ)的圖形繪制和動(dòng)畫效果,非常適合用于教育、藝術(shù)設(shè)計(jì)等領(lǐng)域的開(kāi)發(fā)和學(xué)習(xí)。
在turtle模塊中,通過(guò)創(chuàng)建一個(gè)代表“畫筆”的turtle對(duì)象,并使用該對(duì)象的各種方法來(lái)控制移動(dòng)、旋轉(zhuǎn)、繪制等行為,最終實(shí)現(xiàn)所需的圖形效果。同時(shí),turtle模塊還提供了許多有用的功能,如顏色和線條粗細(xì)設(shè)置、圖案填充、文本輸出等等。
除了直接使用Python的turtle模塊外,還可以使用一些基于turtle模塊封裝的第三方庫(kù),如pygal、turtle-graph、turtleplot等。這些庫(kù)提供了更加豐富的功能和更加易于使用的接口,可以方便地實(shí)現(xiàn)各種復(fù)雜圖形的繪制和動(dòng)畫效果。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-499875.html
六、Python turtle模塊使用方法
-
創(chuàng)建畫布和畫筆對(duì)象
import turtle
# 創(chuàng)建屏幕和畫筆對(duì)象
screen = turtle.Screen()
t = turtle.Turtle()
-
控制畫筆移動(dòng)和旋轉(zhuǎn)
# 向前移動(dòng)10個(gè)像素單位
t.forward(10)
# 向后移動(dòng)10個(gè)像素單位
t.backward(10)
# 向左旋轉(zhuǎn)90度
t.left(90)
# 向右旋轉(zhuǎn)90度
t.right(90)
-
控制畫筆外觀
# 設(shè)置畫筆顏色為紅色
t.color("red")
# 設(shè)置畫筆粗細(xì)為5個(gè)像素單位
t.pensize(5)
# 設(shè)置畫筆填充顏色為藍(lán)色
t.fillcolor("blue")
-
繪制基本圖形
# 在屏幕上繪制一個(gè)正方形
for i in range(4):
t.forward(100)
t.left(90)
# 在屏幕上繪制一個(gè)圓形
t.circle(50)
-
控制畫布參數(shù)
# 設(shè)置畫布的背景顏色為白色
screen.bgcolor("white")
# 設(shè)置畫布的大小為800x600像素單位
screen.setup(800, 600)
# 隱藏畫筆
t.hideturtle()
本篇文章介紹了一種使用Python繪制櫻花樹(shù)的方法,主要使用了turtle模塊。文章詳細(xì)講述了代碼的實(shí)現(xiàn)過(guò)程,并提供了第二版代碼和代碼解釋,以及Python turtle模塊的介紹和使用方法。其中包括創(chuàng)建畫布和畫筆對(duì)象、控制畫筆移動(dòng)和旋轉(zhuǎn)、控制畫筆外觀以及繪制基本圖形等操作。同時(shí),還介紹了一些控制畫布參數(shù)的方法,如設(shè)置背景圖片、隱藏畫筆等。通過(guò)這篇文章,讀者可以了解到如何使用turtle模塊實(shí)現(xiàn)繪圖,并能夠嘗試自己繪制出各種有趣的圖形。?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-499875.html
到了這里,關(guān)于python綜合實(shí)踐-利用Python turtle模塊畫櫻花叢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!