숫자야구

hyo_d·2022년 9월 20일
0

숫자야구

요구조건

  • 프로그램이 시작되면 슷자야구 게임을 몇 자리 숫자로 할 건지 입력 받아 주세요
    • 3을 입력할 경우 해당 숫자야구 게임은 3자릿수로 진행, 최대 10자리
  • 첫 번째 입력을 받은 자릿수 만큼 후 파이썬으로 중복 없는 랜덤한 수를 생성해 주세요
  • 사용자가 숫자를 입력 했을 때 숫자야구 게임의 규칙에 맞게 ball / out count를 출력해 주세요
  • 사용자가 정답을 맞춘 경우 아래 항목들을 출력해 주세요
    • 사용자가 정답을 맞추기까지 입력 한 횟수
    • 사용자가 게임을 시작해서 정답을 맞추기까지 소요된 시간
    • 정답을 맞춘 시점의 날짜/시간
  • 게임을 진행하던 도중, “exit”을 입력할 경우 프로그램을 종료해 주세요

과제를 풀기 위한 도움닫기

1. 사용자의 입력을 받아 n개의 중복되지 않는 랜덤한 숫자를 생성한다.
2. 프로그램이 시작 된 시간을 기록한다.
3. 사용자의 입력을 받고, 입력을 받을 때마다 try count를 1씩 더해준다.
4. 사용자 입력 x와 랜덤하게 생성 된 y 두 숫자를 비교한다.
 4-a. x의 첫 번째 숫자가 y에 포함되어 있는지 확인한다.
  * 포함되어 있지 않다면 out count + 1
 4-b. x의 첫 번째 숫자가 y에 포함되어 있다면 x의 첫 번째 숫자와 y의 첫 번쨰 숫자가 일치하는지 확인한다.
  * 일치하는 경우 strike count + 1
  * 일치하지 않는 경우 ball count + 1
 4-c. 4-a ~ 4-b를 x의 모든 자릿수를 돌 때까지 반복한다.
5. 사용자가 exit을 입력하거나 정답을 맞출 때까지 3~4의 동작을 무한하게 반복한다.
6. 사용자의 입력이 1번에서 생성한 숫자와 일치 할 경우 필요한 정보를 출력하고 프로그램을 종료한다.
 6-a. try count를 출력한다.
 6-b. 프로그램이 종료 된 시간과 프로그램이 시작 된 시간의 차를 계산해 프로그램의 실행 시간을 출력한다.
 6-c. 게임이 종료 된 시점의 날짜와 시각을 출력한다.
import random
import time
from datetime import datetime

# CASE 1
"""
number_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(number_list)

random_numbers = number_list[0:length] # 0:5

print(random_numbers)
"""
# CASE 2
"""
number_list = [x for x in range(10)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

random_numbers = []

for _ in range(length):
    random_numbers.append(number_list.pop(random.randrange(0, len(number_list))))

print(random_numbers)
"""

# CASE 3
def main():
    length = int(input("자릿수를 입력해주세요 : "))
    random_numbers = set()

    while len(random_numbers) < length:
        random_numbers.add(random.randint(0, 9))

    random_numbers = list(random_numbers)
    random.shuffle(random_numbers)

    start_time = time.time()
    try_count = 0

    while True:
        input_number = input("값을 입력해주세요 (종료 - exit): ")
        if input_number == "exit":
            return
        
        try_count += 1
        out_count = 0

        ball_count = 0
        strike_count = 0

        for i, v in enumerate(input_number):
            v = int(v)
            if v not in random_numbers: # 포함돼있지 않은 경우
                out_count += 1
                
            else: # 포함돼 있는 경우
                if random_numbers[i] == v:
                    strike_count += 1
                else:
                    ball_count += 1
                    
        if strike_count == length:
            print("########################")
            print("정답입니다!!")
            print(f"소요 시간 : {time.time() - start_time:.2f}")
            print(f"클리어 일자 : {datetime.now()}")
            print(f"도전 횟수 : {try_count}")
            print("########################")
            return
        
        print(f"{ball_count}{strike_count}스트라이크 {out_count}아웃")

main()
profile
햇병아리

0개의 댓글