if문과 for, while 반복문을 함께 사용해 숫자야구 게임 완성하기
설명
Python의 조건문과 반복문을 함께 연습할 수 있는 대표적인 실습 예제입니다. 숫자야구 게임을 직접 만들면서 if, elif, else, for, while, break, continue가 실제 프로그램에서 어떻게 사용되는지 알아봅니다.
숫자야구 게임의 규칙
컴퓨터가 123이라는 3자리 숫자를 정했다고 가정해보겠습니다.
사용자가 153을 입력하면 다음과 같이 판정합니다.
1→ 위치와 숫자가 모두 같음 → 1 스트라이크5→ 정답에 없는 숫자3→ 숫자는 있지만 위치가 다름 → 1 볼
따라서 결과는 1 스트라이크 1 볼입니다.
정답을 모두 맞힐 때까지 계속 입력할 수 있도록 while 반복문을 사용하고, 숫자를 하나씩 비교하기 위해 for 반복문을 사용하겠습니다.
먼저 숫자 하나를 비교해보기
가장 먼저 if문으로 숫자와 위치가 같은지 확인해봅니다.
answer = "123"
guess = "153"
if guess[0] == answer[0]:
print("스트라이크")
elif guess[0] in answer:
print("볼")
여기서 guess[0]은 입력한 숫자의 첫 번째 숫자를 의미합니다.
guess[0] == answer[0]이면 숫자와 위치가 모두 같으므로 스트라이크입니다.
숫자는 있지만 위치가 다르면 볼입니다.
for문으로 숫자 3개 비교하기
3개의 숫자를 일일이 비교하는 대신 for문을 사용할 수 있습니다.
answer = "123"
guess = "153"
strike = 0
ball = 0
for i in range(3):
if guess[i] == answer[i]:
strike += 1
elif guess[i] in answer:
ball += 1
print(strike, "스트라이크", ball, "볼")
range(3)을 사용하면 0, 1, 2를 차례대로 가져옵니다.
따라서 정답과 입력값의 세 자리를 하나씩 비교할 수 있습니다.
while문으로 게임 반복하기
이제 정답을 맞힐 때까지 게임이 계속되도록 만들어보겠습니다.
answer = "123"
while True:
guess = input("숫자 3개를 입력하세요: ")
strike = 0
ball = 0
for i in range(3):
if guess[i] == answer[i]:
strike += 1
elif guess[i] in answer:
ball += 1
print(strike, "스트라이크", ball, "볼")
if strike == 3:
print("정답입니다!")
break
여기서 while True가 게임을 계속 반복하게 만듭니다.
그리고 strike == 3이 되면 정답을 맞힌 것이므로 break를 사용해 반복문을 종료합니다.
잘못된 입력 처리하기
사용자가 숫자가 아닌 값을 입력하거나 3자리가 아닌 숫자를 입력할 수도 있습니다.
이런 상황도 if문으로 처리할 수 있습니다.
if len(guess) != 3 or not guess.isdigit():
print("3자리 숫자를 입력하세요.")
continue
continue는 현재 반복을 중단하고 while문의 다음 반복으로 넘어갑니다.
따라서 잘못된 입력이 들어오면 결과를 계산하지 않고 다시 숫자를 입력받게 됩니다.
완성된 숫자야구 게임
answer = "123"
while True:
guess = input("숫자 3개를 입력하세요: ")
if len(guess) != 3 or not guess.isdigit():
print("3자리 숫자를 입력하세요.")
continue
strike = 0
ball = 0
for i in range(3):
if guess[i] == answer[i]:
strike += 1
elif guess[i] in answer:
ball += 1
print(strike, "스트라이크", ball, "볼")
if strike == 3:
print("🎉 정답입니다!")
break
이제 프로그램을 실행하면 정답을 맞힐 때까지 계속 숫자를 입력할 수 있습니다.
코드에서 사용한 문법 정리
| 문법 | 역할 |
|---|---|
if | 조건 확인 |
elif | 다른 조건 확인 |
for | 숫자 3개를 하나씩 비교 |
while | 게임을 계속 반복 |
break | 정답을 맞히면 게임 종료 |
continue | 잘못된 입력을 건너뛰고 다시 시작 |
+= 1 | 스트라이크와 볼 개수 증가 |
이번 예제의 핵심은 조건문과 반복문을 따로 사용하는 것이 아니라 함께 사용하는 것입니다.
직접 추가해볼 기능
기본 게임을 완성했다면 다음 기능을 직접 추가해보는 것도 좋습니다.
- 정답을 매번 랜덤으로 생성하기
- 게임 횟수 제한하기
- 현재 몇 번째 시도인지 출력하기
- 정답을 맞히는 데 걸린 횟수 출력하기
- 중복되지 않는 3자리 숫자 만들기
특히 정답을 랜덤으로 생성하도록 변경하면 훨씬 실제 게임에 가까워집니다.
마무리
숫자야구 게임은 Python 기초 문법을 한 번에 연습하기 좋은 예제입니다.
if문으로 스트라이크와 볼을 판단하고, for문으로 숫자를 하나씩 비교하며, while문으로 게임을 반복할 수 있습니다.
여기에 break와 continue까지 사용하면 조건문과 반복문이 실제 프로그램에서 어떻게 연결되는지 자연스럽게 이해할 수 있습니다.
기본 코드를 직접 실행한 뒤 정답 랜덤 생성이나 시도 횟수 제한 기능을 추가해보면 Python 문법을 익히는 데 더욱 도움이 됩니다.