본문 바로가기
파이썬/실전 프로그래밍

[파이썬]숫자 맞추기 게임 만들기

by 코키드 Cokid 2022. 10. 22.
반응형

이번 포스팅에선 파이썬을 활용하여 1부터 99까지의 랜덤한 숫자를 10번 안에 찾는 게임을 만들어보자.

 

숫자 맞추기 게임 만들기

랜덤한 수 만들기

1에서 99까지 랜덤한 수를 만들어 보자. random 라이브러리를 활용해보자.

import random
num_random = random.randint(1, 99)

 

반복문 만들기

그 다음 10번 동안 문제를 내는 반복문을 만들어보자.

coin = 10
while coin:
    coin-=1
    print("남은 코인 개수: {}".format(coin))

 

조건문 만들기, 입력받기

coin = 10
num = 0

while coin:
    coin -= 1
    num = int(input("1~99 사이의 숫자를 맞춰보세요"))
    if num == num_random:
        print("축하합니다. {}이 정답입니다".format(num))
        break
    elif num > num_random:
        print("{}보다 작습니다. 남은 코인: {}개".format(num, coin))
    elif num < num_random:
        print("{}보다 큽니다. 남은 코인: {}개".format(num, coin))
        
if num != num_random and coin==0:
    print("코인이 다 떨어졌습니다. 숫자 맞추기 실패입니다")

input 함수로 사용자의 입력을 받아 정답과 비교하여, 정답을 맞히면 while문을 탈출하고 축하 메시지를 띄운다. 만약 정답이 아니면 힌트를 주고 남은 코인이 몇 개인지 알려준다. 반복문이 끝났는데, 정답이 아니면서 코인의 개수가 0개면 게임 실패를 알리는 메시지를 출력한다. 게임을 실행해보자.

#결과 출력
1~99 사이의 숫자를 맞춰보세요50
50보다 큽니다. 남은 코인: 9개
1~99 사이의 숫자를 맞춰보세요75
75보다 큽니다. 남은 코인: 8개
1~99 사이의 숫자를 맞춰보세요85
85보다 큽니다. 남은 코인: 7개
1~99 사이의 숫자를 맞춰보세요96
축하합니다. 96이 정답입니다

 

예외처리

만약 위의 입력값을 정수가 아닌 값을 입력하면 에러가 발생한다. input을 int로 캐스팅했기 때문이다.

이런 만약의 상황을 대비하여 입력값을 체크해주는 함수를 만들어보자.

def input_check(casting = int) -> int:
    while True:
        try:
            var = input("정답은? ")
            var = casting(var)
            return var
            break
        except:
            print("잘못된 입력입니다. 정수를 입력해주세요.")
            continue

input_check 함수에서 사용자 입력값을 받아 int로 캐스팅할 수 없으면 except문으로 가서 에러 문구를 출력하고 다시 반복문을 돌려 인풋 값을 받는다.

 

이 게임은 한 번 시작하면 정답을 맞히거나 코인이 떨어지기 전까지 그만둘 수 없다. 만약 유저가 중간에 게임을 포기하고 싶을 때 exit을 입력한다면 게임을 끝낼 수 있게 만들어보자.

def input_check(casting = int) -> int:
    while 1:
        try:
            var = input("정답은? ")
            if var == "exit":
                return "exit"
                break
            else:
                var = casting(var)
                return var
                break
        except:
            print("잘못된 입력입니다. 정수를 입력해주세요.")
            continue

위와 같이 if문을 추가하여 입력값이 exit이면 반복문을 종료하고 "exit"을 반환한다.

 

while coin:
    num = input_check()
    coin -= 1
    if num == "exit":
        print("게임을 포기하시다니 아쉽습니다.")
        break
    elif num == num_random:
        print("축하합니다. {}이 정답입니다".format(num))
        break
    elif num > num_random:
        print("{}보다 작습니다. 남은 코인: {}개".format(num, coin))
    elif num < num_random:
        print("{}보다 큽니다. 남은 코인: {}개".format(num, coin))

if num != num_random and coin==0:
    print("코인이 다 떨어졌습니다. 숫자 맞추기 실패입니다")import random

그럼 input 함수를 사용하여 반복문도 다시 작성해보자. exit이 들어오면 게임 종료 문구를 띄우고 반복문을 탈출한다.

 

이제 전체 코드를 보자.

import random
import os

def input_check(casting = int) -> int:
    while 1:
        try:
            var = input("정답은? ")
            if var == "exit":
                return "exit"
                break
            else:
                var = casting(var)
                return var
                break
        except:
            print("잘못된 입력입니다. 정수를 입력해주세요.")
            continue

os.system('cls')
num_random = random.randint(1,99)
coin = 10
print('*****************************************************')
print('숫자 맞추기 게임에 오신 걸 환영합니다!')
print('1~99 사이의 숫자를 맞춰보세요, 코인은 10개 드립니다.')
print('*****************************************************')

while coin:
    num = input_check()
    coin -= 1
    if num == "exit":
        print("게임을 포기하시다니 아쉽습니다.")
        break
    elif num == num_random:
        print("축하합니다. {}이 정답입니다".format(num))
        break
    elif num > num_random:
        print("{}보다 작습니다. 남은 코인: {}개".format(num, coin))
    elif num < num_random:
        print("{}보다 큽니다. 남은 코인: {}개".format(num, coin))

if num != num_random and coin==0:
    print("코인이 다 떨어졌습니다. 숫자 맞추기 실패입니다")

os라이브러리의 system함수를 사용하면 프롬프트 창을 깨끗하게 사용할 수 있다. 그 후 게임을 시작하는 문구를 띄운 후 게임을 시작해보자.

*****************************************************
숫자 맞추기 게임에 오신 걸 환영합니다!
1~99 사이의 숫자를 맞춰보세요, 코인은 10개 드립니다.
*****************************************************
정답은? 123asda 잘못된 입력입니다. 정수를 입력해주세요.
정답은? 한글 잘못된 입력입니다. 정수를 입력해주세요.
정답은? 50
50보다 큽니다. 남은 코인: 9개
정답은? 75 75보다 큽니다. 남은 코인: 8개
정답은? 90 90보다 작습니다. 남은 코인:7개
정답은? exit
게임을 포기하시다니 아쉽습니다.

input 함수가 사용되는 것을 보려고 일부러 결과를 맞추지 않고 exit을 입력했다.

반응형

'파이썬 > 실전 프로그래밍' 카테고리의 다른 글

[파이썬]숫자 야구 게임 만들기  (0) 2022.10.27

댓글