几次循环后,Turtle无法回到原始点

问题描述

这是代码。我尝试了以下方法

enter image description here

为什么会这样?谁能解释?

import turtle


turtle.penup()
turtle.setposition(0,300)
turtle.pendown()

turtle.pencolor("red")

turtle.speed(10)

for i in range(6,15,2):

    step = int(360 / i)

    turtle.setheading(int(90 - (180 - step)/2))
    

    for j in range(1,1 + i):

        turtle.right(step)

        turtle.forward(10*i)
        
turtle.exitonclick()

这是因为计算中存在浮点数吗?

解决方法

是的,因为360无法很好地被14整除。这是外循环的最后一次迭代。

  • i = 6:step是360/6 => 60
  • i = 8:step是360/8 => 45
  • i = 10:step是360/10 => 36
  • i = 12:step是360/12 => 30
  • i = 14:step是360/14 => 25.714285714

如果您更改代码以不将step的值从浮点数截断为整数,那么它将正常工作:

for i in range(6,15,2):
    step = 360.0 / i
    turtle.setheading(90 - (180 - step)/2)

    for j in range(1,i + 1):
        turtle.right(step)
        turtle.forward(10*i)