코딩테스트 연습

[파이썬] 숫자야구 게임 만들기

콩콩(๓° ˘ °๓)♡ 2023. 3. 23. 17:13

숫자야구란?

세자리 숫자를 제시하면 그 중 정답과 숫자,자릿수가 맞으면 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하지 않다.