• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

특정 문자 입력 시 프로그램 종료 방법 문의 드립니다.

20.11.12 20:44 작성 조회수 2.73k

1

import random
import os
import sys

def input_check(msgcasting=int):
    while True:
        try:
            user_input = int(input("몇 일까요?(1 ~ 99 사이의 정수만 입력하세요) : "))
            if user_input == "n":
                sys.exit()
            return user_input
        except:
            continue

chance = 10
os.system("cls")
print("1부터 99까지의 숫자를 10번의 시도 안에 맞춰보는 게임입니다")

def game():
    global count
    count = 0
    number = random.randint(199)

    while count < chance:
        count += 1
        user_input = input_check("몇 일까요?(1 ~ 99 사이의 정수만 입력하세요) : ")
        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))        
        
game()

while True:
    print("게임을 계속 하시겠습니까?(Y/N) : "end='')
    answer = input()
    if answer == "y" or answer == "Y":
        game()
    elif answer == "n" or answer == "N":
        print("게임을 종료합니다.")
        break

위 코드는 제가 일부 기능을 추가 한 상태입니다.

그런데 숫자를 입력 받을 때 사용자가 n을 입력하면 게임이 종료되게끔

이런 저런 시도를 해봤는데 안되더라고요 그래서 

user_input = input("몇 일까요?(1 ~ 99 사이의 정수만 입력하세요) : ")
if user_input == "n":
sys.exit()

마지막으로 input_check 안에 이런식으로 해봤는데도 의도대로 안되더라고요.

무엇이 문제인지 잘 모르겠습니다.

어떻게 하면 n을 입력받았을 때 프로그램이 종료될까요?

아주 단순한 문제인거 같은데 답을 모르겠습니다.

답변 3

·

답변을 작성해보세요.

1

리턴은 말그대로 해당 함수를 호출한 쪽으로 결과를 돌려주는 역할을 하게 됩니다.

user_input = int(user_input) 

return user_input 

이처럼 하는것과

return -1

을 해도 결국 해당 함수에 값을 돌려주는건 마찬가지 입니다. 따라서 꼭 user_input 에 값을 넣을 필요는 없습니다.

sys.exit() 는 대화형 인터프리터를 종료할때 사용됩니다. 위와 같은 무한루프 안에서는 대화형 인터프리터(쉽게 입력대기중..)가 종료되었다 하더라도 무한루프 로직상 다시 입력대기창이 반복되기 때문에 원하는 프로그램 종료 기능이 수행될수가 없습니다.

1

아래 코드를 참고해보시기 바랍니다.

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

감사합니다. 아주 잘 되네요. ^^ 그런데 궁금한 점이 있습니다.

            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

user_input을 판단하고 -1과 -2를 리턴할 때 이 리턴값이 user_input으로 들어감을 의미하는 코드가 없는데

어떻게 들어가는건가요? 안쪽 조건문에서 반환되는 값이 있다면 바깥쪽 조건문에서 리턴값으로 주는 변수에

자동적으로 들어가는건가요? 원리를 정확하게 이해하지 못했습니다..

그리고 if user_input == "n":일 때 밑에 sys.exit()를 넣은 경우에는 왜 종료가 안되는건가요?

sys.exit() 라는 함수는 이런 방식으로 사용하는게 아닌건가요? 정확한 사용방법을 모르고 검색해서 나온 방법을

사용해본거라 원리를 모르겠습니다. ㅠ