如何消除python中的infinte循环

如何消除python中的infinte循环,python,infinite-loop,turtle-graphics,Python,Infinite Loop,Turtle Graphics,我正在努力学习python,到目前为止它进展顺利。然而,在代码运行一段时间后,我不断得到一个无限循环错误。下面给出的代码是一个有7个角的恒星的代码 import turtle n = 7 def drawStar(t, sz, s): """Get turtle t to draw a star of sz sides, s size""" for i in range(sz): t.right(180) t.forward(

我正在努力学习python,到目前为止它进展顺利。然而,在代码运行一段时间后,我不断得到一个无限循环错误。下面给出的代码是一个有7个角的恒星的代码

import turtle
n = 7
def drawStar(t, sz, s):


    """Get turtle t to draw a star of sz sides, s size"""

    for i in range(sz):

        t.right(180)       
        t.forward(s)
        t.right(180/n)


wn = turtle.Screen()
wn.bgcolor("lightgreen")

alex = turtle.Turtle()
alex.color("hotpink")

#
n = 7
for i in range(15):
    alex.up()    
    alex.forward(30)
    alex.right(144)
    alex.down() 
    print(n) 

    drawStar(alex,n,30)


wn.exitonclick()

人们指出,使用
range(15)
而不是
range(5)
会将星星重绘三次,使程序耗时更长。(足以使您误认为它是一个无限循环。)

还有其他方法可以提高程序的性能。最简单的绷带是添加alex.speed(“最快”),这将使乌龟快速通过绘图并更快结束

但是,如果我们改为使用alex.speed(“最慢”),我们将看到该程序的另一个问题:海龟花了太多时间在一个方向上转弯,而在另一个方向上转弯。有时它会绕着一个圆圈转很长的一段路,而不是很短的一段路。因此,让我们重新编写代码来解决这个问题:

from turtle import Turtle, Screen

N = 7

def drawStar(turtle, sides, size):

    """ Get turtle turtle to draw a star of sides sides of size size """

    turtle.right(18)

    for _ in range(sides - 1):
        turtle.forward(size)
        turtle.right(6 * 180 / sides)

    turtle.forward(size)

screen = Screen()
screen.bgcolor("lightgreen")

alex = Turtle()
# alex.speed("fastest")
alex.color("hotpink")

for i in range(5):
    alex.up()    
    alex.forward(30)
    alex.down() 

    drawStar(alex, N, 30)

    alex.left(8)

alex.hideturtle()

screen.exitonclick()
在正常速度下,只有5次迭代而不是15次,这种优化的转弯次数减少了绘制星星所需时间的1/3!但却产生了同样的结果:


始终对完整的错误消息提出疑问-我们无法在您的脑海中阅读,也不希望我们运行代码来查看此错误消息。此代码对我来说没有错误。它画15颗星(
范围(15)
)并停止。我认为这部分代码没有问题。也许你们在不同的代码中有问题。这不是一个无限循环。对我来说,这也不是一个无限循环。代码绘制了五颗7角星,然后在前面的星星上再次绘制它们,然后再次绘制它们。然后程序等待鼠标单击。观看星星被重画需要时间,看起来像一个无限循环,但它不是一个。将范围(15)更改为范围(5)以获得更好的结果。很抱歉没有包含完整的错误消息@furas。非常感谢大家。现在我认为是我的程序造成了这个问题。