彩色谢尔宾斯基三角形_Python递归练习

彩色谢尔宾斯基三角形_Python递归练习

彩色谢尔宾斯基三角形Python递归练习
看到一本Python算法与数据结构的书上有这个练习,我又顺手编了一下这个程序。感觉比书上写的程序还要条理更清晰一些,并且本人写的代码更加通用,而原书上的代码只能在固定的三个点画。
以下是本人代码:

"""
   谢尔宾斯基三角形.py
   主要步骤,画一个大的正三角形,然后每个点画三个更小的正三角形。
   中间这个大三角形不必画,因为会自然形成。
"""
__author__ = '李兴球'
__date__ = '2012/12/9'
__blog__ = 'www.lixingqiu.com

import turtle

def draw_xierbinsiji(length,level):
    if level<1:return
    start = turtle.pos()
    cors = []                          # 保存大三角形三个中点坐标的
    turtle.color(cs[level])            # 根据level选择颜色 
    turtle.pendown()
    turtle.begin_fill()                # 开始填充
    for x in range(3):         
        turtle.fd(length/2)            # 走一半是为了方便记录中点
        cors.append(turtle.position())# 记录海龟到达边的中点时的坐标
        turtle.fd(length/2)
        turtle.left(120)
    turtle.end_fill()                  # 结束填充

    # 接下来是到画三个更小的三角形
    draw_xierbinsiji(length/2,level-1) # 画左下角更小的三角形
    turtle.goto(cors[0])
    draw_xierbinsiji(length/2,level-1) # 画右下角更小的三角形
    turtle.penup()
    turtle.goto(cors[2])               # 到上边中心点
    turtle.pendown()
    draw_xierbinsiji(length/2,level-1) # 画上面的更小的三角形
    turtle.penup()
    turtle.goto(start)                 # 别忘了回到初始点

cs = ['red','orange','yellow','green','cyan',
      'blue','magenta','pink','magenta','black']

turtle.speed(0)
turtle.delay(0)
turtle.colormode(255)
draw_xierbinsiji(200,6)
    

以下是原书代码:

李兴球

李兴球的博客是Python创意编程原创博客