2017-04-10 1 views
-4

이 코드 스 니펫은 중학교에서 가르치는 파이썬 과정에서 가져온 것입니다. 이 파일은 거북이를 가져온 다음 무작위로 가져 와서 사각형이 그려지는 동안 목록에서 색상을 선택할 수 있습니다. if 루프를 while 루프로 변경해보고 예상치 못한 결과가 발생했습니다. 루프는 num = 0 후에 계속되며 0을 무기한 인쇄합니다. sqspin (num-1) 호출 외의 감소분을 제거하고 위의 줄에서 감소를 수행했습니다. num = num -1 이 변경은 연속적인 각 루프에 대해 num의 인쇄 된 값을 임의로 변경하기 시작했습니다. 처음으로 0에 도달 한 후 나는 왜 num> 0이 num = 0 일 때 루프를 끝내지 않거나 num의 임의 값이 어디서 오는지 이해하지 못한다. 모든 단서? 3.4.3을 실행 중이지만 학교에서 2.7을 사용 중입니다.임의의 가져 오기가 while 루프의 사용에 영향을 줍니까?

from turtle import * 
from random import * 

shape("turtle") 
st() 

def sq(): 
    fd(100) 
    rt(90) 
    fd(100) 
    rt(90) 
    fd(100) 
    rt(90) 
    fd(100) 
    rt(90) 

colors = ['red', 'green', 'orange', 'blue', 'yellow'] 

def pickcolor(): 
    return choice(colors) 

def sqspin(num): 
    print(num) 
    if num > 0: 
     sq() 
     rt(5) 
     mycolor = pickcolor() 
     pencolor(mycolor) 
     sqspin(num-1) 

sqspin(5) 
+0

왜 줄 번호를 추가 했습니까? –

+1

'num'을 절대 변경하지 않기 때문에! 재귀 호출에서'num-1'을 전달하지만 호출자에서 num을 변경하지는 않습니다. –

+0

'sq' 란 무엇입니까? 내가 놓친 게 있니? –

답변

0

당신은 당신이 제안하는 일을하지만, 단지 ifwhile A를하는 것은 충분하지 않다 변경 할 수 있습니다. 당신이 혼란스러워지는 곳은 과 반복의 차이는입니다. 이 알고리즘은 수 있도록, 현재 재귀 그것을 반복 우리가 할 수있는하십시오 while를가되는 if에 더하여, 우리는 sqspin()에 재귀 호출을 제거하고 루프 내 대신 재귀 호출 내에서 num 감소

def sqspin(num): 
    while num > 0: 
     print(num) 
     sq() 
     rt(5) 
     pencolor(pickcolor()) 
     num -= 1 

하는 것으로 매개 변수. (원래 목적을 수행 할 수 있도록 루프에 print(num)을 이동하십시오.)

+0

건설적인 응답에 감사드립니다. 재귀 호출은 while 루프로 변경했을 때 고려하지 않은 문제를 생성하고있었습니다. 나는 이제 if와 while의 사용법의 차이에 대해 더 잘 이해하게되었습니다. –

관련 문제