2017-09-08 2 views
1

나는 이제 막 시작 했으므로이 것을 이해할 수 없습니다.조건이 충족 될 때 프로그램 닫기

나는 학교에서 나를 위해 간단한 계산을하는 프로그램을 작성 중이다.

1에서 X까지의 간단한 숫자를 입력하면 다른 계산을 할 수 있습니다. 모든 숫자는 해당 계산을위한 함수를 호출합니다.

내 문제는 다음과 같습니다. 숫자를 입력하라는 메시지가 나타나면 사용자가 빈 문자열을 입력하면 프로그램에서 사용자에게 닫을 때까지 일정 시간 동안 번호를 다시 입력하도록 요청합니다. 여기 내 코드는 다음과 같습니다.

def pick_procedure(): 
    procedure = raw_input("> ") 

    if not procedure: 
     counter = 0 
     print "Enter a value. " 

     while counter <4: 
      counter = counter + 1 
      main() 
      if counter == 4: 
       break 

def main(): 
    print "\nStudy helper 1.0.\n" 
    print """Procedure list: 

    1.Area of circle. 
    2. Circumference of a circle. 

    Please pick a procedure: """ 
    pick_procedure() 

main() 

빈 문자열을 입력 한 횟수와 관계없이 프로그램이 닫히지 않습니다.

올바르게 올바르게 청소하는 방법은 무엇입니까?

+2

확실히 내부 함수는 내부 함수를 호출하는 main을 호출하기 때문에. 어떤 시점에서, 당신은 100 만개의'''pick_procedure()''함수를 ​​가질 것입니다. – sascha

답변

0

악의적 인 원을 만들었습니다.

처음 프로 시저가 false이면 pick_procedure는 main을 호출 한 다음 main_root를 다시 호출합니다. 재귀 적으로 계속됩니다.

이벤트가 발생했을 때 프로그램을 끝내려면 sys.exit (0)을 사용하면 문제가 해결됩니다. 당신이 말하는 것처럼

1

, 당신은 당신의 코드를 재구성해야합니다

def pick_procedure(valid_choices): 
    print "Enter a value. " 

    for _ in range(4): # prompt for a choice up to 4 times 
     choice = raw_input("> ") 

     if choice in valid_choices: 
      return choice 

    return None # A valid choice was not entered 


def main(): 
    print "\nStudy helper 1.0.\n" 
    choice = 1 

    while choice: 
     print """Procedure list: 

1. Area of circle. 

2. Circumference of a circle. 

Please pick a procedure: """ 

     choice = pick_procedure(["1", "2"]) 

     if choice: 
      print "Doing choice", choice 

main() 

다음 방법은 올바른 선택이 입력되어있는 경우 while choice 루프의 사용하라는 유지할 수 있습니다. 선택 항목을 입력하지 않으면 번, pick_procedure() 함수는 None을 반환하고 while 루프를 정상적으로 종료합니다. 유효한 선택이 입력되면, 그 선택을 리턴합니다.

또한 유효한 응답 목록을 함수에 전달합니다. 그러면 유효한 응답의 다른 목록을 전달하여 다른 질문에 함수를 사용할 수 있습니다.

관련 문제