逐行分析一下科赫雪花
import turtle
def koch(size, n): #定义一个函数,(参数,变量)
if n==0: #条件分支,
turtle.fd(size) #当n=0时,执行画笔向前移动size距离。
else: #n!0时,
for angle in [0,60,-120,60]: #遍历循环,将[]内的元素赋予angle.
turtle.left(angle) #向左旋转画笔方向,角度为angle的值。
koch(size/3,n-1) #调用koch函数,行成递归链条。以size/3的单段
#长度,完成for..in循环,并绘制图像,递归到n-1=0.
上面这一段感觉就是最难理解的部分了,这里不妨认为n=1,此时函数运行else分支,通过一个for循环,将调整画笔的朝向,而每次调整朝向后,将运行一次koch函数,这时koch(size/3,n-1)中,n-1的值为0,将执行n==0 的条件分支,此时画笔将先前移动size/3的距离,共进行4次移动。
def main(a): #定义函数main
turtle.setup(600,600) #画布尺寸
turtle.penup() #抬起笔
turtle.goto(-200, 100) #移动画笔到(-200,100)坐标
turtle.pendown() #落下笔
turtle.pensize(2) #调节画笔尺寸
koch(400,a) #调用函数koch,给size赋值为400,并将阶数a带入到koch函数中;
turtle.right(120) #完成第一段科赫线段绘制后,调整画笔角度,向右旋转120°.
koch(400,a) #再次调用函数koch,绘制第二段科赫线段;
turtle.right(120) #完成第二段科赫线段绘制后,调整画笔角度,向右旋转120°.
koch(400,a) #再次调用函数koch,绘制第三段科赫线段;
turtle.hideturtle() #隐藏海龟显示.
以上就是重复上次koch函数,形成一个三角形闭环。看注释吧,不难理解。
try: #异常处理语句
a = eval(input("请输入科赫曲线的阶: ")) #给a赋值,作为koch函数的初始n值.
main(a) #程序入口,执行函数main.
except: #异常处理语句
print("输入错误")
最后就是程序的输入和输出,这边通过一个异常处理模块,屏蔽了一些会发生报错的输入。