Python使用turtle庫繪制科赫雪花詳細(xì)代碼
實(shí)驗(yàn)題目:
turtle庫的使用
實(shí)驗(yàn)?zāi)康模?/h2>
掌握Python語言程序的基本結(jié)構(gòu)
掌握turtle庫的使用方法
編寫python程序,實(shí)現(xiàn)以下功能:
3.1把繪制科赫雪花的代碼封裝為函數(shù),繪制3朵以上的雪花,雪花出現(xiàn)的位置并不固定,并填充不同的顏色
# 導(dǎo)入turtle模塊
import turtle
# 定義繪制科赫雪花的函數(shù)
def koch_snowflake(size, level):
# 如果繪制的級(jí)數(shù)為0,直接向前走
if level == 0:
turtle.forward(size)
else:
# 否則,按照科赫曲線的規(guī)則,分四段繪制
koch_snowflake(size / 3, level - 1) # 第一段
turtle.left(60) # 左轉(zhuǎn)60度
koch_snowflake(size / 3, level - 1) # 第二段
turtle.right(120) # 右轉(zhuǎn)120度
koch_snowflake(size / 3, level - 1) # 第三段
turtle.left(60) # 左轉(zhuǎn)60度
koch_snowflake(size / 3, level - 1) # 第四段
# 設(shè)置畫筆速度和顏色
turtle.speed(10)
turtle.pencolor("black")
# 隱藏海龜
turtle.hideturtle()
# 提起畫筆,移動(dòng)到左下角
turtle.penup()
turtle.goto(-200, -100)
# 放下畫筆,開始繪制
turtle.pendown()
# 繪制第一朵雪花,填充紫色
turtle.fillcolor("purple")
turtle.begin_fill()
for i in range(3): # 三次循環(huán),繪制三條邊
koch_snowflake(200, 3) # 調(diào)用函數(shù),繪制邊長為200,級(jí)數(shù)為3的科赫曲線
turtle.right(120) # 右轉(zhuǎn)120度,準(zhǔn)備繪制下一條邊
turtle.end_fill()
# 提起畫筆,移動(dòng)到右上角
turtle.penup()
turtle.goto(100, 150)
# 放下畫筆,開始繪制
turtle.pendown()
# 繪制第二朵雪花,填充橙色
turtle.fillcolor("orange")
turtle.begin_fill()
for i in range(3):
koch_snowflake(100, 3) # 調(diào)用函數(shù),繪制邊長為100,級(jí)數(shù)為3的科赫曲線
turtle.right(120)
turtle.end_fill()
# 提起畫筆,移動(dòng)到右下角
turtle.penup()
turtle.goto(200, -50)
# 放下畫筆,開始繪制
turtle.pendown()
# 繪制第三朵雪花,填充米色
turtle.fillcolor("beige")
turtle.begin_fill()
for i in range(3):
koch_snowflake(150, 3) # 調(diào)用函數(shù),繪制邊長為150,級(jí)數(shù)為3的科赫曲線
turtle.right(120)
turtle.end_fill()
# 結(jié)束繪制,保持窗口
turtle.done()
運(yùn)行結(jié)果

