본문 바로가기

언어/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. 랜덤 숫자 생성:

     import random
    
     def generate_random_numbers():
         numbers = random.sample(range(1, 10), 3)
         return numbers
    • random.sample(range(1, 10), 3)은 1부터 9까지의 숫자 중 중복되지 않는 3개의 숫자를 랜덤하게 선택합니다.
  2. 사용자 입력 받기:

     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까지의 중복되지 않는 세 자리 숫자를 입력하세요.")
    • input() 함수로 사용자로부터 문자열 형태로 숫자를 입력 받습니다.
    • 입력된 숫자가 세 자리이고, 각 숫자가 1부터 9 사이의 중복되지 않는 숫자인지 확인합니다.
    • 조건을 만족하면 숫자 리스트를 반환합니다.
  3. 스트라이크와 볼 계산:

     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
    • 스트라이크는 위치와 숫자가 모두 맞는 경우를 세고, 볼은 숫자는 맞지만 위치가 틀린 경우를 셉니다.
  4. 게임 실행:

     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 스트라이크가 되면 게임이 종료되고 시도 횟수를 출력합니다.

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

반응형

'언어 > Python' 카테고리의 다른 글

선행 참조 문제 다루기  (0) 2024.06.03
불리언 연산자 다루기  (1) 2024.06.03
while문 다루기  (1) 2024.06.03
if문 다루기  (0) 2024.06.03
함수 다루기  (0) 2024.06.03