본문 바로가기
Python

17. 파이썬 - 숫자야구게임 만들기

by 새싹_v 2022. 9. 19.
728x90


 

 

숫자야구 게임

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

해보기!

import random
import time
from datetime import datetime, timedelta

def main():
    length = int(input('길이를 정해주세요 : '))

    random_numbers = set()  #중복값을 없애기 위해서 set()사용

    while len(random_numbers) < length: #random_numbers의 길이가 length보다 작다면 True
        random_numbers.add(random.randint(0,9)) #random_numbers에 0~9까지 랜덤한 숫자 넣기 set일땐 add를쓰고 list일땐 append를사용

    random_numbers = list(random_numbers) # random_numbers를 리스트에 넣어줌
    random.shuffle(random_numbers)  #random_numbers shuffle를 사용해서 섞음
    print(random_numbers)

    start_time = time.time()   #프로그램 시작시간 기록
    try_count = 0   #몇번시도했는지 count


    while True:
        input_number = input('값을 입력하세요. 취소는 exit입력 : ')
        if input_number == 'exit':  # 만약 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: #만약 v가 random_numbers에 포함되지 않았을 경우
                out_count += 1
            
            else: #포함이 돼 있는 경우
                if random_numbers[i] == v: #random_numbers와 사용자입력값 v가 같은경우
                    strike_count += 1
                else:
                    ball_count += 1
            
        if strike_count == length:  #strike_count 와 length의 길이가 같다면 종료!
            print('--------------------------------')
            print('정답입니다!')
            print(f'소요 시간 : {time.time() - start_time:.2f}초')
            now = datetime.now()
            print('맞춘 시점 날짜/시간 : ',now.strftime('%Y년 %m월 %d일 %H시 %M분 %S초'))
            print(f'도전 횟수 : {try_count}')
            print('--------------------------------')
            return
        print(f'{ball_count}볼 {strike_count}스트라이크 {out_count}아웃카운트')
        
main()
728x90

댓글