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
'Python' 카테고리의 다른 글
19. 파이썬 - lambda를 활용해서 정렬 문제 풀어보기 (0) | 2022.09.24 |
---|---|
18. 파이썬 - class 문제 풀이 (2) | 2022.09.21 |
16. 파이썬 - 함수(초깃값, 값지정), args, kwargs (0) | 2022.09.15 |
15. 파이썬 - lambda, map, filter, sort (0) | 2022.09.14 |
14. 파이썬 - 축약식(Comprehension) (0) | 2022.09.14 |
댓글