3.2分析花千樹的結(jié)構(gòu),設(shè)計(jì)遞歸算法,畫一棵花千樹,如下圖所示,顏色自選
# 導(dǎo)入turtle模塊
import turtle
# 導(dǎo)入random模塊
import random
# 定義一個(gè)繪制樹枝的函數(shù)
def draw_branch(t, length, angle, color):
# 如果長度大于5,繼續(xù)繪制
if length > 5:
# 設(shè)置畫筆顏色
t.color(color)
# 向前移動(dòng)指定長度
t.forward(length)
# 向右轉(zhuǎn)指定角度
t.right(angle)
# 遞歸繪制右邊的樹枝
draw_branch(t, length - random.randint(10, 20), angle - random.randint(10, 20), color)
# 向左轉(zhuǎn)兩倍的角度
t.left(2 * angle)
# 遞歸繪制左邊的樹枝
draw_branch(t, length - random.randint(10, 20), angle - random.randint(10, 20), color)
# 向右轉(zhuǎn)回原來的角度
t.right(angle)
# 后退指定長度
t.backward(length)
# 定義一個(gè)繪制花朵的函數(shù)
def draw_flower(t, x, y, size, color):
# 抬起畫筆
t.penup()
# 移動(dòng)到指定位置
t.goto(x, y)
# 放下畫筆
t.pendown()
# 設(shè)置畫筆顏色
t.color(color)
# 開始填充
t.begin_fill()
# 循環(huán)八次
for i in range(8):
# 向前移動(dòng)指定大小
t.forward(size)
# 向左轉(zhuǎn)45度
t.left(45)
# 結(jié)束填充
t.end_fill()
# 創(chuàng)建一個(gè)turtle對(duì)象
t = turtle.Turtle()
# 設(shè)置畫筆粗細(xì)
t.pensize(3)
# 設(shè)置畫筆速度
t.speed(10)
# 抬起畫筆
t.penup()
# 后退200像素
t.backward(200)
# 放下畫筆
t.pendown()
# 設(shè)置畫筆顏色為棕色
t.color("brown")
# 向左轉(zhuǎn)90度
t.left(90)
# 調(diào)用繪制樹枝的函數(shù),參數(shù)為turtle對(duì)象,長度為100,角度為30,顏色為棕色
draw_branch(t, 100, 30, "brown")
# 抬起畫筆
t.penup()
# 隱藏畫筆
t.hideturtle()
# 獲取屏幕對(duì)象
s = turtle.Screen()
# 獲取屏幕上所有的畫筆對(duì)象
pens = s.turtles()
# 遍歷所有的畫筆對(duì)象
for p in pens:
# 獲取畫筆的位置
x, y = p.pos()
# 獲取畫筆的顏色
color = p.color()[0]
# 如果顏色是棕色,說明是樹枝
if color == "brown":
# 以一定的概率在樹枝上繪制花朵
if random.random() < 0.3:
# 隨機(jī)選擇一個(gè)花朵的顏色
flower_color = random.choice(["pink", "red", "purple", "yellow"])
# 隨機(jī)選擇一個(gè)花朵的大小
flower_size = random.randint(5, 10)
# 調(diào)用繪制花朵的函數(shù),參數(shù)為turtle對(duì)象,位置,大小,顏色
draw_flower(t, x, y, flower_size, flower_color)
# 保持窗口
turtle.done()
運(yùn)行結(jié)果

總結(jié)
到此這篇關(guān)于Python使用turtle庫繪制科赫雪花的文章就介紹到這了,更多相關(guān)Python turtle庫繪制科赫雪花內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python基于whois模塊簡(jiǎn)單識(shí)別網(wǎng)站域名及所有者的方法
這篇文章主要介紹了Python基于whois模塊簡(jiǎn)單識(shí)別網(wǎng)站域名及所有者的方法,簡(jiǎn)單分析了Python whois模塊的安裝及使用相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
python celery分布式任務(wù)隊(duì)列的使用詳解
這篇文章主要介紹了python celery分布式任務(wù)隊(duì)列的使用詳解,Celery 是一個(gè) 基于python開發(fā)的分布式異步消息任務(wù)隊(duì)列,通過它可以輕松的實(shí)現(xiàn)任務(wù)的異步處理, 如果你的業(yè)務(wù)場(chǎng)景中需要用到異步任務(wù),就可以考慮使用celery,需要的朋友可以參考下2019-07-07
利用Python搶回在螞蟻森林逝去的能量(實(shí)現(xiàn)代碼)
螞蟻森林是一項(xiàng)旨在帶動(dòng)公眾低碳減排的公益項(xiàng)目,每個(gè)人的低碳行為在螞蟻森林里可計(jì)為"綠色能量",很多小伙伴都玩過,今天小編給大家分享一篇教程關(guān)于Python搶回在螞蟻森林逝去的能量,感興趣的朋友跟隨小編一起看看吧2022-03-03
Python中time模塊與datetime模塊在使用中的不同之處
這篇文章主要介紹了Python中time模塊與datetime模塊在使用中的不同之處,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11
使用Python將JSON,XML和YAML數(shù)據(jù)寫入Excel文件
JSON、XML和YAML作為主流結(jié)構(gòu)化數(shù)據(jù)格式,因其層次化表達(dá)能力和跨平臺(tái)兼容性,已成為系統(tǒng)間數(shù)據(jù)交換的通用載體,本文將介紹如何使用Python導(dǎo)入JSON、XML和YAML格式數(shù)據(jù)到Excel文件中,需要的可以參考下2025-04-04
Python實(shí)現(xiàn)加密接口測(cè)試方法步驟詳解
這篇文章主要介紹了Python實(shí)現(xiàn)加密接口測(cè)試方法步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06

