python/연습장

숫자야구

joo_coding 2025. 3. 1. 19:49

숫자야구 게임은 주로 3자리 숫자를 맞추는 게임으로, 주로 1부터 9까지의 숫자들만 사용해. 

숫자야구 게임의 규칙

  1. 숫자 생성: 게임에서 컴퓨터는 1부터 9까지의 숫자 중 3개의 숫자를 무작위로 골라야 해. 이 숫자는 중복되지 않고, 순서도 중요해. 예를 들어, 4 2 9 같은 숫자 세 개가 있을 수 있어.
  2. 사용자의 추측: 플레이어(사용자)는 3자리 숫자를 추측해서 입력해. 예를 들어, 1 4 7 같은 숫자를 추측할 수 있어.
  3. 결과 확인: 사용자가 추측한 숫자에 대해 다음과 같은 힌트를 준다:
    • Strike: 숫자와 위치가 모두 맞으면 Strike(스트라이크).
    • Ball: 숫자는 맞지만 위치가 다르면 Ball(볼).
    • Out: 숫자도 맞지 않고 위치도 맞지 않으면 Out(아웃).
  4. 게임 종료: 사용자가 정확히 3개의 숫자를 맞추면 게임이 종료돼. 만약 사용자가 추측한 숫자가 정확히 맞지 않으면, 다시 추측을 이어가면 돼.

예시

예시 1:

컴퓨터가 생성한 숫자: 4 2 9

사용자가 입력한 숫자: 1 4 7

결과: 1 Strike, 0 Ball

예시 2:

컴퓨터가 생성한 숫자: 4 2 9

사용자가 입력한 숫자: 4 9 2

결과: 1 Strike, 2 Ball

게임을 진행하는 흐름

  1. 컴퓨터는 3자리 숫자를 랜덤하게 선택한다.
  2. 사용자는 그 숫자를 추측한다.
  3. 컴퓨터는 그 추측에 대해 Strike, Ball, Out을 알려준다.
  4. 사용자가 숫자를 맞출 때까지 계속해서 추측을 시도한다.

게임을 만드는 순서는

  1. 컴퓨터가 3자리 숫자를 생성한다.
  2. 사용자가 숫자를 추측한다.
  3. 컴퓨터가 힌트(Strike, Ball, Out)를 제공한다.
  4. 사용자가 맞출 때까지 계속해서 반복한다.
  5. 정답을 맞추면 게임 종료하고, 게임에 걸린 횟수를 출력한다.

1. 컴퓨터가 숫자 생성하기

  • 컴퓨터는 1부터 9까지의 숫자 중에서 중복 없이 3개의 숫자를 랜덤하게 골라야 해.
  • random 모듈을 이용해서 숫자를 선택할 거야.

2. 사용자의 입력 받기

  • 사용자가 입력한 숫자를 리스트로 변환해서 검사할 거야.

3. 결과 확인 (Strike, Ball, Out)

  • 사용자가 입력한 숫자와 컴퓨터가 고른 숫자를 비교해서 맞는 자리가 있으면 Strike, 맞는 숫자가 다른 자리에 있으면 Ball, 맞지 않으면 Out을 출력할 거야.

파이썬 코드 예시

import random

def generate_number():
    """컴퓨터가 1부터 9까지의 숫자 중에서 중복 없이 3자리 숫자 생성"""
    return random.sample(range(1, 10), 3)

def get_hint(guess, secret):
    """사용자가 추측한 숫자와 컴퓨터가 생성한 숫자 비교"""
    strike = 0
    ball = 0
    
    # 사용자 추측과 컴퓨터 숫자 비교
    for i in range(3):
        if guess[i] == secret[i]:
            strike += 1
        elif guess[i] in secret:
            ball += 1
    
    return strike, ball

def play_game():
    """숫자야구 게임 실행"""
    secret = generate_number()  # 컴퓨터가 3자리 숫자 생성
    attempts = 0  # 시도 횟수

    print("숫자야구 게임 시작!")
    print("1부터 9까지의 숫자 중 3개의 숫자를 맞춰보세요.")

    while True:
        attempts += 1
        
        # 사용자가 3자리 숫자를 입력하도록 받기
        guess = input("3자리 숫자를 입력하세요 (예: 1 2 3): ").split()
        
        # 입력을 숫자로 변환
        guess = [int(x) for x in guess]
        
        # 유효성 검사 (3자리 숫자, 1-9 범위, 중복 없음)
        if len(guess) != 3 or any(x < 1 or x > 9 for x in guess) or len(set(guess)) != 3:
            print("입력이 잘못되었습니다. 1부터 9까지의 중복 없는 3개의 숫자를 입력하세요.")
            continue

        # 스트라이크와 볼 계산
        strike, ball = get_hint(guess, secret)
        
        # 힌트 출력
        print(f"{strike} Strike, {ball} Ball")
        
        # 사용자가 정답을 맞혔으면 종료
        if strike == 3:
            print(f"정답을 맞추셨습니다! 시도 횟수: {attempts}번")
            break

# 게임 시작
play_game()

코드 설명

  1. generate_number():
    • random.sample(range(1, 10), 3)은 1부터 9까지의 숫자 중에서 중복 없이 3개의 숫자를 랜덤하게 선택해.
  2. get_hint():
    • guess는 사용자가 입력한 숫자, secret은 컴퓨터가 고른 숫자.
    • strike는 정확히 맞은 자리 수, ball은 숫자는 맞지만 자리가 틀린 수를 계산해.
  3. play_game():
    • 게임을 시작하고, 사용자가 숫자를 입력할 때마다 유효성 검사를 해.
    • 입력이 잘못되면 다시 입력을 받도록 하고, 3자리 숫자에 대해 Strike와 Ball을 계산해서 출력해.
    • 정답을 맞추면 게임을 종료하고, 시도 횟수를 출력해.

게임 예시 실행

숫자야구 게임 시작!
1부터 9까지의 숫자 중 3개의 숫자를 맞춰보세요.
3자리 숫자를 입력하세요 (예: 1 2 3): 1 2 3
1 Strike, 1 Ball
3자리 숫자를 입력하세요 (예: 1 2 3): 4 5 6
0 Strike, 2 Ball
3자리 숫자를 입력하세요 (예: 1 2 3): 7 8 9
1 Strike, 0 Ball
3자리 숫자를 입력하세요 (예: 1 2 3): 4 2 9
3 Strike, 0 Ball
정답을 맞추셨습니다! 시도 횟수: 4번

게임 흐름

  1. 게임 시작 → 컴퓨터가 3자리 숫자를 생성.
  2. 사용자가 숫자를 추측 → 힌트 제공 (Strike, Ball, Out).
  3. 정답을 맞추면 게임 종료, 시도 횟수 출력.

이 코드로 기본적인 숫자야구 게임을 만들 수 있어. 이제 이걸 바탕으로 더 기능을 추가하거나 게임을 재미있게 개선할 수 있어! 예를 들어, 사용자에게 힌트를 더 주거나, 게임 난이도를 조정하는 것도 가능해. 😄