[TIL][Python] 업다운 게임 (Up & Down Game)

히끼·2024년 2월 22일

TIL

목록 보기
9/43

게임 설명

플레이어가 숫자를 입력하면 컴퓨터가 생각한 숫자와 비교하여 "Up" 또는 "Down"을 힌트로 받아 숫자를 맞추는 게임

  1. 컴퓨터는 1부터 100까지의 랜덤한 숫자를 생성한다.
  2. 플레이어는 숫자를 입력하고, 입력한 숫자와 컴퓨터의 숫자를 비교하여 "Up" 또는 "Down" 힌트를 제공한다.
    • 플레이어가 입력한 숫자가 범위를 벗어나면, 적절한 안내 메시지를 출력하여 유효 범위 내의 숫자를 입력하도록 유도한다.
  3. 플레이어가 숫자를 맞출 때까지 위 과정을 반복한다.
  4. 플레이어가 컴퓨터의 숫자를 정확히 맞히면 시도한 횟수를 알려준다.
  5. 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료한다.
  6. 게임이 종료될 때, 플레이어의 최고 시도 횟수를 기록하고, 다음 게임에서 이를 표시한다.

코드 구현 과정

1. 1~100 사이의 랜덤한 숫자 생성하기

random_number = random.randint(1, 100)
print(random_number)

2. 플레이어로부터 숫자 입력 받기

user_number = input('Enter number: ')

3. 입력한 숫자 검증하기

입력한 숫자가 1~100 사이의 정수인지 검증하기

  • val.isdecimal() : 문자열이 0~9 사이의 숫자로 이루어진 경우만 True 를 리턴 (즉, 양의 정수인 경우에만 True 를 리턴)
while True:
    user_number = input('Enter number: ')
    if user_number.isdecimal():
        user_number = int(user_number)
        if 1 <= user_number <= 100:
            break
    print("Please enter an integer between 1 and 100.")

4. 두 숫자를 비교하기

두 숫자를 비교하여, 조건에 따라 다른 결과를 출력

if random_number > user_number:
    print("Up!")
elif random_number < user_number:
    print("Down!")
else:
    print("Bingo!")

5. 위 과정을 숫자를 맞출 때까지 반복하기

두 숫자가 같을 때까지 반복하도록 while 을 쓰고, 함수로 하나로 묶었다.

def up_down():
    random_number = random.randint(1, 100)
    while True:
        while True:
            user_number = input('Enter number: ')
            if user_number.isdecimal():
                user_number = int(user_number)
                if 1 <= user_number <= 100:
                    break
            print("Please enter an integer between 1 and 100.")

        if random_number > user_number:
            print("Up!")
            print(random_number)
        elif random_number < user_number:
            print("Down!")
            print(random_number)
        else:
            print("Bingo!")
            print(random_number)
            break

6. 시도 횟수 세기

변수 attempts를 만들고, 새로운 숫자를 입력할 때마다 1을 더함

attempts = 0
while True:
	...
    attempts += 1
    
    if random_number > user_number:
    	...
    else:
    	...
        print(f"Your attempts: {attempts}")
        break

7. 게임 재시작 여부 묻고, 게임 초기화하거나 종료하기

  • replay 함수를 만들어서, 사용자 응답이 y, Y, n, N 을 입력하도록 하고, 다른 값을 입력하면 다시 응답을 받도록 반복
  • 응답이 y, Y 중 하나이면, breakup_down() 함수 내 두번째 while을 빠져나오고, 첫번째 while을 다시 돌게 함
  • 응답이 n, N 중 하나이면, return 으로 up_down() 함수를 완전히 종료함
def replay():
    while True:
        reply = input("Do you want to REPLAY? (y/n): ").lower()
        if reply == "y" or reply == "n":
            return reply
            
def up_down():
	while True:
        random_number = random.randint(1, 100)
        attempts = 0
        while True:
        	...
            ...
			else:
            	print("Bingo!")
                print(f"Your attempts: {attempts}")

                reply = replay()
                if reply == "y":
                    break  # 함수 재실행
                elif reply == "n":
                    return  # 함수 종료

8. 최고 시도 횟수 기록하기

플레이어가 시도한 최고 시도 횟수 (가장 많이 시도한 횟수)를 기록하고, 게임 재개할 때마다 보여주기

  • 변수 best_attempts 를 선언하고, 0 으로 초기화
  • 정답 맞췄을 때, best_attemptsattempts 보다 작으면 best_attemptsattempts 저장
if best_attempts < attempts:
	best_attempts = attempts

전체 코드

✨ Github에서 코드 보기 ✨

import random


def replay():
    while True:
        reply = input("Do you want to REPLAY? (y/n): ").lower()
        if reply == "y" or reply == "n":
            return reply


def up_down():
    best_attempts = 0
    while True:
        print(f"Your Best Attempts: {best_attempts}")
        random_number = random.randint(1, 100)
        attempts = 0
        while True:
            while True:
                user_number = input('Enter number: ')
                if user_number.isdecimal():
                    user_number = int(user_number)
                    if 1 <= user_number <= 100:
                        break
                print("Please enter an integer between 1 and 100.")
            attempts += 1

            if random_number > user_number:
                print("Up!")
            elif random_number < user_number:
                print("Down!")
            else:
                print("Bingo!")
                print(f"Your attempts: {attempts}")
                if best_attempts < attempts:
                    best_attempts = attempts

                reply = replay()
                if reply == "y":
                    break  # 함수 재실행
                elif reply == "n":
                    return  # 함수 종료


up_down()

실행 예시

실행 예시

0개의 댓글