본문 바로가기
카테고리 없음

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

by juda 2023. 2. 23.
반응형

파이썬을 시작하시면 접하게 되는 숫자 야구게임 만들기! 처음 시작하면 굉장히 어렵게만 느껴졌던 Code지만, 오늘은 야구게임을 파이썬으로 구현하면서, 파이썬을 접하신 분들이 여러 함수들에 익숙해지는 시간이 되었으면 좋겠습니다.

 

숫자야구 게임 만들기

규칙 이해하기

1. 우선 컴퓨터가 랜덤으로 서로 다른 숫자 3개를 무작위로 뽑습니다. (2,3,5) or (4,5,6)이 예시입니다.

2. 사용자는 컴퓨터가 입력한 숫자를 볼 수 없습니다.

3. 사용자가 3자리 숫자와 위치가 모두 맞추면 승리와 동시에 게임이 종료됩니다.

4. 컴퓨터는 사용자가 입력한 숫자와 자리의 위치가 맞으면 스트라이크(S), 숫자만 맞으면 볼(B)입니다.

5. 숫자와 자리가 모두 맞지 않으면 아웃(OUT)이 도출됩니다.

 

예시) 컴퓨터가 생성한 숫자가 537인 경우

- 124 = 0 strike, 0 ball 어떠한 숫자도 맞지 않아 출력된 값입니다.

- 542 = 1 strike 0 ball, 5 숫자, 위치 동일 (1S) 이외 맞지 않아 출력된 값입니다.

- 578 = 1 strike 1 ball, 5 숫자, 위치 동일 (1S), 7 숫자 동일 (1B)로 출력된 값입니다.

- 537 = 4번 만에 정답

 

 

 

CODE 작성

1. 우선 컴퓨터가 Random 하게 값을 생성해야 합니다.

import random
num = str(random.randrange(100, 1000))

Ranom 모듈을 import 해줍니다. Random 모듈은 파이썬에 내장되어 있으니, 따로 설치 없이 바로 진행되실 텐데요. 혹시라도 Error가 발생한다면, 아래 Code를 실행해 보세요!

!pip install random

저는 난수를 str로 받아줬는데요, 이유는 str은 str[0], str[1]과 같이 Indexing이 가능해서 값을 비교하기에 유리하다고 생각했기 때문입니다. 여기서 random.randrange는 100~999까지의 숫자를 Random 하게 생성하겠다는 의미입니다.

 

2. 사용자 입력값을 받아줍니다.

count=0
while True:
    k = input()
    count+=1
    strike, ball = 0, 0

사용자가 몇 번 만에 답을 맞혔는지, 숫자를 세어주는 변수를 생성해 주고, 맞출 때까지 반복하는 While문을 작성합니다.

이후 input을 이용해 사용자에게 값을 입력받습니다. 이후 strike, ball을 0, 0으로 지정해 주는데, 이러한 이유는 처음 입력받은 값에서 값과 위치가 맞다면 strike 변수에 +1을 진행해야겠다는 로직을 생각했기 때문입니다. 만약 맞추지 못했을 경우 다시 While 문 처음으로 돌아와 다시 맞춰야 하기 때문에 strike, ball 변수는 초기화되어야겠죠?

 

3. 자리와 숫자가 동일하면 strike, 숫자만 동일하면 ball

    for i in range(len(num)):
        if k[i] == num[i]:
            strike += 1
        else:
            ball += num.count(k[i])

*현재 코드는 While문 안에 있기 때문에 간격이 존재하는 점 양해 부탁드립니다.

다음은 컴퓨터가 생성한 값과  사용자가 입력한 값이 strike에 해당되는지 확인하는 방법입니다. 처음 컴퓨터가 생성한 변수를 str type으로 받아준 이유가 여기서 나타납니다. 각 자리마다 비교할 수 있기 때문이죠. 만약 int type 그대로 받아줬다면, 다른 Logic을 만들어야 했겠죠?

 

4. 값을 맞췄다면, 게임 종료!

    if strike == 3:
        print("{0}번만에 정답".format(count))
        break

    print(f'{strike} strike {ball} ball\n')

strike가 3개라면 세 자리 모두 값과 위치가 동일한 것이니 승리한 것으로 보는 로직입니다. 몇 번 만에 정답을 맞혔는지 출력하고, 게임을 종료합니다.

 

전체 Code 확인

import random

num = str(random.randrange(100, 1000));
# print(num)

count=0
while True:
    k = input()
    count+=1
    strike, ball = 0, 0
    
    
    for i in range(len(num)):
        if k[i] == num[i]:
            strike += 1
        else:
            ball += num.count(k[i])

    if strike == 3:
        print("{0}번만에 정답".format(count))
        break

    print(f'{strike} strike {ball} ball\n')

오늘의 추억의 숫자 야구게임을 파이썬으로 구현해 보았는데요. Code 하나하나를 보실 때 왜 이러한 방식으로 작성했는지 고민하면서 보시는 게 실력이 빠르게 향상되는 지름길이 되겠습니다. 모두 고생하셨습니다.

반응형