介绍

用递归和Turtle库绘制八进制的雪花。以下是递归深度从1~5的八面形雪花:

python画蜗牛号(少儿学编程系列---使用递归画雪花)(1)

除了通过递归深度停止递归,还可以在半径小于特定大小时停止递归。以下八面形雪花是通过将半径递归的阈值设置为10生成的。现在你可以看到所有的八边形都有相同的尺寸

python画蜗牛号(少儿学编程系列---使用递归画雪花)(2)

源代码

import turtle from turtle import * import math import random # 以指定的中心,画八面形 def octagon(x, y, r): # x,y is the center up() goto(x, y) seth(90) fd(r) left(180 - 135 / 2) down() begin_fill() edgeSize = 2 * r * math.sin(math.radians(45 / 2)) for _ in range(8): fd(edgeSize) left(45) end_fill() # 画八面形雪花 def octaflake(x, y, r, n): # 根据递归深度(recursion depths)控制何时退出递归 # if n ==1: # octagon(x, y, r) # return # 根据八面形的半径控制,当半径小于10时,退出递归 if r < 10: octagon(x, y, r) return r2 = r / (1 1 / math.tan(math.radians(45 / 2))) octaflake(x, y, r - 2 * r2, n - 1) direction = 90 for _ in range(8): up() goto(x, y) seth(direction) fd(r - r2) octaflake(xcor(), ycor(), r2, n - 1) direction = 45 def main(): screen = Screen() screen.setup(800, 600) screen.title('cloudcloder出品--画雪花') bgcolor('royal blue') fillcolor('white') pencolor('steel blue') speed(0) screen.tracer(0, 0) octaflake(-200, -200, 70, 1) octaflake(-50, -50, 80, 2) octaflake(-190, 100, 50, 3) octaflake(200, 100, 80, 4) octaflake(-190, 200, 50, 3) octaflake(-190, 0, 50, 3) octaflake(180, -140, 120, 5) screen.update() done() if __name__ == "__main__": hideturtle() up() goto(-260, 270) write("今日头条-cloudcoder出品", align='left', font=('fangsong', 14, 'normal')) showturtle() main()

,