Python으로 숫자 야구를 만드는 과정

돌고 돌고 돌아

by 곰백열두마리


숫자 야구: 3자리의 임의 숫자를 정한 뒤, 3자리 숫자를 불러서 결과를 확인한다. 그결과를 토대로 임의 숫자를 맞힌다.

Rule

- 사용하는 숫자는 0~9까지 정수

- 숫자가 맞지만 위치가 틀리면 Ball

- 숫자와 위치가 맞으면 Stirke

- 전부 틀리면 아웃

- 중복 숫자는 불가


매주 진행하고 있는 파이썬 기초 스터디에서 지난주 숙제로 숫자 아구를 만들어보기로 해서, 고민하고 만들어보는 과정을 남겨보고자 한다.


* 정답을 target / 입력하는 값을 number 변수에 저장한다.


1. target과 number 변수에 저장된 요소를 하나하나 비교해보자!

두 변수의 요소 하나하나를 다른 변수로 저장해서 비교하려 했으나..

strike 또는 ball 하나만 값이 올라가게끔 하는게 방법이 안떠올라서 포기

이건 아니다..


2. 일단 strike와 ball값 먼저 구해보자!

하나씩 비교해서 만드는 방법이라면, 왜 파이썬을 쓰겠는가?

나에게 필요한건, Strike와 Ball 값이니, 이 값을 각각 구하는 방법을 만들다.

for문으로 target와 number의 위치가 같은 요소가 같으면 strike 값이 올라간다.

ball은 target에 있는 요소가 number에도 포함되어 있다면 ball 값이 올라가지만, 이미 스트라이크 조건인 target과 number가 동일한 경우는 제외한다.

빛이 보인다!

3. Strike와 Ball 값 구하는 방법을 찾았으니, input을 써보자.

input의 조건은, 0~9까지의 정수 3개를 연속으로 입력한다. 단 중복된 값이나 숫자가 아닌 경우 오류 메세지를 뱉어내고 다시 입력 받는다.

input으로 3자리 숫자를 list로 받고, 요소를 int로 바꾼다.

len으로 개수를 확인해서 3자리인지 확인하고,

set으로 중복값을 확인한다.


그런데 그렇게 하니 아래 결과 값 처럼, strike와 ball 값이 0일때 출력되는 "아웃"과 같이 값이 나온다.

내가 예상한 값만 나오는게 아니라면, 버그다..

4. 최종 본

입력받는 number를 별도의 함수로 빼서, 숫자야구가 돌아가는듯 했지만, 문제는 str인 오류 메세지를 뱉어내면 뒤에 숫자 야구에서 에러가 발생한다는 점.

while문 안에, number에서 가져 온 값이 str(오류 메세지)일 경우,while문 처음으로 돌아가는 continue를 사용 함으로써, input문제 해결!

짧게 4단계로 만들어졌지만, 사실 한줄 한줄 확인하고 테스트 하면서 제작된 첫번째 숫자 야구

스크린샷 2022-09-25 13.55.16.png


5. 피드백

4명이서 스터디 하는데, 그중에 한명은 it회사에서 파이썬으로 현업을 하고 있는 튜터.

튜터로부터의 피드백은,

1. input받는 함수에 len(number)와 len(set(number))는 주복, len(set 만 사용해도 3자리 숫자와 중복까지 해결 가능함

2. Strike와 ball 값 구하는 for문 2개는 for문 하나로 합치면서, if / elif / else 로 아웃까지 해결 가능함

3.


0. 내 생각

구구단 말고, 처음으로 뭔가 만들어본 느낌.

숫자 야구 룰 자체가 생소 했기에 룰을 이해하는 것도 어려웠지만, strike와 ball값을 구하게 되니, 그 뒤는 잘풀린다. 그리고 입력 받을때 조건을 잘 따져서 하나씩 해결해가면 된다.

오래만에 엄청 재미 있는 책이나 재미 있는 게임을 만나서, 끝나가는게 아쉽게만 느껴지던 마음을 숫자야구를 통해서 느껴졌다.





keyword
작가의 이전글추석에 앱 스토어는 무엇을 할까?