본문 바로가기

과제

[파이썬 실시간 강의] 220913 과제2


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 입니다.")

 

 

게임 실행
자릿수 입력에 실패 했을 때
정답과 다른 자릿수의 답변을 입력 했을 때
게임 종료

(주의) 게임 테스트를 위해 정답 확인용 코드를 추가했습니다