递归可太难了,理解都费劲

  逐行分析一下科赫雪花

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("输入错误")

  最后就是程序的输入和输出,这边通过一个异常处理模块,屏蔽了一些会发生报错的输入。

上一篇:使用AmplifyJS和JQuery编写更好更优雅的javascript事件处理代码


下一篇:direction:rtl demo