如何消除python中的infinte循环
我正在努力学习python,到目前为止它进展顺利。然而,在代码运行一段时间后,我不断得到一个无限循环错误。下面给出的代码是一个有7个角的恒星的代码如何消除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(
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。非常感谢大家。现在我认为是我的程序造成了这个问题。