效果如下,核心是遞迴思想
其實**很短,關鍵是理解koch函式的else部分出現的遞迴
要看懂**,你還需要理解turtle庫的函式,如果不理解,可以參考這篇文章
# 雪花
import turtle as a
def koch(size, n):
# 只有當階數是0時,往走一段
if (n == 0):
a.fd(size)
else:
# 將一條線分成四段,這裡設定每段之間需要的轉向
for angle in [0, 60, -120, 60]:
a.right(angle)
# 轉向之後進入了下一階的段,遞迴,這裡一定到想清楚!
koch(size / 3, n - 1)
if __name__ == '__main__':
a.setup(650, 300, 200, 200)
# 將畫筆左移一點
a.penup()
a.goto(-100, 0)
a.pendown()
# 設定畫雪花的階數,階數越多,雪花細節越豐富,但畫得也越慢
level = 2
size = 100
a.hideturtle() # 隱藏畫筆
# 每次畫雪花的1/3,左轉120
for i in range(3):
koch(size, level)
a.left(120)
a.done()
調整每條線的偏轉角度和總的偏轉角度,可以獲得不同的圖形,是不是很有趣!
演算法競賽入門經典 四分樹
include includeconst int len 32 const int maxn 1024 10 char s maxn int buf len len cnt 把字串s p 匯出到 以 r,c 為左上角,邊長為w的快取區里 r,c預設為0,0 w預設為32 void draw cons...
Mycat快速入門 四 分片規則
在資料切分處理中,特別是水平切分中,中介軟體最終要的兩個處理過程就是資料的切分 資料的聚合。選擇 合適的切分規則,至關重要,因為它決定了後續資料聚合的難易程度,甚至可以避免跨庫的資料聚合處理。可以通過全域性表,er分片表,資料冗餘來盡量來避免跨庫多表連線join。所謂全域性表就是該錶在每個分片上都會...
GIt入門學習 四 分支操作
檢視分支 git branch 新建分支 git branch 空格 分支名 切換分支 切換到已有分支 git checkout 空格 分支名若不存在該分支,切換並建立分支 git checkout b 空格 分支名 合併分支到主分支master 首先切換到主分支 git checkout mast...