В моей системе сбой начинается после итерации 50. Кажется, проблема заключается в разнице между большими целыми числами, которые использует программа, и числами с плавающей точкой, которые использует черепаха. Если мы применяем код:
angle = 0
for i in range(55):
for x in range(i):
turtle.forward(5)
turtle.left(2**x * 90)
angle += 2**x * 90
print(angle % 360, turtle.heading())
Все начинается отлично:
90 90.0
180 180.0
0 0.0
90 90.0
270 270.0
Но со временем неточность с плавающей запятой начинает накапливаться:
270 269.2593644676
270 269.0124859568
0 359.0124859568
180 179.0124859568
180 179.0124859568
И накапливать:
270 258.1498314817
270 254.1997753089
0 344.1997753089
180 164.1997753089
180 164.1997753089
И в конце концов вылетает из-под контроля:
90 42.5993259266
90 26.7991012355
180 116.7991012355
0 296.7991012355
0 296.7991012355
Как отмечает @alexelias, мы можем использовать модуль для решения проблемы, предоставляя черепахе значение, которое накапливает меньше неточности с течением времени:
turtle.speed('fastest')
for i in range(100):
for x in range(i):
turtle.forward(5)
turtle.left((2**x % 4) * 90)
Вместо того, чтобы модулировать все значение на 360, мы знаем, что 360 / 90 == 4
, поэтому мы просто модулируем другое значение на 4.