import random
import time
from datetime import datetime, timedelta
print('게임을 시작하려면 3과 10사이의 자릿수를 입력해주세요.')
while True:
digit_number = input() ########## 자릿수 지정받기
if digit_number == 'exit':
print('게임을 종료합니다.')
quit()
else:
if int(digit_number) < 3:
print('3 이상의 값을 입력해주세요.')
elif int(digit_number) > 10:
print('10 이하의 값을 입력해주세요.')
elif int(digit_number) >= 3 and int(digit_number) <= 10: # 자릿수가 3~10의 값이면 while문 탈출
break
digit_number = int(digit_number) ########## 랜덤 숫자(정답) 생성
random_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 중복 없는 리스트 생성
random.shuffle(random_list) # 위의 리스트를 랜덤 섞기
correct = random_list[:digit_number] # 중복 없는 기존 리스트를 랜덤으로 섞은 결과를 지정된 자릿수(digit_number)만큼 가져옴 -> 랜덤 정답안 완성
print(f"게임 문제가 준비되었습니다. {digit_number} 자릿수의 숫자를 입력해주세요.")
start_time = time.time()
tries = 0 # 정답 시도 횟수
print(correct) # 정답 확인용
while True:
answer = input() ########## 사용자가 답변을 입력
tries += 1 # 답변을 입력할 때 마다 시도 횟수를 1회 추가한다.
if answer == 'exit':
print('게임을 종료합니다.')
quit()
else:
answer = list(map(int,answer)) # 사용자 답변을 정수로 변환하고 리스트로 만들어준다.
if len(answer) != len(correct): # 사용자 답변과 정답의 자릿수가 다를 때 안내문구 출력
print(f"입력에 실패했습니다. {digit_number} 자릿수의 숫자를 입력해주세요.")
else: ########## 정답 vs 답변 비교
if answer == correct: # 정답과 답변이 순서와 숫자 모두 같은 값이면 정답
end_time = time.time()
print(f"정답입니다. {datetime.now()} 기준, {end_time - start_time} 동안 {tries}번 시도하셨습니다.")
break
elif len(set(answer) & set(correct)) == 0: # 교집합의 길이가 0이라면
print('out입니다.')
else:
strike = 0
ball = 0
for i,ans in enumerate(answer): # 답변의 요소를 돌면서
if ans == correct[i]: # 정답의 i번째 숫자와 답변의 요소가 같은 값이면
strike += 1
elif ans in correct: # 정답 안에 답변의 요소가 있다면
ball += 1
print(f"{ball}ball, {strike}strike 입니다.")
(주의) 게임 테스트를 위해 정답 확인용 코드를 추가했습니다
'과제' 카테고리의 다른 글
[BAEKJOON] 문자열 - python (0) | 2022.09.13 |
---|---|
[파이썬 실시간 강의] 220913 과제3 (0) | 2022.09.13 |
[협업을 위한 Git 활용 기초] 1주차~3주차 과제 (0) | 2022.09.08 |
[파이썬 실시간 강의] 220906 과제1 (0) | 2022.09.06 |
[BAEKJOON] 반복문 - python (0) | 2022.09.05 |