Ale*_*sed 4 python recursion turtle-graphics
我正在尝试编写一个使用Turtle用python绘制sierpinski树的程序。这是我的主意:
import turtle
def draw_sierpinski(length,depth):
window = turtle.Screen()
t = turtle.Turtle()
if depth==0:
for i in range(0,3):
t.fd(length)
t.left(120)
else:
draw_sierpinski(length/2,depth-1)
t.fd(length/2)
draw_sierpinski(length/2,depth-1)
t.bk(length/2)
t.left(60)
t.fd(length/2)
t.right(60)
draw_sierpinski(length/2,depth-1)
window.exitonclick()
draw_sierpinski(500,1)
Run Code Online (Sandbox Code Playgroud)
该程序没有到达else语句后的第二行,我也不知道为什么。谁能帮我?
我不认为您应该在函数内部创建乌龟或窗口对象。由于draw_sierpinski最初调用深度为1时会被调用四次,因此您将创建带有四个单独的海龟的四个单独的窗口,每个窗口仅绘制一个三角形。相反,我认为您应该只有一个窗户和一只乌龟。
import turtle
def draw_sierpinski(length,depth):
if depth==0:
for i in range(0,3):
t.fd(length)
t.left(120)
else:
draw_sierpinski(length/2,depth-1)
t.fd(length/2)
draw_sierpinski(length/2,depth-1)
t.bk(length/2)
t.left(60)
t.fd(length/2)
t.right(60)
draw_sierpinski(length/2,depth-1)
window = turtle.Screen()
t = turtle.Turtle()
draw_sierpinski(500,1)
window.exitonclick()
Run Code Online (Sandbox Code Playgroud)
结果:

对于深度为1的三角形,这些结果看起来相当不错,但是当我们调用该draw_sierpinski(100,2)怎么办?

哦,不是很好。发生这种情况是因为该函数应绘制形状,然后将乌龟返回到其原始起始位置和角度。但是从深度图1可以明显看出,乌龟不会返回到其初始位置;它结束于左斜坡的一半。您需要一些其他逻辑将其发送回首页。
import turtle
def draw_sierpinski(length,depth):
if depth==0:
for i in range(0,3):
t.fd(length)
t.left(120)
else:
draw_sierpinski(length/2,depth-1)
t.fd(length/2)
draw_sierpinski(length/2,depth-1)
t.bk(length/2)
t.left(60)
t.fd(length/2)
t.right(60)
draw_sierpinski(length/2,depth-1)
t.left(60)
t.bk(length/2)
t.right(60)
window = turtle.Screen()
t = turtle.Turtle()
draw_sierpinski(100,2)
window.exitonclick()
Run Code Online (Sandbox Code Playgroud)
结果:

| 归档时间: |
|
| 查看次数: |
23887 次 |
| 最近记录: |