-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
특정 문자 입력 시 프로그램 종료 방법 문의 드립니다.
20.11.12 20:44 작성 조회수 2.73k
1
위 코드는 제가 일부 기능을 추가 한 상태입니다.
그런데 숫자를 입력 받을 때 사용자가 n을 입력하면 게임이 종료되게끔
이런 저런 시도를 해봤는데 안되더라고요 그래서
마지막으로 input_check 안에 이런식으로 해봤는데도 의도대로 안되더라고요.
무엇이 문제인지 잘 모르겠습니다.
어떻게 하면 n을 입력받았을 때 프로그램이 종료될까요?
아주 단순한 문제인거 같은데 답을 모르겠습니다.
답변을 작성해보세요.
1
남박사
지식공유자2020.11.17
리턴은 말그대로 해당 함수를 호출한 쪽으로 결과를 돌려주는 역할을 하게 됩니다.
user_input = int(user_input)
return user_input
이처럼 하는것과
return -1
을 해도 결국 해당 함수에 값을 돌려주는건 마찬가지 입니다. 따라서 꼭 user_input 에 값을 넣을 필요는 없습니다.
sys.exit() 는 대화형 인터프리터를 종료할때 사용됩니다. 위와 같은 무한루프 안에서는 대화형 인터프리터(쉽게 입력대기중..)가 종료되었다 하더라도 무한루프 로직상 다시 입력대기창이 반복되기 때문에 원하는 프로그램 종료 기능이 수행될수가 없습니다.
1
남박사
지식공유자2020.11.14
아래 코드를 참고해보시기 바랍니다.
import random
import os
import sys
def input_check(msg, casting=int):
while True:
try:
# 입력된 값을 문자열(str)로 캐스팅
user_input = str(input("몇 일까요?(1 ~ 99 사이의 정수만 입력하세요) : "))
# 입력된 값이 알파벳인경우
if user_input.isalpha():
# n 인경우 -1 리턴
if user_input == "n":
return -1
# n 이 아닌 알파벳인경우 -2 리턴
else:
return -2
else:
# 알파벳이 아닌경우 숫자로 캐스팅
user_input = int(user_input)
return user_input
except:
continue
chance = 10
os.system("cls")
print("1부터 99까지의 숫자를 10번의 시도 안에 맞춰보는 게임입니다")
def game():
global count
count = 0
number = random.randint(1, 99)
while count < chance:
count += 1
user_input = input_check("몇 일까요?(1 ~ 99 사이의 정수만 입력하세요) : ")
# input_check 함수에서 -1, -2, 숫자 리턴값으로 진행 여부 판단
if user_input >= 0:
if user_input == number:
print("성공! {}이(가) 맞습니다.".format(number))
print("{}번만에 성공하셨습니다.".format(count))
break
elif count == chance:
print("실패, 정답은 {}입니다.".format(number))
break
elif user_input < number:
print("{}보다 큽니다.".format(user_input))
elif user_input > number:
print("{}보다 작습니다.".format(user_input))
else:
if user_input == -1:
break
game()
while True:
print("게임을 계속 하시겠습니까?(Y/N) : ", end='')
answer = input()
if answer == "y" or answer == "Y":
game()
elif answer == "n" or answer == "N":
print("게임을 종료합니다.")
break
0
너굴너굴너구리
질문자2020.11.14
감사합니다. 아주 잘 되네요. ^^ 그런데 궁금한 점이 있습니다.
user_input을 판단하고 -1과 -2를 리턴할 때 이 리턴값이 user_input으로 들어감을 의미하는 코드가 없는데
어떻게 들어가는건가요? 안쪽 조건문에서 반환되는 값이 있다면 바깥쪽 조건문에서 리턴값으로 주는 변수에
자동적으로 들어가는건가요? 원리를 정확하게 이해하지 못했습니다..
그리고 if user_input == "n":일 때 밑에 sys.exit()를 넣은 경우에는 왜 종료가 안되는건가요?
sys.exit() 라는 함수는 이런 방식으로 사용하는게 아닌건가요? 정확한 사용방법을 모르고 검색해서 나온 방법을
사용해본거라 원리를 모르겠습니다. ㅠ
답변 3