我正在尝试学习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()
答案 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!然而产生相同的结果: