숫자야구란?
세자리 숫자를 제시하면 그 중 정답과 숫자,자릿수가 맞으면 S, 숫자만 맞으면 B를 반환하여 정답인 세자리수를 유추해내는 게임이다. 코드의 흐름은 다음과 같다.
-> 코드를 실행하면 임의의 세자리 정수가 com에 배정
-> 입력값이 유효한지(세자리 정수인지) 판단하는 함수 실행하여 input칸에 입력받음
-> 잘못 입력했을 경우 다시 입력하도록 재귀 or 옳게 입력했을 경우 정답 판별하는 함수를 입력값 넣어서 호출
-> 정답이 아닐경우 S와 B의 개수를 알려주고 다시 input 할 수 있도록 유효성 판단 함수 호출 or 정답인경우 멘트 반환하고 종료
#유효성 판단한 값을 받아 정답 판별
def answer(user):
if com==int(user):
return '정답입니다.'
else:
s_cnt=0
b_cnt=0
for i_u,v_u in enumerate(user):
for i_c,v_c in enumerate(str(com)):
if v_u==v_c:
if i_u==i_c: s_cnt+=1
else: b_cnt+1
print(f'{s_cnt}S{b_cnt}B')
return game()
#입력값 유효성 판단
def game():
user=input('세자리 숫자 입력:')
if len(user)==3 and user.strip().isdigit():
return answer(user)
else:
print('입력값이 유효하지 않습니다.')
return game()
#게임 실행
import random
com=random.randrange(100,1000)
game()
point1 input으로 숫자를 입력받았을 때 str으로 입력되기 때문에 len()함수를 수행할 수 있다.
point2 isdigit()함수는 str 상태에서도 숫자인지 판별할 수 있다.
point3 range에 숫자를 넣어 for 반복문을 돌리려면 int를 str으로 변환해주어야 한다. int는 iterable하지 않다.
'코딩테스트 연습' 카테고리의 다른 글
[파이썬] SWEA: 백만장자 프로젝트 / 탐색 방향에 따른 비교 (0) | 2023.04.02 |
---|---|
[파이썬] 프린터 출력 / 이진탐색 (0) | 2023.03.26 |
[파이썬] 숫자에 1000단위 콤마 넣기(라이브러리 사용X) (0) | 2023.03.23 |
[파이썬] 프로그래머스: 최빈값 구하기 / defaultdict (0) | 2023.03.22 |
[파이썬] n진수 변환 / 재귀 (0) | 2023.03.22 |