본문 바로가기
프로그래밍/Python

[Python] 숫자 맞추기 게임(업다운 게임)_while문, try/except(예외처리)

by 소꿍 2020. 4. 22.

- 랜덤으로 설정한 숫자를 사용자가 추측하여 맞추는 게임.

추측한 숫자를 입력하면 정답(랜덤으로 설정된 숫자)보다 큰지 작은지 알려주는 게임을 만들어 보자.

 

필요한 기능

1. 컴퓨터가 범위 내에서 랜덤으로 숫자를 고른다.

2. 사용자의 입력을 받는다.

3. 정해진 횟수 내에서(예. 10회) 사용자의 입력과 컴퓨터가 고른 수를 비교한다.

4. 맞춘 경우, 사용자의 입력 시도 횟수와 함께 정답임을 알려준다.

5. 틀린 경우, 정답보다 숫자가 큰지 작은지 알려준다.

6. 정해진 횟수를 초과하면 정답을 공개한다.

 

코드에 오류가 있어 수정했습니다.(22.3.13)


1. 컴퓨터가 범위 내에서 랜덤으로 숫자를 고른다.

 

import random	# 난수 발생시키는 모듈 random
number = random.randint(1, 1000)	# 1~1000 사이에서 정수인 난수 값을 돌려줌

입력 시도 횟수를 알려주기 위해 tries 변수도 선언한다.

tries = 0 # 시도횟수 tries 변수 선언

제한할 입력 시도 횟수를 변수 n으로 선언했다. (추가한 부분)

n = 10 # 시도 횟수(n번까지 허용)

 

2. 사용자의 입력을 받는다. &

3. 정해진 횟수 내에서(예. 10회) 사용자의 입력과 컴퓨터가 고른 수를 비교한다.

 

먼저 게임에 대한 간단한 안내문을 출력하고,

print("1~1000 사이의 숫자를 맞추세요.")

 

반복문(while)을 이용해 정해진 횟수(10회)동안 사용자의 입력을 받는다. (수정한 부분)

while tries <= n: # n번까지(n과 같을 때까지) 반복
    guess = int(input("숫자를 입력하세요: "))	# 수를 비교해야 하므로 int로 타입 전환
    tries += 1	# 시도할 때마다 시도횟수 1씩 증가

 

4. 맞춘 경우, 사용자의 입력 시도 횟수와 함께 정답임을 알려준다.

while문 안에 조건문(if, elif)을 넣어 사용자의 입력과 컴퓨터가 고른 수를 비교하고,

두 값이 같으면 시도 횟수와 정답임을 알려주는 문장을 출력하고 실행을 중지한다(break).

    if number == guess:	# 사용자 입력과 컴퓨터가 고른 수가 같으면 정답과 시도 횟수 알려줌
        print("정답입니다. 시도 횟수는 %d회입니다." % tries)
        break

5. 틀린 경우, 정답보다 숫자가 큰지 작은지 알려준다. 

    elif number < guess:
        print("=========================\n더 작은 수를 입력하세요")
    elif number > guess:
        print("=========================\n더 큰 수를 입력하세요.")

 

6. 정해진 횟수를 초과하면 while문을 벗어나게 되고, if문에서 횟수를 체크해서 정답을 출력한다. (수정한 부분)

if tries > n:
    print("주어진 기회를 모두 사용하셨습니다. 정답은 %d입니다." % number)

코드를 한번에 쓰면 이렇게 된다.

import random
number = random.randint(1, 1000)
tries = 0
n = 10 # 시도 횟수(n번까지 허용)

print("1~1000 사이의 숫자를 맞추세요.")

while tries <= n:
    guess = int(input("숫자를 입력하세요: "))
    tries += 1
    if number == guess:
        print("정답입니다. 시도 횟수는 %d회입니다." % tries)
        break
    elif number < guess:
        print("=========================\n더 작은 수를 입력하세요")
    elif number > guess:
        print("=========================\n더 큰 수를 입력하세요.")

if tries > n:
    print("주어진 기회를 모두 사용하셨습니다. 정답은 %d입니다." % number)

 


- 더 나아가기(try/except 예외 처리)

 

위에서 작성한 코드는 사용자가 정수(integer)를 입력할 것을 기대한다.

만약 위 코드를 실행했을 때, 사용자가 정수가 아닌 값을 입력하면 에러가 발생한다.(ex. 문자열, 소수 등)

예를 들어 정수가 아닌 0.3을 입력하면 아래와 같은 에러 메시지가 뜬다.

Traceback (most recent call last): File "c:/doit/number_game/1 copy.py", line 7, in <module> guess = int(input("숫자를 입력하세요: ")) ValueError: invalid literal for int() with base 10: '0.3'

에러 메시지를 읽어보면 변수 guess의 타입이 정수가 아니어서 에러가 난 듯하다.

 

에러가 발생하면 그 프로그램은 동작을 멈추게 된다.

에러가 발생해도 프로그램이 동작할 수 있게 하려면 예외 처리를 해 주면 된다.

 

try/except을 사용하면 에러가 발생했을 경우, 프로그램이 멈추지 않고 동작하게 할 수 있다.

 

위에서 작성한 코드의 while문 안에 try/except를 넣어 예외 처리를 하였다.

import random

number = random.randint(1, 1000)
tries = 0
n = 10 # 시도 횟수(n번까지 허용)
print("1~1000 사이의 숫자를 맞추세요.")

while tries <= n:
    try:  # 이상이 없으면 try 안의 코드를 실행
        guess = int(input("숫자를 입력하세요: "))
        tries += 1
        if number == guess:
            print("정답입니다. 시도 횟수는 %d회입니다." % tries)
            break
        elif number < guess:
            print("=========================\n더 작은 수를 입력하세요")
        elif number > guess:
            print("=========================\n더 큰 수를 입력하세요.")
    except:  # 예외의 경우에 아래 문장을 출력
        print("숫자만 입력 가능합니다.")
if tries > n:
    print("주어진 기회를 모두 사용하셨습니다. 정답은 %d입니다." % number)

코드에 이상이 없으면 try 안의 코드를 실행하고, 예외가 발생할 경우 except 안의 코드를 실행하게 된다.

 

위의 경우, tries가 10 이하인 동안 이상이 없으면 try 안의 코드가 실행되어 수를 비교하고 정답을 알려주며,

사용자가 정수가 아닌 값을 입력하면 except 아래의 코드가 실행되어 "숫자만 입력 가능합니다."라는 문장이 출력된다.

댓글