Python

[Python] 코드잇 숫자 맞히기 게임

왕초보코딩러 2023. 9. 18. 01:22
728x90

이 게임은 랜덤 함수를 사용하여 4번의 기회 안에 1부터 20 사이의 정수를 맞히는 게임인데요.

 

import random

ans = random.randint(1,20)

for i in range(4,0,-1):
    user = int(input(f"기회가 {i}번 남았습니다. 1-20 사이의 숫자를 맞혀 보세요: "))
    
    if(user == ans):
        print(f"축하합니다. {4-i+1}번 만에 숫자를 맞히셨습니다.")
        break
    elif (user > ans):
        if (i == 1):
            print(f"아쉽습니다. 정답은 {ans}였습니다.")
            break
        print("Down")
    else :
        if (i == 1):
            print(f"아쉽습니다. 정답은 {ans}였습니다.")
            break
        print("Up")

 

 


기능 추가 1

 

저는 처음 정수와 마지막 정수도 정하고 싶고,

기회도 시작과 끝 사이의 개수에 따라 균등하게 주고 싶었습니다.

 

그래서 처음 정수와 마지막 정수를 파라미터로 받는 num_game 함수를 만들었습니다.

import random


def num_game(first_num, last_num):
    ans = random.randint(first_num, last_num)
    chance = (last_num - first_num + 1) // 5
    if chance == 0:
        chance = 1
        
    for i in range(chance, 0, -1):
        user = int(input(f"기회가 {i}번 남았습니다. {first_num}-{last_num} 사이의 숫자를 맞혀 보세요: "))
       
        if(user == ans):
            print(f"축하합니다. {chance - i + 1}번 만에 숫자를 맞히셨습니다.")
            break
        elif (user > ans):
            if (i == 1):
                print(f"아쉽습니다. 정답은 {ans}였습니다.")
                break
            print("Down")
        else :
            if (i == 1):
                print(f"아쉽습니다. 정답은 {ans}였습니다.")
                break
            print("Up")

기회는 (마지막 정수 - 처음 정수 + 1)을 5로 나눈 몫만큼 주는 것으로 하였습니다.

만약 기회가 (마지막 정수 - 처음 정수 + 1)이 5보다 작으면 1번의 기회를 주는 것으로 하겠습니다.

 

예시>

num_game(2, 18)

출력>

기회가 3번 남았습니다. 2-18 사이의 숫자를 맞혀 보세요: 7
Up

 

예시>

num_game(1,4)

출력>

기회가 1번 남았습니다. 1-4 사이의 숫자를 맞혀 보세요: 3

 


기능 추가 2

 

 

만약 처음 정수와 마지막 정수 사이의 값이 아닌 정수를 넣으면 다시 입력하라고 출력을 하겠습니다.

그리고 사용자가 입력 시에 정수가 아닌 소수나 문자열을 넣게 되면 오류가 날 것 같습니다.

try catch 문을 사용하여 정수만 받겠습니다.

 

 

파이썬 예외 처리

Try catch문 사용

Try부분: 할 일을 적기

except 부분: try부분에서 예외가 발생할 상황에 실행할 일

else 부분: except 발생이 아닐 때 실행할 일

finally: 예외가 발생하든 안하든 꼭 실행하고 넘어감

 

파이썬 예외(에러) 종류 9가지

1. SyntaxError : 잘못된 문법 사용

2. NameError : 참조변수 없음(변수 선언x)

3. ZeroDivisionError : 0으로 나눌 수 없음

4. IndexError : 인덱스 범위 넘어감

5. ValueError : 해당 참조 값이 없음, 값의 형식이 잘못됨

6. KeyError : 키 없음(딕셔너리에서 없는 key 값 호출)

7. AttributeError : 모듈, 클래스의 잘못된 속성 사용(엉뚱한 함수 사용)

8. FileNotFoundError : 파일 못찾음(해당 경로 파일 없음)

9. TypeError : 타입 안맞음(연산하는데 데이터의 타입이 잘못됨)

 

https://hleecaster.com/python-exception/

 

파이썬 예외처리 쉽게 이해하기 - 아무튼 워라밸

파이썬에서 발생할 수 있는 예외, 에러의 종류들을 정리하고, 그것들을 어떻게 처리할지 전략을 아주 쉽게 남겨보았다.

hleecaster.com

https://blockdmask.tistory.com/550

 

[python] 파이썬 에러 종류 10가지

안녕하세요. BlockDMask입니다. 오늘은 파이썬에서 자주 보는 에러 종류에 대해서 이야기해보려 합니다. 우리가 코드를 작성하다 보면 빈번히 발생하는 것이기 때문에 놀라지 마시고, 콘솔에 나오

blockdmask.tistory.com

 

저는 그렇다면 ValueError 를 사용해야겠네요.

import random 

def num_game(first_num, last_num):
    ans = random.randint(first_num, last_num)
    chance = (last_num - first_num + 1) // 5
    if chance == 0:
        chance = 1
        
    i = chance
    while i > 0:
        try:
            user = int(input(f"기회가 {i}번 남았습니다. {first_num}-{last_num} 사이의 숫자를 맞혀 보세요: "))
        except ValueError:
            print("정수가 아닙니다. 다시 시도하세요")
        else: 
            if(user == ans):
                print(f"축하합니다. {chance - i + 1}번 만에 숫자를 맞히셨습니다.")
                break
            elif (user > ans):
                if (i == 1):
                    print(f"아쉽습니다. 정답은 {ans}였습니다.")
                    break
                print("Down")
            else :
                if (i == 1):
                    print(f"아쉽습니다. 정답은 {ans}였습니다.")
                    break
                print("Up")
            i -= 1

 

 

예시>

num_game(1,10)

출력>

기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: da
정수가 아닙니다. 다시 시도하세요
기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: 4.4
정수가 아닙니다. 다시 시도하세요
기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: 11
1-10 사이의 숫자를 입력하세요
기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: -9
1-10 사이의 숫자를 입력하세요
기회가 2번 남았습니다. 1-10 사이의 숫자를 맞혀 보세요: 4
축하합니다. 1번 만에 숫자를 맞히셨습니다.