Я не думаю, что вам следует создавать объект черепахи или окна внутри функции. Поскольку 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()
Результат:
![введите здесь описание изображения](https://i.stack.imgur.com/AKz7V.png)
Эти результаты выглядят довольно хорошо для треугольника глубины 1, но что если мы вызовем draw_sierpinski(100,2)
?
![введите здесь описание изображения](https://i.stack.imgur.com/advqh.png)
Ох, не так хорошо. Это происходит потому, что функция должна нарисовать фигуру, а затем вернуть черепаху в исходное начальное положение и угол. Но, как видно из изображения глубины 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()
Результат:
![введите здесь описание изображения](https://i.stack.imgur.com/CTXVM.png)
person
Kevin
schedule
10.09.2014