
看到一本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)

