본문 바로가기

언어/Python

[ 파이썬 / Python ] 야구게임 프로그램을 만들자.

반응형

다음은 사용자가 3개의 숫자를 맞추는 야구 게임을 Python으로 구현한 코드입니다. 각 코드 블록에는 설명이 포함되어 있습니다.

게임 설명

  • 컴퓨터는 1부터 9까지의 서로 다른 세 숫자를 랜덤하게 선택합니다.
  • 사용자는 3개의 숫자를 입력하여 컴퓨터의 숫자를 맞추려고 합니다.
  • 숫자와 위치가 모두 맞으면 스트라이크, 숫자는 맞지만 위치가 틀리면 볼입니다.
  • 3 스트라이크가 나오면 게임이 종료됩니다.

코드 구현

import random

# 1부터 9까지의 숫자 중에서 중복되지 않는 3개의 숫자를 랜덤하게 선택합니다.
def generate_random_numbers():
    numbers = random.sample(range(1, 10), 3)
    return numbers

# 사용자가 입력한 숫자를 리스트 형태로 변환합니다.
def get_user_input():
    while True:
        user_input = input("세 자리 숫자를 입력하세요 (예: 123): ")
        if len(user_input) == 3 and user_input.isdigit():
            user_numbers = [int(num) for num in user_input]
            if len(set(user_numbers)) == 3 and all(num in range(1, 10) for num in user_numbers):
                return user_numbers
        print("잘못된 입력입니다. 1부터 9까지의 중복되지 않는 세 자리 숫자를 입력하세요.")

# 스트라이크와 볼의 개수를 계산합니다.
def calculate_strikes_and_balls(computer_numbers, user_numbers):
    strikes = sum(1 for i in range(3) if user_numbers[i] == computer_numbers[i])
    balls = sum(1 for i in range(3) if user_numbers[i] in computer_numbers and user_numbers[i] != computer_numbers[i])
    return strikes, balls

def play_game():
    computer_numbers = generate_random_numbers()
    attempts = 0

    print("야구 게임에 오신 것을 환영합니다!")
    print("1부터 9까지의 중복되지 않는 세 자리 숫자를 맞춰보세요.")

    while True:
        user_numbers = get_user_input()
        attempts += 1
        strikes, balls = calculate_strikes_and_balls(computer_numbers, user_numbers)

        print(f"{strikes} 스트라이크, {balls} 볼")

        if strikes == 3:
            print(f"축하합니다! {attempts}번 만에 숫자를 맞추셨습니다.")
            break

if __name__ == "__main__":
    play_game()

코드 설명

  1. 랜덤 숫자 생성:
    • random.sample(range(1, 10), 3)은 1부터 9까지의 숫자 중 중복되지 않는 3개의 숫자를 랜덤하게 선택합니다.
  2. import random def generate_random_numbers(): numbers = random.sample(range(1, 10), 3) return numbers
  3. 사용자 입력 받기:
    • input() 함수로 사용자로부터 문자열 형태로 숫자를 입력 받습니다.
    • 입력된 숫자가 세 자리이고, 각 숫자가 1부터 9 사이의 중복되지 않는 숫자인지 확인합니다.
    • 조건을 만족하면 숫자 리스트를 반환합니다.
  4. def get_user_input(): while True: user_input = input("세 자리 숫자를 입력하세요 (예: 123): ") if len(user_input) == 3 and user_input.isdigit(): user_numbers = [int(num) for num in user_input] if len(set(user_numbers)) == 3 and all(num in range(1, 10) for num in user_numbers): return user_numbers print("잘못된 입력입니다. 1부터 9까지의 중복되지 않는 세 자리 숫자를 입력하세요.")
  5. 스트라이크와 볼 계산:
    • 스트라이크는 위치와 숫자가 모두 맞는 경우를 세고, 볼은 숫자는 맞지만 위치가 틀린 경우를 셉니다.
  6. def calculate_strikes_and_balls(computer_numbers, user_numbers): strikes = sum(1 for i in range(3) if user_numbers[i] == computer_numbers[i]) balls = sum(1 for i in range(3) if user_numbers[i] in computer_numbers and user_numbers[i] != computer_numbers[i]) return strikes, balls
  7. 게임 실행:
    • 게임을 시작하고, 무한 루프를 통해 사용자가 숫자를 맞출 때까지 반복합니다.
    • 매번 사용자의 입력을 받아 스트라이크와 볼을 계산하여 출력합니다.
    • 3 스트라이크가 되면 게임이 종료되고 시도 횟수를 출력합니다.
  8. def play_game(): computer_numbers = generate_random_numbers() attempts = 0 print("야구 게임에 오신 것을 환영합니다!") print("1부터 9까지의 중복되지 않는 세 자리 숫자를 맞춰보세요.") while True: user_numbers = get_user_input() attempts += 1 strikes, balls = calculate_strikes_and_balls(computer_numbers, user_numbers) print(f"{strikes} 스트라이크, {balls} 볼") if strikes == 3: print(f"축하합니다! {attempts}번 만에 숫자를 맞추셨습니다.") break if __name__ == "__main__": play_game()

이 프로그램을 실행하면 사용자가 컴퓨터가 랜덤하게 선택한 숫자 3개를 맞출 때까지 게임을 진행할 수 있습니다.

반응형