??方塊圣誕樹
??效果截圖
??代碼-可直接運(yùn)行
import turtle
screen = turtle.Screen()
screen.setup(375, 700)
circle = turtle.Turtle()
circle.shape('circle')
circle.color('red')
circle.speed('fastest')
circle.up()
square = turtle.Turtle()
square.shape('square')
square.color('green')
square.speed('fastest')
square.up()
circle.goto(0, 280)
circle.stamp()
k = 0
for i in range(1, 13):
y = 30 * i
for j in range(i - k):
x = 30 * j
square.goto(x, -y + 280)
square.stamp()
square.goto(-x, -y + 280)
square.stamp()
if i % 4 == 0:
x = 30 * (j + 1)
circle.color('red')
circle.goto(-x, -y + 280)
circle.stamp()
circle.goto(x, -y + 280)
circle.stamp()
k += 3
if i % 4 == 3:
x = 30 * (j + 1)
circle.color('yellow')
circle.goto(-x, -y + 280)
circle.stamp()
circle.goto(x, -y + 280)
circle.stamp()
square.color('brown')
for i in range(13, 17):
y = 30 * i
for j in range(2):
x = 30 * j
square.goto(x, -y + 280)
square.stamp()
square.goto(-x, -y + 280)
square.stamp()
??代碼解析
這段代碼是使用turtle庫(kù)創(chuàng)建一個(gè)圖形界面,繪制了一組彩色的正方形和圓形,最終呈現(xiàn)出一幅圖案。以下是對(duì)代碼的解析:
-
屏幕=。屏幕()
:創(chuàng)建了一個(gè)Turtle屏幕對(duì)象。 -
screen.setup(375, 700)
:設(shè)置屏幕大小為375x700像素。 -
圓圈=。()
:創(chuàng)建了一個(gè)Turtle對(duì)象,命名為circle。 -
circle.shape('圓')
:設(shè)置circle的形狀為圓。 -
circle.color('紅色')
:設(shè)置circle的顏色為紅色。 -
circle.speed('最快')
:設(shè)置circle移動(dòng)的速度為最快。 -
circle.up()
:抬起circle的筆,使其在移動(dòng)時(shí)不繪制軌跡。 -
正方形=。()
:創(chuàng)建了一個(gè)Turtle對(duì)象,命名為square。 -
square.shape('正方形')
:設(shè)置square的形狀為正方形。 -
square.color('綠色')
:設(shè)置square的顏色為綠色。 -
square.speed('最快')
:設(shè)置square移動(dòng)的速度為最快。 -
square.up()
:抬起square的筆。 -
circle.goto(0, 280)
:將circle移動(dòng)到坐標(biāo)(0, 280)的位置。 -
circle.stamp()
:在當(dāng)前位置蓋章,留下一個(gè)印記。 -
k = 0
:初始化變量k為0。 -
for i in range(1, 13):
:循環(huán)變量i在范圍1到12(不包括12)內(nèi)。
-
y = 30 * i
:計(jì)算y坐標(biāo)。 -
for j in range(i - k):
:循環(huán)變量j在范圍(i - k)內(nèi)。-
x = 30 * j
:計(jì)算x坐標(biāo)。 -
square.goto(x, -y + 280)
:將square移動(dòng)到計(jì)算得到的坐標(biāo)。 -
square.stamp()
:在當(dāng)前位置蓋章。 -
square.goto(-x, -y + 280)
:將square移動(dòng)到對(duì)稱的坐標(biāo)。 -
square.stamp()
:在當(dāng)前位置蓋章。
-
-
if i % 4 == 0:
:如果i除以4的余數(shù)為0。-
x = 30 * (j + 1)
:計(jì)算x坐標(biāo)。 -
circle.color('紅色')
:設(shè)置circle的顏色為紅色。 -
circle.goto(-x, -y + 280)
:將circle移動(dòng)到計(jì)算得到的坐標(biāo)。 -
circle.stamp()
:在當(dāng)前位置蓋章。 -
circle.goto(x, -y + 280)
:將circle移動(dòng)到對(duì)稱的坐標(biāo)。 -
circle.stamp()
:在當(dāng)前位置蓋章。 -
k += 3
:增加k的值。
-
-
elif i % 4 == 3:
:如果i除以4的余數(shù)為3。-
x = 30 * (j + 1)
:計(jì)算x坐標(biāo)。 -
circle.color('黃色')
:設(shè)置circle的顏色為黃色。 -
circle.goto(-x, -y + 280)
:將circle移動(dòng)到計(jì)算得到的坐標(biāo)。 -
circle.stamp()
:在當(dāng)前位置蓋章。 -
circle.goto(x, -y + 280)
:將circle移動(dòng)到對(duì)稱的坐標(biāo)。 -
circle.stamp()
:在當(dāng)前位置蓋章。
-
-
square.color('棕色')
:設(shè)置square的顏色為棕色。
-
for i in range(13, 17):
:循環(huán)變量i在范圍13到16(不包括16)內(nèi)。
-
y = 30 * i
:計(jì)算y坐標(biāo)。 -
for j in range(2):
:循環(huán)變量j在范圍(2)內(nèi)。-
x = 30 * j
:計(jì)算x坐標(biāo)。 -
square.goto(x, -y + 280)
:將square移動(dòng)到計(jì)算得到的坐標(biāo)。 -
square.stamp()
:在當(dāng)前位置蓋章。 -
square.goto(-x, -y + 280)
:將square移動(dòng)到對(duì)稱的坐標(biāo)。 -
square.stamp()
:在當(dāng)前位置蓋章。
-
??線條圣誕樹
??效果截圖
??代碼-可直接運(yùn)行
import turtle
# 定義圣誕樹的綠葉函數(shù)
def tree(d, s):
if d <= 0:
return
turtle.forward(s)
tree(d - 1, s * .8)
turtle.right(120)
tree(d - 3, s * .5)
turtle.right(120)
tree(d - 3, s * .5)
turtle.right(120)
turtle.backward(s)
n = 100
""" 設(shè)置繪圖速度
'fastest' : 0
'fast' : 10
'normal' : 6
'slow' : 3
'slowest' : 1
"""
turtle.speed('fastest') # 設(shè)置速度
turtle.left(90)
turtle.forward(3 * n)
turtle.color("orange", "yellow")
turtle.left(126)
# turtle.begin_fill()
for i in range(5):
turtle.forward(n / 5)
turtle.right(144)
turtle.forward(n / 5)
turtle.left(72)
turtle.end_fill()
turtle.right(126)
turtle.color("dark green")
turtle.backward(n * 4.8)
# 執(zhí)行函數(shù)
tree(15, n)
turtle.backward(n / 5)
??代碼解析
這段代碼使用turtle庫(kù)繪制了一個(gè)簡(jiǎn)單的圣誕樹。以下是對(duì)代碼的解析:
-
import turtle
:導(dǎo)入turtle庫(kù),用于圖形繪制。 -
def tree(d, s):
:定義了一個(gè)名為tree的遞歸函數(shù),用來繪制圣誕樹的綠葉。-
d
:表示遞歸深度,即樹的層數(shù)。 -
s
:表示當(dāng)前繪制的分支長(zhǎng)度。
-
-
if d <= 0:
:如果遞歸深度小于等于0,則返回,結(jié)束遞歸。 -
turtle.forward(s)
:向當(dāng)前方向移動(dòng)長(zhǎng)度為s的距離。 -
tree(d - 1, s * .8)
:遞歸調(diào)用tree函數(shù),減小深度d,縮小分支長(zhǎng)度為當(dāng)前的0.8倍。 -
turtle.right(120)
:向右旋轉(zhuǎn)120度。 -
tree(d - 3, s * .5)
:再次遞歸調(diào)用tree函數(shù),減小深度d,縮小分支長(zhǎng)度為當(dāng)前的0.5倍。 -
重復(fù)第6和第7步兩次,以繪制出三個(gè)分支。
-
turtle.backward(s)
:向相反的方向移動(dòng)長(zhǎng)度為s的距離,回到起始點(diǎn)。 -
n = 100
:定義變量n,表示分支的初始長(zhǎng)度。 -
turtle.speed('fastest')
:設(shè)置turtle繪圖速度為最快。 -
turtle.left(90)
:將turtle當(dāng)前方向左旋轉(zhuǎn)90度,為繪制樹的準(zhǔn)備。 -
turtle.forward(3 * n)
:向前移動(dòng)3倍的分支長(zhǎng)度,用于確定樹的高度。 -
turtle.color("orange", "yellow")
:設(shè)置turtle畫筆顏色為橙色,填充顏色為黃色。 -
turtle.left(126)
:向左旋轉(zhuǎn)126度,為繪制星星的準(zhǔn)備。 -
用for循環(huán)繪制五角星:
-
turtle.forward(n / 5)
:向前移動(dòng)五分之一的分支長(zhǎng)度。 -
turtle.right(144)
:向右旋轉(zhuǎn)144度,繪制五角星的一個(gè)角。 - 重復(fù)上述兩步三次,繪制五個(gè)角。
-
turtle.left(72)
:向左旋轉(zhuǎn)72度,準(zhǔn)備繪制下一個(gè)五角星。
-
-
turtle.right(126)
:向右旋轉(zhuǎn)126度,為繪制樹干的準(zhǔn)備。 -
turtle.color("dark green")
:設(shè)置turtle畫筆顏色為深綠色。 -
turtle.backward(n * 4.8)
:向相反的方向移動(dòng)4.8倍的分支長(zhǎng)度,回到樹干的位置。 -
tree(15, n)
:調(diào)用tree函數(shù),開始繪制圣誕樹的綠葉,傳入遞歸深度15和分支長(zhǎng)度n。 -
turtle.backward(n / 5)
:向相反的方向移動(dòng)五分之一的分支長(zhǎng)度,為繪制完整樹形狀。
整體上,這段代碼通過遞歸函數(shù)和turtle庫(kù)繪制了一個(gè)簡(jiǎn)單的圣誕樹,包括五角星和樹干。
??豪華圣誕樹
??效果截圖
??代碼-可直接運(yùn)行
import turtle as t #as就是取個(gè)別名,后續(xù)調(diào)用的t都是turtle
from turtle import *
import random as r
import time
n = 100.0
speed("fastest") #定義速度
screensize(bg='black') #定義背景顏色,可以自己換顏色
left(90)
forward(3*n)
color("orange", "yellow")#定義最上端星星的顏色,外圈是orange,內(nèi)部是yellow
begin_fill()
left(126)
for i in range(5): #畫五角星
forward(n/5)
right(144) #五角星的角度
forward(n/5)
left(72) #繼續(xù)換角度
end_fill()
right(126)
def drawlight():#定義畫彩燈的方法
if r.randint(0, 30) == 0:#如果覺得彩燈太多,可以把取值范圍加大一些,對(duì)應(yīng)的燈就會(huì)少一些
color('tomato')#定義第一種顏色
circle(6)#定義彩燈大小
elif r.randint(0,30) == 1:
color('orange')#定義第二種顏色
circle(3)#定義彩燈大小
else:
color('dark green')#其余的隨機(jī)數(shù)情況下畫空的樹枝
color("dark green")#定義樹枝的顏色
backward(n*4.8)
def tree(d, s):#開始畫樹
if d <= 0: return
forward(s)
tree(d-1, s*.8)
right(120)
tree(d-3, s*.5)
drawlight()#同時(shí)調(diào)用小彩燈的方法
right(120)
tree(d-3, s*.5)
right(120)
backward(s)
tree(15, n)
backward(n/2)
for i in range(200):#循環(huán)畫最底端的小裝飾
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)
t.color("dark red","red")#定義字體顏色
t.write("Merry Christmas",align ="center",font=("Comic Sans MS",40,"bold"))#定義文字、位置、字體、大小
def drawsnow():#定義畫雪花的方法
t.ht() #隱藏筆頭,ht=hideturtle
t.pensize(2) #定義筆頭大小
for i in range(200): #畫多少雪花
t.pencolor("white") #定義畫筆顏色為白色,其實(shí)就是雪花為白色
t.pu() #提筆,pu=penup
t.setx(r.randint(-350,350)) #定義x坐標(biāo),隨機(jī)從-350到350之間選擇
t.sety(r.randint(-100,350)) #定義y坐標(biāo),注意雪花一般在地上不會(huì)落下,所以不會(huì)從太小的縱座軸開始
t.pd() #落筆,pd=pendown
dens = 6 #雪花瓣數(shù)設(shè)為6
snowsize = r.randint(1,10) #定義雪花大小
for j in range(dens): #就是6,那就是畫5次,也就是一個(gè)雪花五角星
#t.forward(int(snowsize)) #int()取整數(shù)
t.fd(int(snowsize))
t.backward(int(snowsize))
#t.bd(int(snowsize)) #注意沒有bd=backward,但有fd=forward,小bug
t.right(int(360/dens)) #轉(zhuǎn)動(dòng)角度
drawsnow()#調(diào)用畫雪花的方法
t.done() # 完成,否則會(huì)直接關(guān)閉
??代碼解析
這段代碼使用turtle庫(kù)繪制了一個(gè)具有彩燈和雪花效果的圣誕樹場(chǎng)景。以下是對(duì)代碼的解析:
-
import turtle as t
:導(dǎo)入turtle庫(kù)并使用別名t。 -
from turtle import *
:從turtle庫(kù)中導(dǎo)入所有的符號(hào)(symbol)。 -
import random as r
:導(dǎo)入random庫(kù)并使用別名r。 -
n = 100.0
:定義變量n,表示分支的初始長(zhǎng)度。 -
speed("fastest")
:設(shè)置turtle繪圖速度為最快。 -
screensize(bg='black')
:定義畫布背景顏色為黑色。 -
left(90)
:將turtle當(dāng)前方向左旋轉(zhuǎn)90度,為繪制樹的準(zhǔn)備。 -
forward(3 * n)
:向前移動(dòng)3倍的分支長(zhǎng)度,用于確定樹的高度。 -
color("orange", "yellow")
:設(shè)置畫筆顏色為橙色,填充顏色為黃色。 -
begin_fill()
:開始填充顏色。 -
left(126)
:向左旋轉(zhuǎn)126度,為繪制星星的準(zhǔn)備。 -
用for循環(huán)繪制五角星:
-
forward(n/5)
:向前移動(dòng)五分之一的分支長(zhǎng)度。 -
right(144)
:向右旋轉(zhuǎn)144度,繪制五角星的一個(gè)角。 -
forward(n/5)
:繼續(xù)向前移動(dòng)五分之一的分支長(zhǎng)度。 -
left(72)
:向左旋轉(zhuǎn)72度,準(zhǔn)備繪制下一個(gè)五角星。
-
-
end_fill()
:結(jié)束填充顏色。 -
right(126)
:向右旋轉(zhuǎn)126度,為繪制樹干的準(zhǔn)備。 -
def drawlight():
:定義畫彩燈的方法。- 如果隨機(jī)數(shù)在范圍[0, 30]中,設(shè)置彩燈顏色為’tomato’,并畫一個(gè)半徑為6的圓。
- 如果隨機(jī)數(shù)在范圍[0, 30]中,設(shè)置彩燈顏色為’orange’,并畫一個(gè)半徑為3的圓。
- 否則,設(shè)置顏色為’dark green’,表示畫空的樹枝。
-
color("dark green")
:定義樹枝的顏色為深綠色。 -
backward(n*4.8)
:向相反的方向移動(dòng)4.8倍的分支長(zhǎng)度,回到樹干的位置。 -
def tree(d, s):
:定義畫樹的遞歸方法。- 如果遞歸深度小于等于0,則返回。
- 向前移動(dòng)分支長(zhǎng)度。
- 遞歸調(diào)用tree函數(shù),減小深度d,縮小分支長(zhǎng)度為當(dāng)前的0.8倍。
- 右轉(zhuǎn)120度。
- 遞歸調(diào)用tree函數(shù),減小深度d-3,縮小分支長(zhǎng)度為當(dāng)前的0.5倍。
- 調(diào)用drawlight方法,畫彩燈。
- 右轉(zhuǎn)120度。
- 遞歸調(diào)用tree函數(shù),減小深度d-3,縮小分支長(zhǎng)度為當(dāng)前的0.5倍。
- 右轉(zhuǎn)120度。
- 向后移動(dòng)分支長(zhǎng)度。
-
tree(15, n)
:調(diào)用tree函數(shù),開始繪制圣誕樹的綠葉,傳入遞歸深度15和分支長(zhǎng)度n。 -
backward(n/2)
:向相反的方向移動(dòng)五分之一的分支長(zhǎng)度,為繪制完整樹形狀。 -
for i in range(200):
:循環(huán)200次,畫最底端的小裝飾。- 隨機(jī)生成a和b,分別用于控制小裝飾的位置。
- 將畫筆提起,移動(dòng)到新的位置。
- 如果隨機(jī)數(shù)為0,設(shè)置顏色為’tomato’;否則,設(shè)置顏色為’wheat’。
- 畫一個(gè)半徑為2的圓。
- 移動(dòng)回原位置。
-
t.color("dark red","red")
:定義字體顏色為深紅色,填充顏色為紅色。 -
t.write("Merry Christmas",align ="center",font=("Comic Sans MS",40,"bold"))
:在中心位置寫上"Merry Christmas"。 -
def drawsnow():
:定義畫雪花的方法。-
t.ht()
:隱藏畫筆。 -
t.pensize(2)
:設(shè)置畫筆大小。 - 循環(huán)畫200個(gè)雪花:
- 設(shè)置雪花的位置。
- 設(shè)置雪花的顏色為白色。
- 提起畫筆,移動(dòng)到新的位置。
- 畫雪花,使用六個(gè)線段模擬五角星的形狀。
-
drawsnow()
:調(diào)用drawsnow方法。
-
-
t.done()
:完成繪圖。文章來源:http://www.zghlxwxcb.cn/news/detail-770816.html
??圣誕節(jié)快樂!
愿你的圣誕充滿溫馨和歡笑,家人團(tuán)聚,友誼長(zhǎng)存。在這個(gè)特別的時(shí)刻,愿你感受到愛的溫暖,希望的明亮。愿你的心充滿喜悅,新的一年里,幸福、健康、平安與你同行。圣誕快樂!文章來源地址http://www.zghlxwxcb.cn/news/detail-770816.html
到了這里,關(guān)于Python生成高級(jí)圣誕樹-代碼案例剖析【第16篇—python圣誕節(jié)系列】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!