Python知識(shí)分享網(wǎng) - 專(zhuān)業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
Python實(shí)現(xiàn)櫻花樹(shù)代碼
匿名網(wǎng)友發(fā)布于:2023-07-13 11:48:34
(侵權(quán)舉報(bào))

前言

粉色系最?lèi)?ài)!Python櫻花樹(shù)等你獲取~
哈嘍小伙伴們好久不見(jiàn)啦,最近櫻花開(kāi)得好美吖,博主想和大家一起分享春天的快樂(lè),一起來(lái)看看博主畫(huà)的櫻花樹(shù)吧!

一、Turtle基礎(chǔ)

老生常談啦,在用python畫(huà)櫻花樹(shù)前,我們先來(lái)了解一下turtle吧!

小海龜(Turtle)是Python中畫(huà)圖的一個(gè)重要的包(內(nèi)置包),里面包含豐富的畫(huà)圖工具以及畫(huà)圖的各種功能,當(dāng)你學(xué)會(huì)了用Turtle畫(huà)圖后,你可以畫(huà)任何你想畫(huà)的圖案哦。

 

1.1 Turtle畫(huà)板

Turtle的畫(huà)板大小可以用turtle.screensize()函數(shù)來(lái)設(shè)置

 

turtle.screensize(width,height,bg)

 

設(shè)置畫(huà)板的大小,包含寬和高,width為寬,height為高,bg為畫(huà)布顏色

 

1.2 Turtle畫(huà)筆
Turtle的畫(huà)筆有幾個(gè)常用的函數(shù):

①turtle.penup():抬起畫(huà)筆,此時(shí)移動(dòng)畫(huà)筆不會(huì)在畫(huà)布上留下痕跡哦
②turtle.pendown():放下畫(huà)筆,與turtle.penup相對(duì)應(yīng),放下畫(huà)筆后就可以繼續(xù)畫(huà)畫(huà)了(放下畫(huà)筆后畫(huà)畫(huà)會(huì)在畫(huà)布上留下痕跡)
③turtle.pensize():控制畫(huà)筆的大?。梢愿鶕?jù)需求自行定義畫(huà)筆的大小哦)
④turtle.pencolor():控制畫(huà)筆的顏色(可以自己在網(wǎng)上查閱所有python可以使用的顏色,python里面可以用的顏色有很多的哦)
⑤turtle.hideturtle():隱藏畫(huà)筆(隱藏畫(huà)筆以后畫(huà)圖時(shí)畫(huà)筆就看不到了)

 

1.3 Turtle畫(huà)圖
在畫(huà)圖的過(guò)程中,我們經(jīng)常要使用一些簡(jiǎn)單的移動(dòng)函數(shù):

①turtle.forward(x):將畫(huà)筆向前移動(dòng)x個(gè)像素(x可以理解為距離)
②turtle.backward(x):將畫(huà)筆向后退x個(gè)像素(x可以理解為距離)
③turtle.left(n):將畫(huà)筆向左旋轉(zhuǎn)n度
④turtle.right(n):將畫(huà)筆向右旋轉(zhuǎn)n度
⑤turtle.speed():設(shè)置畫(huà)筆畫(huà)圖的速度(1~10遞增,0最快)

 

1.4 Turtle填色
在畫(huà)好圖后,我們經(jīng)常需要對(duì)其進(jìn)行填色,這里可以用turtle.fillcolor()函數(shù),括號(hào)里寫(xiě)入你想填充的顏色即可。
在使用turtle.fillcolor()函數(shù)要注意其基本格式:
 

turtle.beginfill()     #開(kāi)始填充
turtle.fillcolor()      #輸入填充的顏色
turtle.endfill()        #結(jié)束填充

 

1.5 Turtle寫(xiě)字

在完成整個(gè)畫(huà)圖后,我們可以使用turtle.write()函數(shù)進(jìn)行寫(xiě)字

 

turtle.write(" ",move,align,font)

 

① 第一個(gè)位置雙引號(hào)內(nèi)填入要寫(xiě)的字
② move(可選):在默認(rèn)情況下,move為false。如果move為true,則筆將移動(dòng)到右下角
③ align(可選):可取值是left即左、center即中、right即右之一,是字符串格式
④ font(可選):字體三元組(fontname、fontsize、fonttype),fontname即字體名稱(chēng)(字符串格式,如“宋體”),fontsize即字體大?。琭onttype即字體類(lèi)型如:normal(普通)、bold(粗體)、italic(斜體)

 

二、Python櫻花樹(shù)
 

簡(jiǎn)單的了解turtle小海龜后,我們就可以步入今天的主題啦!

 

 Python實(shí)現(xiàn)櫻花樹(shù)代碼 圖1

 

2.1 櫻花類(lèi)

既然是櫻花樹(shù),那肯定要畫(huà)櫻花啦,在這里我選擇了五片花瓣的櫻花

 

def flower():  
    tu.hideturtle() 
    tu.pensize(2)  
    tu.pencolor("pink")
    flowersize = ra.randint(1,5)  
    for j in range(5):  
        tu.forward(int(flowersize))
        tu.backward(int(flowersize))
        tu.right(72)

 

2.2 櫻花樹(shù)

櫻花畫(huà)好后,我們就可以遞歸畫(huà)樹(shù)啦

 

def tree(n,k):
    tu.pendown()  
    tu.pencolor("black")
    tu.pensize(n/4)
    tu.forward(k)  
    if n>0:
        r=ra.random()*10+10
        l=ra.random()*10+10
        x=k*(ra.random()*0.25+0.7)  
        tu.right(r)
        tree(n-1,x)
        tu.left(l+r)
        tree(n-1, x)
        tu.right(l)
    else:
        tu.right(90)
        flower()
        tu.left(90)
        tu.pu()
        t=tu.heading()
        s=-ra.random()
        tu.setheading(s)
        x=ra.randint(1,5)
        tu.forward(x)
        tu.setheading(t)
        tu.pd()
        tu.right(90)
        flower()
        tu.left(90)
        tu.pu()
        t=tu.heading()
        tu.setheading(s)
        tu.backward(x)
        tu.setheading(t)
    tu.penup()
    tu.backward(k) 

 

