python/연습장
숫자야구
joo_coding
2025. 3. 1. 19:49
숫자야구 게임은 주로 3자리 숫자를 맞추는 게임으로, 주로 1부터 9까지의 숫자들만 사용해.
숫자야구 게임의 규칙
- 숫자 생성: 게임에서 컴퓨터는 1부터 9까지의 숫자 중 3개의 숫자를 무작위로 골라야 해. 이 숫자는 중복되지 않고, 순서도 중요해. 예를 들어, 4 2 9 같은 숫자 세 개가 있을 수 있어.
- 사용자의 추측: 플레이어(사용자)는 3자리 숫자를 추측해서 입력해. 예를 들어, 1 4 7 같은 숫자를 추측할 수 있어.
- 결과 확인: 사용자가 추측한 숫자에 대해 다음과 같은 힌트를 준다:
- Strike: 숫자와 위치가 모두 맞으면 Strike(스트라이크).
- Ball: 숫자는 맞지만 위치가 다르면 Ball(볼).
- Out: 숫자도 맞지 않고 위치도 맞지 않으면 Out(아웃).
- 게임 종료: 사용자가 정확히 3개의 숫자를 맞추면 게임이 종료돼. 만약 사용자가 추측한 숫자가 정확히 맞지 않으면, 다시 추측을 이어가면 돼.
예시
예시 1:
컴퓨터가 생성한 숫자: 4 2 9
사용자가 입력한 숫자: 1 4 7
결과: 1 Strike, 0 Ball
예시 2:
컴퓨터가 생성한 숫자: 4 2 9
사용자가 입력한 숫자: 4 9 2
결과: 1 Strike, 2 Ball
게임을 진행하는 흐름
- 컴퓨터는 3자리 숫자를 랜덤하게 선택한다.
- 사용자는 그 숫자를 추측한다.
- 컴퓨터는 그 추측에 대해 Strike, Ball, Out을 알려준다.
- 사용자가 숫자를 맞출 때까지 계속해서 추측을 시도한다.
게임을 만드는 순서는
- 컴퓨터가 3자리 숫자를 생성한다.
- 사용자가 숫자를 추측한다.
- 컴퓨터가 힌트(Strike, Ball, Out)를 제공한다.
- 사용자가 맞출 때까지 계속해서 반복한다.
- 정답을 맞추면 게임 종료하고, 게임에 걸린 횟수를 출력한다.
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()
코드 설명
- generate_number():
- random.sample(range(1, 10), 3)은 1부터 9까지의 숫자 중에서 중복 없이 3개의 숫자를 랜덤하게 선택해.
- get_hint():
- guess는 사용자가 입력한 숫자, secret은 컴퓨터가 고른 숫자.
- strike는 정확히 맞은 자리 수, ball은 숫자는 맞지만 자리가 틀린 수를 계산해.
- 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번
게임 흐름
- 게임 시작 → 컴퓨터가 3자리 숫자를 생성.
- 사용자가 숫자를 추측 → 힌트 제공 (Strike, Ball, Out).
- 정답을 맞추면 게임 종료, 시도 횟수 출력.
이 코드로 기본적인 숫자야구 게임을 만들 수 있어. 이제 이걸 바탕으로 더 기능을 추가하거나 게임을 재미있게 개선할 수 있어! 예를 들어, 사용자에게 힌트를 더 주거나, 게임 난이도를 조정하는 것도 가능해. 😄