本案例的學習要借助turtle庫,這是乙個畫筆庫。它的座標定義如下:
首先是簡單的利用迴圈繪製多個五角星。
def draw_pentagram(size) :
count = 1
while count <=5:
turtle.forward(size)
turtle.right(144)
count += 1
colors = ['red','green','black','blue','yellow','purple']
size = 50
while size <= 100:
i = size//10 - 5
turtle.color(colors[i])
draw_pentagram(size)
size += 10
turtle.exitonclick()
turtle.exitonclick()是用來結束繪製框的,如果不加這一句將導致崩潰。
我在老師的基礎上,新增了顏色變數,每乙個五角星都是乙個不同的顏色,利用列表實現。
迴圈是每一次你給函式乙個引數,再呼叫函式來實現你的目標;而遞迴則是在其內部完成引數的更新。
def draw_recursive_pentagram(size = 50,maxsize = 100) :
#依舊是繪製乙個五角星的迴圈
count = 1
while count <= 5:
turtle.fd(size)
turtle.rt(144)
count += 1
#繪製完成之後開始自身迭代
size += 10
#迭代結束的條件一定要設定好,不然就是死迴圈
if size <= maxsize :
draw_recursive_pentagram(size,maxsize)
在這裡,我比老師多設定了乙個maxsize引數來控制繪製的五角星的最大邊。
遞迴函式(或者說迭代函式)是在其定義的函式內部自己再次呼叫自己,從而實現引數的更新。
def fractal_tree(branch_length) :
if branch_length >= 5:
# 繪製右側樹枝
turtle.fd(branch_length)
turtle.rt(20)
if branch_length < 20 :
turtle.color('green')
fractal_tree(branch_length - 15)
# 繪製左側樹枝
turtle.lt(40)
if branch_length < 20 :
turtle.color('green')
fractal_tree(branch_length - 15)
# 返回上個節點
if branch_length > 20 :
turtle.color('brown')
turtle.rt(20)
turtle.bk(branch_length)
先來看顏色,我設定的是當枝的長度小於等於15時,我認為它是葉,即將最後一級看作葉(因為步長是15)。然後在返回上級節點時,將顏色變更為棕色,從而實現枝的繪製。
下面就是很燒腦的迭代問題。
我理解的是按照**的順序依次執行。
假設長度初始值為40,由起點(第一級節點)前進40(到達二級節點),右轉20,這時進入迭代函式,長度為25,由二級節點,前進20(到達**節點),右轉20,這時(記為狀態1)再一次進入迭代函式,長度為10,由**節點,前進5(到達四級節點),右轉20,這時(記為狀態2)又一次進入迭代函式,長度為-5,不滿足if條件,退出該迭代。
**繼續,這時是狀態2,即進行fractal_tree(10 - 15)的下一行**,turtle.lt(40),由右轉20的狀態變成左轉20的狀態,,然後下一行fractal_tree(10 - 15)依舊不能執行,再下一行,即返回上個節點的turtle.rt(20),由左轉20的狀態變成正向的狀態,向後後退10,來到**節點。
這個時候fractal_tree(25 - 15)的迭代結束了,繼續狀態1的下一行,turtle.lt(40),由右轉20的狀態變成左轉20的狀態,,然後下一行fractal_tree(25 - 15)開始迭代。由**節點,前進10(到達四級節點),右轉20,這時(記為狀態3)又一次進入迭代函式,長度為-5,不滿足if條件,退出該迭代。返回上個節點的turtle.rt(20),由左轉20的狀態變成正向的狀態,向後後退10,再次回到**節點。
之後迴圈往復,只到最終又回到一級節點。
示意圖如下:
到此對迭代函式的工作原理就理解的差不多了。
下面就是繪製分形樹了。
#先將畫筆的方向調整好
turtle.left(90)
#將中心點位置調整好
turtle.penup()
turtle.bk(100)
turtle.pendown()
#引用函式進行繪圖
完結撒花!✿✿ヽ(゚▽゚)ノ✿
人工智慧學習聯盟免費課程 案例四 52周存錢挑戰
忽然發現可以直接jupyter轉成html然後再轉成pdf儲存到網盤,以後部落格就放棄寫作咯 52周存錢挑戰的目的是,根據你輸入的起始存錢金額,每週遞增金額,和目標週數,計算你在每一周所需要存入的數目,在該周的累計總存入金額等。本案例依舊是對前面使用的迴圈的複習,並且新增了一些新的內容。乙個是有使用...
人工智慧學習聯盟免費課程 案例五 判斷第幾天
通過不同的資料儲存型別來實現同乙個功能,元組 列表 集合和字典。from datetime import datetimedef is leap year year 判斷是否為閏年 is leap false if year 2 0 year 2 0 year 2 0 is leap true re...
人工智慧課程方案
對於企業來說,隨著人工智慧的逐步滲透,企業的經營管理也將面臨著較大的變化和挑戰,也會迎來自身的轉型和發展。鑑於此,我們將在概述人工智慧和企業管理內涵的基礎上,格物斯坦認為 基於人工智慧在現代企業管理中的運用的分析,詳細闡述人工智慧對於現代企業管理的挑戰。現代的人工智慧可以找出對應的模式,然後對物件進...