2017-02-04 4 views
-2

Я пытаюсь изучить python, и до сих пор все прошло хорошо. Однако я продолжаю получать бесконечную ошибку цикла через некоторое время работы моего кода. Приведенный ниже код относится к звездочке с 7 углами.Как устранить петлю infinte в python

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

всегда поставить ПОЛНОЕ сообщение об ошибке в ВОПРОСЕ - мы не можем прочитать в вашем уме и не следует ожидать, что мы будем запускать код, чтобы увидеть это сообщение об ошибке. – furas

+1

этот код работает для меня без ошибок. он рисует 15 звезд ('range (15)') и останавливается. Я не вижу проблемы в этой части кода. Возможно, у вас проблемы в другом коде. – furas

+0

Это не бесконечный цикл. – Batman

ответ

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