[python] 숫자 야구 게임 만들기
숫자 야구 게임
숫자 야구 게임은 연역적 논리 게임으로 컴퓨터가 1부터 9까지 중복되지 않은 3자리 비밀 숫자를 무작위로 뽑고, 플레이어는 3자리 비밀 숫자를 맞추는 게임입니다. 3자리 비밀 숫자 중 위치와 숫자까지 맞추면 스트라이크, 숫자만 맞추며 볼, 위치와 숫자 모두 맞추지 못했다면 노볼입니다.
예)
숫자 야구 게임 | ||
---|---|---|
컴퓨터 | 123 | “123”은 비밀 숫자로 플레이어는 알 수 없습니다. |
플레이어 | 145 | 1 스트라이크 |
플레이어 | 415 | 1 볼 |
플레이어 | 412 | 2 볼 |
플레이어 | 321 | 1스트라이크, 2 볼 |
플레이어 | 456 | 0 볼 |
10번 안에 비밀 숫자를 맞추면(3 스트라이크) 플레이어가 이기는 게임입니다.
1. 비밀 숫자 만들기
[파이썬-의사 난수 생성] https://docs.python.org/ko/3/library/random.html
- random.randint(a,b) :
a <= N <= b
를 만족하는 임의의 정수 N을 반환합니다.
import random
secret_number = random.randint(1,9)
print(secret_number)
2
3자리 비밀 숫자를 만드는 다양한 방법
- random.sample() 사용
random.sample(list, k) : list에 있는 목록 중 k길이의 list를 반환합니다.
import random
secret_number = random.sample(range(1,10),3) # range()
#secret_number = random.sample([1,2,3,4,5,6,7,8,9], 3)
print(secret_number)
[2, 9, 1]
- in 연산자를 이용하여 리스트에 숫자가 있으면 pass하고 없다면 리스트에 추가합니다.
import random
secret_number = []
while True :
number = random.randint(1,9)
if number in secret_number :
pass
else :
secret_number.append(number)
if len(secret_number) == 3 :
break
print(secret_number)
[1, 5, 4]
2. 플레이어가 입력한 3자리 숫자와 비밀 숫자 비교하기
import random
strike = 0 # 스트라이크
ball = 0 # 볼
index = 0 # 플레이어가 입력한 3자리 숫자의 인덱스
secret_number = random.sample(range(1,10),3) # 3자리 비밀 숫자
player_number = input("추측한 숫자를 입력하세요 >> ")
print(secret_number)
for number in secret_number :
if int(player_number[index]) == number : # 비밀 숫자와 플레이어가 입력한 숫자 비교 (스트라이크)
strike = strike + 1
elif int(player_number[index]) in secret_number : # in 연산자를 이용하여 비밀 숫자가 있는지 비교 (볼)
ball = ball + 1
index = index + 1 # 인덱스 증가
print(strike, "스트라이크", " / ", ball, "볼")
추측한 숫자를 입력하세요 >> 123
[9, 6, 7]
0 스트라이크 / 0 볼
3. 숫자 야구 게임 소스코드
import random
game_count = 0 # 게임 회수를 카운트
strike = 0 # 스트라이크
ball = 0 # 볼
index = 0 # 플레이어가 입력한 3자리 숫자의 인덱스
secret_number = random.sample(range(1,10),3) # 3자리 비밀 숫자
print(" >> 숫자 야구 게임 << ")
#print(secret_number)
while game_count < 10 :
strike, ball, index = 0, 0, 0
player_number = input("추측한 숫자를 입력하세요 >> ")
for number in secret_number :
if int(player_number[index]) == number : # 비밀 숫자와 플레이어가 입력한 숫자 비교 (스트라이크)
strike = strike + 1
elif int(player_number[index]) in secret_number : # in 연산자를 이용하여 비밀 숫자가 있는지 비교 (볼)
ball = ball + 1
index = index + 1 # 인덱스 증가
print(strike, "스트라이크", " / ", ball, "볼")
game_count = game_count + 1
if strike == 3 :
print("축하합니다.", game_count, "번만에 맞췄습니다.")
break
35
if game_count == 10 : print("게임 종료")
>> 숫자 야구 게임 <<
추측한 숫자를 입력하세요 >> 123
0 스트라이크 / 1 볼
추측한 숫자를 입력하세요 >> 456
0 스트라이크 / 1 볼
추측한 숫자를 입력하세요 >> 789
0 스트라이크 / 1 볼
추측한 숫자를 입력하세요 >> 234
0 스트라이크 / 0 볼
추측한 숫자를 입력하세요 >> 516
2 스트라이크 / 0 볼
추측한 숫자를 입력하세요 >> 517
3 스트라이크 / 0 볼
축하합니다. 6 번만에 맞췄습니다.
4. 추가로 생각해보기
- 플레이어가 입력한 값이 숫자가 아니거나 똑같은 숫자를 입력하는 경우
- 플레이어가 입력한 값의 숫자가 3자리가 아닌 경우와 숫자와 숫자 사이에 공백이 입력된 경우
- 게임이 종료되면 다시 한번 게임을 할 것인지? 물어보고 시작하거나 종료할 수 있도록 수정
- 소스코드를 함수로 만들어서 간결하게 만들기
import random
def player_input() :
while True :
player_number = input(">>추측한 숫자를 입력하세요 : ")
player_number = ''.join(dict.fromkeys(player_number)) # 똑같은 숫자 입력시 중복 제거
if player_number.isnumeric() and len(player_number) == 3 :
return player_number
else :
print("---------------------------------------")
print("| 게임 방법 |")
print("---------------------------------------")
print("| 1 ~ 9사이의 서로 다른 숫자를 입력 |")
print("| 3자리 모두 다른 숫자 값을 입력 |")
print("| 예) |")
print("| >>추측한 숫자를 입력하세요 : 123 |")
print("---------------------------------------")
continue
def game_check(player_number) :
strike, ball, index = 0, 0, 0
for number in secret_number :
if int(player_number[index]) == number :
strike += 1
elif int(player_number[index]) in secret_number :
ball += 1
index += 1
return strike, ball
def game_print() :
game_count = 0
while game_count < 10 :
number = player_input()
strike, ball = game_check(number)
print(strike, "스트라이크", " / ", ball, "볼")
game_count += 1
if strike == 3 :
print("축하합니다.")
print(game_count, "번만에 성공했습니다.")
break
while True :
secret_number = random.sample(range(1,10),3)
print(" #######################")
print(" >>> 야구 숫자 게임 <<< ")
print(" #######################")
game_print()
result = input("숫자 야구 게임을 다시 시작하시겠습니까?(y/n)")
if result == 'n' or result == 'N' :
print("게임을 종료합니다.")
break
elif result == 'y' or result == 'Y' :
continue
else :
print("잘못 입력했습니다.")
댓글남기기