Проблема с вашим предложением else
. rule
уже инвертирован, входя в функцию, поэтому вам нужно трактовать rule
так же, как предложение затем :
else:
t.right(90)
Hilbert_curve(A, not rule, t, n - 1)
t.forward(A)
t.left(90)
Hilbert_curve(A, rule, t, n - 1)
t.forward(A)
Hilbert_curve(A, rule, t, n - 1)
t.left(90)
t.forward(A)
Hilbert_curve(A, not rule, t, n - 1)
t.right(90)
Однако, если мы изменим rule
с логического значения на число, parity
, это либо 1, либо -1, а затем умножим parity
на угол, мы можем исключить одно из двух предложений оригинального if
заявление:
from turtle import Screen, Turtle
def hilbert_curve(turtle, A, parity, n):
if n < 1:
return
turtle.left(parity * 90)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.forward(A)
turtle.right(parity * 90)
hilbert_curve(turtle, A, parity, n - 1)
turtle.forward(A)
hilbert_curve(turtle, A, parity, n - 1)
turtle.right(parity * 90)
turtle.forward(A)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.left(parity * 90)
screen = Screen()
yertle = Turtle()
yertle.speed('fastest') # because I have no patience
hilbert_curve(yertle, 10, 1, 4)
screen.exitonclick()