숫자 야구게임은 3개의 번호를 맞추는 게임입니다. 파이썬을 이용하면 랜덤으로 3개의 숫자를 정하고, 이를 질의하며 맞춰가는 게임을 구현할 수 있습니다. 파이썬 조건문과 반복문을 배웠다면 이를 이용해서 만들 수 있습니다. 파이썬 숫자 야구게임 만드는 방법을 알아보겠습니다.
파이썬 기초를 배우면 몇 가지 재미있는 것을 해 볼 수 있습니다. 숫자 야구게임의 방식은 이렇습니다. 먼저 정답인 숫자 3개를 정합니다. 그리고 다음 정답을 맞추기 위해 숫자 3개를 부릅니다. 같은 자리에 같은 숫자를 맞추면 스트라이크, 자리는 다르지만 숫자가 같으면 볼입니다. 그래서 3 스트라이크이면, 정답이 되는 게임이지요. 위의 게임을 파이썬으로 만들 수 있습니다. 오늘은 파이썬 숫자 야구게임 만드는 방법에 대해서 알아보겠습니다.
1. 정답을 랜덤하게 정합니다
필자는 1부터 20까지 중에 3개의 숫자를 정답으로 정했습니다. 3개의 숫자는 중복이 되면 안 되기 때문에, random 모듈의 sample함수를 이용했습니다.
import random
y = random.sample(range(1, 21), 3)
2. 숫자를 입력받고, 값을 비교합니다
정답을 맞출 때까지 while문을 이용해서 계속 3자리 숫자를 입력하게 합니다. 숫자는 문자열로 입력하고 콤마(,)를 기준으로, 3개의 숫자값이 있는 리스트로 변환합니다.
ans = input('숫자를 입력하세요.(구분자:,) ')
ans = ans.split(',')
ans = [int(a) for a in ans]
리스트가 동일하면 '3스트라이크'로 게임을 종료합니다.
if y == ans:
print('3 스트파이크, 0 볼')
print('정답:', y)
is_right = 1
리스트가 같지 않으면, 값을 비교해서 스트라이크와 볼의 갯수를 구합니다. 입력한 숫자가 정답에 있는지 for문을 이용해서 확인합니다. 이 때 숫자가 있는지는 in을 이용해서 확인해야, 숫자가 없어도 에러가 나지 않습니다. 숫자가 있다면 자리수가 같은지 확인해서, 같으면 스트라이크 다르면 볼로 계산합니다.
for a in ans:
if a in y:
if y.index(a) == ans.index(a):
s = s + 1
elif y.index(a) != ans.index(a):
b = b + 1
전체 코드는 아래와 같습니다.
import random
y = random.sample(range(1, 21), 3)
is_right = 0
while is_right==0:
ans = input('숫자를 입력하세요.(구분자:,) ')
ans = ans.split(',')
ans = [int(a) for a in ans]
print('입력한 숫자:', ans)
s = 0;b = 0
if y == ans:
print('3 스트파이크, 0 볼')
print('정답:', y)
is_right = 1
else:
for a in ans:
if a in y:
if y.index(a) == ans.index(a):
s = s + 1
elif y.index(a) != ans.index(a):
b = b + 1
print(f'{s} 스트라이크, {b} 볼')
오늘은 이렇게 파이썬 숫자 야구게임 만드는 방법에 대해서 알아보았습니다. 파이썬 리스트, 조건문, 반복문을 복습해 볼 수 있는 좋은 기회였습니다.
'파이썬 > 파이썬 기초' 카테고리의 다른 글
파이썬 데코레이터 사용이유와 예제 알아보기! (0) | 2022.04.19 |
---|---|
파이썬 독학 필수! 추천 무료 강의 사이트 BEST3는?! (0) | 2022.04.06 |
파이썬 리스트 문자열로 합치기, join함수 2가지 활용방법은?! (0) | 2022.04.05 |
파이썬 구구단 만드는 5가지 방법은?! (0) | 2022.03.31 |
파이썬에서 파일이나 디렉토리를 이동하는 2가지 방법은?! (0) | 2022.03.28 |
파이썬 주피터 노트북을 설치하는 2가지 방법 (0) | 2022.03.22 |
파이썬 JSON 데이터 읽기 및 쓰기, 사용하는 방법은?! (0) | 2022.03.19 |
파이썬에서 zip, 압축파일 풀기를 실행하는 방법은?! (0) | 2022.03.19 |