python 재귀함수로 return받을 때 주의점 (return 값이 none)
import random
def start():
rsp = input("가위바위보를 선택하세요.")
if(rsp == "가위") :
return 0
elif(rsp == "바위") :
return 1
elif(rsp == "보") :
return 2
else:
print("잘못된 입력입니다.")
start()
위와 같은 코드가 있다고 생각해보자.
start 라는 함수를 호출하면 컴퓨터는 나에게 입력값을 요구한다.(line3)
내가 "가위" 혹은 "바위" 혹은 "보"를 입력하면 거기에 알맞은 리턴값을 반환하지만 (line 4~9)
그 외의 값을 입력하면 "잘못된 입력입니다." 라는 말을 출력후 다시 start함수가 시작 된다. (line 10 ~12)
그런데 이렇게 코드를 작성하면 문제가 생긴다. 예를 들어
분명히 "보"를 4번째 실행 때 입력하였는데 2가 아닌 none 즉 아무것도 return 되지 않았음을 알 수 있다.
그러면 왜? 이런 경우가 생기는가
그 이유는 내가 처음 호출한 start 함수의 마지막 else는 재귀함수로서 다시 start 함수를 호출 할 뿐 return해주는 값이 없기 때문이다.
이해를 돕기 위해 의사 코드로 표현하면
1. start() 함수 호출
2. 콘솔에 "가위바위보를 선택하세요." 출력
3. (예를들어) 1 입력
4. 마지막 else문 실행, 콘솔에 "잘못된 입력입니다." 출력
5. 두번째 start() 함수가 실행!
6. 콘솔에 "가위바위보를 선택하세요." 출력
7. (예를들어) "보" 입력
8. 두번째 start() 함수에 2를 반환하고 종료
9. 첫번째 start() 함수가 종료, 하지만 반환 값은 없음
로 이해하면 된다.
즉 위와 같은 상황을 해결하기 위해서는 다양한 방법이 있겠지만
def start():
rsp = input("가위바위보를 선택하세요.")
if(rsp == "가위") :
return 0
elif(rsp == "바위") :
return 1
elif(rsp == "보") :
return 2
else:
print("잘못된 입력입니다.")
return start() #이 부분이 수정되었다.
아래처럼 재귀함수가 반환한 값을 첫번째 함수가 똑같이 반환하도록
return start()로 바꿔주면 올바른 입력값이 입력될 때 까지 반복하며 마지막에 올바른 입력이 들어오면 제대로 결과를 반환하는 함수를 만들 수 있다.!