2.3 主函數(shù)

最后,我們需要一個(gè)主函數(shù)來(lái)實(shí)現(xiàn)櫻花樹(shù)

 

tu.setup(800,480)
tu.bgcolor("lavenderblush") 
tu.hideturtle()  
tu.tracer(0)
tu.penup()  
tu.goto(0,-150)
tu.pendown()
tu.left(90)  
tree(12,50)
for i in range(99):
    tu.penup()
    tu.goto(ra.randint(-150,150),ra.randint(-150,0))
    tu.pendown()
    flower()

 

2.4 程序分析

讓我們具體分析一下櫻花樹(shù)的代碼吧!

1、導(dǎo)入turtle和random庫(kù)

 

import turtle as tu
import random as ra

 

在代碼中使用了turtle庫(kù)進(jìn)行繪圖,以及random庫(kù)隨機(jī)生成數(shù)值。

 

2、定義flower函數(shù)

 

def flower():  
    tu.hideturtle() 
    tu.pensize(2)  
    tu.pencolor("pink")
    flowersize = ra.randint(1,5)  
    for j in range(5):  
        tu.forward(int(flowersize))
        tu.backward(int(flowersize))
        tu.right(72)

 

flower函數(shù)用于畫(huà)出一個(gè)花朵。首先,將turtle隱藏、設(shè)置筆尺寸和顏色。然后用隨機(jī)數(shù)生成花朵的大小,并循環(huán)繪制5個(gè)花瓣。

 

3、定義tree函數(shù)

 

def tree(n,k):
    tu.pendown()  
    tu.pencolor("black")
    tu.pensize(n/4)
    tu.forward(k)  
    if n>0:
        r=ra.random()*10+10
        l=ra.random()*10+10
        x=k*(ra.random()*0.25+0.7)  
        tu.right(r)
        tree(n-1,x)
        tu.left(l+r)
        tree(n-1, x)
        tu.right(l)
    else:
        tu.right(90)
        flower()
        tu.left(90)
        tu.pu()
        t=tu.heading()
        s=-ra.random()
        tu.setheading(s)
        x=ra.randint(1,5)
        tu.forward(x)
        tu.setheading(t)
        tu.pd()
        tu.right(90)
        flower()
        tu.left(90)
        tu.pu()
        t=tu.heading()
        tu.setheading(s)
        tu.backward(x)
        tu.setheading(t)
    tu.penup()
    tu.backward(k) 

 

tree函數(shù)用于畫(huà)出一棵樹(shù)。參數(shù)n表示樹(shù)干的級(jí)數(shù),k表示樹(shù)干的長(zhǎng)度。在函數(shù)中,先將turtle設(shè)置為下筆狀態(tài)、設(shè)置顏色和筆尺寸,并繪制樹(shù)干。如果n>0,則用隨機(jī)數(shù)生成分支的角度、長(zhǎng)度和隨機(jī)縮放系數(shù),然后右轉(zhuǎn)角度r,遞歸調(diào)用tree函數(shù)繪制右側(cè)分支,左轉(zhuǎn)角度l+r,遞歸調(diào)用tree函數(shù)繪制左側(cè)分支,最后右轉(zhuǎn)角度l還原角度。若n=0,代表樹(shù)干到頂了,需要繪制花瓣。繪制兩個(gè)花朵,之間的距離和之后后退的距離通過(guò)隨機(jī)數(shù)生成。之后將turtle設(shè)置為抬筆狀態(tài),退回樹(shù)干的起始位置,以準(zhǔn)備繪制另一棵樹(shù)。

 

4、設(shè)置畫(huà)布
 

tu.setup(800,480)
tu.bgcolor("lavenderblush") 
tu.hideturtle()  
tu.tracer(0)

 

這段代碼對(duì)畫(huà)布進(jìn)行初始化設(shè)置,包括畫(huà)布的大小、背景顏色,以及turtle的初始狀態(tài)和繪圖速度。

 

5、繪制樹(shù)和花朵

 

tu.penup()  
tu.goto(0,-150)
tu.pendown()
tu.left(90)  
tree(12,50)
for i in range(99):
    tu.penup()
    tu.goto(ra.randint(-150,150),ra.randint(-150,0))
    tu.pendown()
    flower()

 

這段代碼調(diào)用了tree函數(shù)來(lái)繪制一棵12級(jí)的樹(shù),以及其中的花朵。之后,繪制99個(gè)隨機(jī)位置和大小的花朵。

 

6、完成繪圖

 

tu.done()

 

最后用done函數(shù)表示繪圖結(jié)束。

 

2.5 櫻花林

一棵櫻花樹(shù)怎么夠呢,合理運(yùn)用循環(huán)語(yǔ)句,準(zhǔn)備一場(chǎng)櫻花林送給她吧!

 Python實(shí)現(xiàn)櫻花樹(shù)代碼  圖2

 Python實(shí)現(xiàn)櫻花樹(shù)代碼  圖3

 

for i in range(20):
    tu.penup()  
    tu.goto(ra.randint(-300,300),ra.randint(-150,0))
    tu.pendown()
    tu.left(90)  
    tree(8,30)
    tu.setheading(0)
    ……

 

尾聲

 

小伙伴們?cè)蹅兿缕谝?jiàn)喔!

 

轉(zhuǎn)載自:https://blog.csdn.net/m0_68111267/article/details/130350743