2016-09-16 4 views
0

나는 통제 된 평가를하고 있습니다. 나는 초보자 일 뿐이므로 파이썬에 대해 많이 모른다.첫 번째 값이 정확하면 한 번 실행되는 루프를 수정하는 방법. 첫 번째 값이 잘못되어 두 번째 값이 맞으면 영원히 계속됩니다.

# defining qualification 
def qualification(): 
    print("\nQualification Level") # informs user what is AP + FQ 
    print('\n"AP" = Apprentice', '\n"FQ" = Fully-Qulaified') 

    user_qual = input("Enter your Qualification Level") 

    # error message if any other data is entered 
    while user_qual not in ("AP", "FQ"): 
     print("You have entered one or more data wrong!") 
     print("Please re-enter Qualification Level!") 
     qualification() 

이 코드가 실행될 때마다, 그것은 while 루프까지 좋은 실행 :

나는이 코드를 가지고있다. 올바른 값 (예 : AP 또는 FQ)을 입력하면 코드를 실행 한 다음 while 루프가 실행되지 않습니다. 하지만 잘못된 값을 처음 입력하면 (FQ 또는 AP가 아닌 값) while 루프가 실행되어야하지만 처음 실행 된 후 잘못된 값을 입력 한 후 정확한 값을 입력하면 이브가 실행됩니다. 루프가 루핑을 멈추지 않습니다. 무한 루프가 생성됩니다.

답변을 제공해주십시오. 저는 파이썬으로 프로그래밍 할 때 초보자라는 것을 기억하십시오. 솔루션이 너무 복잡하지 않도록하십시오.

+0

변수가 함수 로컬 변수 "user_qual"이므로 함수에 대한 각 재귀 호출에서이 변수는 고유합니다. 코드에 따르면이 변수는 절대로 변경되지 않습니다. 하지만 여기에서 가장 중요한 질문은 재귀가 필요한 이유입니다. while 루프에서 변수를 업데이트하고 "qualification"에 대한 호출을 user_qual = input ("자격 레벨 입력")으로 바꾸십시오. – Alex

답변

0

잘못된 위치에서 재귀를 사용하려고했습니다.

사용자 입력이 처음 잘못된 경우 올바른 입력을 입력하는 (또는 더 깊게 갈 것입니다) 더 깊은 수준의 재귀가 발생합니다.

그런 다음 변수가 여전히 동일하고 무한 루프가 발생하는 이전 수준의 재귀로 돌아갑니다.

참고 : 다른 재귀 수준으로 실행되는 동안 변수가 동일하지 않습니다. 당신은 다른 지역 범위에 들어가고 있습니다. 프로그램을 계속하기 전에 범위에 대해 약간의 검색을 수행하는 것이 좋습니다.


그래서, 대신 입력 다시, 마지막 줄에 qualification()에 호출하는 :

while user_qual not in ("AP", "FQ"): 
    print("You have entered one or more data wrong!") 
    user_qual = input("Please re-enter Qualification Level!") 

또 다른 해결책은 함수의 시작과 처음에 global user_qual을 사용하는 것입니다 루프의 파이썬에서 전역 변수를 읽으려는 경우이를 읽으십시오.

관련 문제