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

前言

粉色系最愛!Python櫻花樹等你獲取~
哈嘍小伙伴們好久不見啦,最近櫻花開得好美吖,博主想和大家一起分享春天的快樂,一起來看看博主畫的櫻花樹吧!

一、Turtle基礎(chǔ)

老生常談啦,在用python畫櫻花樹前,我們先來了解一下turtle吧!

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

 

1.1 Turtle畫板

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

 

turtle.screensize(width,height,bg)

 

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

 

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

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

 

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

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

 

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

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

 

1.5 Turtle寫字

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

 

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

 

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

 

二、Python櫻花樹
 

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

 

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

 

2.1 櫻花類

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

 

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 櫻花樹

櫻花畫好后,我們就可以遞歸畫樹啦

 

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ù)

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

 

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 程序分析

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

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

 

import turtle as tu
import random as ra

 

在代碼中使用了turtle庫進(jìn)行繪圖,以及random庫隨機(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ù)用于畫出一個花朵。首先,將turtle隱藏、設(shè)置筆尺寸和顏色。然后用隨機(jī)數(shù)生成花朵的大小,并循環(huán)繪制5個花瓣。

 

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

 

4、設(shè)置畫布
 

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

 

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

 

5、繪制樹和花朵

 

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ù)來繪制一棵12級的樹,以及其中的花朵。之后,繪制99個隨機(jī)位置和大小的花朵。

 

6、完成繪圖

 

tu.done()

 

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

 

2.5 櫻花林

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

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

 Python實現(xiàn)櫻花樹代碼  圖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)
    ……

 

尾聲

 

小伙伴們咱們下期見喔!

 

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