숫자야구 게임 구현해보기
혼자서 겨우 짜 본 완성 코드
import random
N = int(input("숫자야구 게임을 몇 자리 숫자로 할 지 입력하세요 : "))
random_num = random.sample([1, 2, 3, 4, 5, 6, 7, 8, 9], N)
cnt = 0
O = 0
print(random_num)
while True:
try:
answer_num = list(map(int, input("[exit를 입력하시면 게임이 종료됩니다] 숫자입력 : ").split()))
cnt += 1
S = 0
B = 0
for i, j in zip(random_num, answer_num): # S 스트라이크 값
if i == j:
S += 1
B = (N * 2) - len(list(set(random_num + answer_num))) # B 볼 값
if S == 0 and B == 0: # O 아웃 값
O += 1
print(f"S={S} B={(B - S)} O={O}")
if O == 3:
print("삼진아웃, 다시 시도해보세요")
break
if S == N:
print(f"정답을 맞추기까지 입력한 횟수 : {cnt}")
break
except:
print("게임이 종료되었습니다.")
break
random.sample() 랜덤 함수로 N개의 임의의 숫자를 리스트로 반환한다.
보통 숫자야구 게임은 3자리 숫자로 함
N = int(input("숫자야구 게임을 몇 자리 숫자로 할 지 입력하세요 : "))
random_num = random.sample([1, 2, 3, 4, 5, 6, 7, 8, 9], N)
무한루프 반복문으로 연속해서 숫자를 입력할 수 있고 try, except를 통해 실수로 잘못 입력하거나, 게임을 그만하고 싶을 때 게임이 종료되도록 만듬
while True:
try:
answer_num = list(map(int, input("[exit를 입력하시면 게임이 종료됩니다] 숫자입력 : ").split()))
except:
print("게임이 종료되었습니다.")
break
zip() 함수로 같은 길이의 리스트를 같은 위치에 있는 값끼리 묶어줄 수 있다.
ex) random_num = [1, 2, 3] / answer_num = [1, 3, 5] 일 경우 zip함수에 넣어주면
(1, 1)
(2, 3)
(3, 5)
의 값을 같게 된다.
묶어준 후 값이 같으면 스트라이크 + 1씩 반복
for i, j in zip(random_num, answer_num): # S 스트라이크 값
if i == j:
S += 1
볼 값은 값은 같지만 위치가 다른 경우 이기 때문에
2개의 리스트 값을 더한 후 set 함수로 중복값을 제거 한 후 다시 리스트로 변환해주고 리스트의 길이를 구하면 중복 값이 몇개 였는지 구할 수 있음
B = (N * 2) - len(list(set(random_num + answer_num))) # B 볼 값
아웃값은 스트라이크와 볼이 0인 경우에 +1
if S == 0 and B == 0: # O 아웃 값
O += 1
삼진 아웃일 경우 break를 통해 종료
if O == 3:
print("삼진아웃, 다시 시도해보세요")
break
스트라이크 개수가 N가 일치하면 종료 !
if S == N:
print(f"정답을 맞추기까지 입력한 횟수 : {cnt}")
break
'코딩공부 > Python' 카테고리의 다른 글
[python]class, method, instance, init, self / TIL_220913 (0) | 2022.09.13 |
---|---|
[python]로또 번호 생성 코드 작성하기 / TIL_220908 (0) | 2022.09.08 |
[python]함수 def / TIL_220906 (0) | 2022.09.06 |
[python]'int' object is not iterable / TIL_220905 (0) | 2022.09.05 |
python 반복문 while _ TIL 5일차 (0) | 2022.09.02 |
댓글