如何消除python中的infinte循环

时间:2017-02-04 23:19:18

标签: 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(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()

1 个答案:

答案 0 :(得分:0)

有人指出,您使用range(15)代替range(5)重新制作星标三次会使您的程序花费更长时间。 (足以让你把它误认为是无限循环。)

还有其他方法可以改善程序的性能。容易绑定是添加alex.speed("fastest"),这将导致乌龟在绘图中比赛并更快结束。

但是,如果我们改为alex.speed("slowest"),我们会看到该程序的另一个问题:乌龟花费太多时间转向另一条路并转回另一条路。有时它绕着圆圈转而不是短路。因此,让我们重新编写代码以解决此问题:

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!然而产生相同的结果:

enter image description here