2014-02-14 3 views
-1
"""the question is in the bottom""" 

from turtle import * 

speed(0) 
"""initializing for recursion""" 
def init1(): 
    hideturtle() 
    up() 
    fd(-125) 
    down() 
"""initializing for iteration""" 
def init2(): 
    hideturtle() 
    up() 
    fd(250) 
    down() 
"""Making squares using recursion""" 
def draw_spiral_iter2(segment): 
    """ draw_spiral_iter2: NatNum -> NoneType 
     Draws a line segment of 'segments' units and turns right 90 degrees 
     segments - The number of segments in the spiral 
    """ 
    if segment<=5: 
     pass 
    else: 
     up() 
     fd(segment/2) 
     right(90) 
     down() 
     fd(segment/2) 
     right(90) 
     fd(segment) 
     right(90) 
     fd(segment) 
     right(90) 
     fd(segment) 
     right(90) 
     fd(segment/2) 
     left(90) 
     up() 
     fd(-segment/2) 
     draw_spiral_iter2(segment*.7) 
"""using iteration""" 
def drawiter2(segment): 
    while True: 
     if segment <= 5: 
      break 
     else: 
      up() 
      fd(segment/2) 
      right(90) 
      down() 
      fd(segment/2) 
      right(90) 
      fd(segment) 
      right(90) 
      fd(segment) 
      right(90) 
      fd(segment) 
      right(90) 
      fd(segment/2) 
      left(90) 
      up() 
      fd(-segment/2) 
      drawiter2(segment-segment*.3) 
      drawiter2(segment) 


def MAX_SEGMENT(): 
    """ The MAX_SEGMENT() constant is the maximum length of line segment. 
    """ 
    return 200  # should be strictly greater than 0 



def main(): 
    init1() 
    print("iterative, while-loop drawing 2...") 
    draw_spiral_iter2(MAX_SEGMENT()) 
    input("Hit enter to continue.") 
    init2() 
    drawiter2(MAX_SEGMENT()) 
    input("Hit enter to close window.") 
    bye() 

main() 
"""Recursion is fine but iteration doesn't work properly""" 

Вопрос:Python черепаха графики

Он не просил меня клавишу ввода, чтобы закрыть окно, в конце концов? Что я должен изменить?

+0

Это делает для меня. Как вы это используете? – Bonzo

+0

Что он делает? Чем это отличается от того, что вы ожидаете? Предоставление дополнительной информации облегчит вам помощь. – unholysampler

ответ

0

drawiter2 бесконечно петель по двум причинам:

  • Все это в while True цикл, который никогда не заканчивается.
  • Функция вызывает себя с неизменными параметрами, когда вы делаете drawiter2(segment).

Изменить определение функции для:

def drawiter2(segment): 
    if segment <= 5: 
     return 
    else: 
     up() 
     fd(segment/2) 
     right(90) 
     down() 
     fd(segment/2) 
     right(90) 
     fd(segment) 
     right(90) 
     fd(segment) 
     right(90) 
     fd(segment) 
     right(90) 
     fd(segment/2) 
     left(90) 
     up() 
     fd(-segment/2) 
     drawiter2(segment-segment*.3) 

Или, итеративным форму:

def drawiter2(segment): 
    while True: 
     if segment <= 5: 
      break 
     else: 
      up() 
      fd(segment/2) 
      right(90) 
      down() 
      fd(segment/2) 
      right(90) 
      fd(segment) 
      right(90) 
      fd(segment) 
      right(90) 
      fd(segment) 
      right(90) 
      fd(segment/2) 
      left(90) 
      up() 
      fd(-segment/2) 
      segment -= segment * .3 
Смежные вопросы