파이썬_실전 프로젝트

숫자 맞추기 게임 2 (스트라이크 볼 게임)

앞에서 만든 숫자 만들기 게임을 좀더 업그레이드 시켜 보겠습니다.

세자리 숫자를 랜덤으로 생성하고, 추측값을 입력받아서, 자리가 정확하게 같으면 스트라이크, 자리는 다르지만 숫자가 어쨌든 존재하면 볼 간단한 규칙입니다.

중복숫자를 처리하는 세부적인 룰까지 들어가면 복잡하니깐 일단 정답을 맞추는데 크게 무리가 없는선에서 위 두가지 룰만 적용시켜서 간단하게만 만들어보도록 하겠습니다.

1. 앞서 만든 코드 가져오기

앞서 만든 게임입니다. ->숫자만들기 게임1 참조

import random
number = random.randint(1,999)
found = False

while not found:
    guess = eval(input("input number :"))
    if guess == number:
        print("You got it")
        found = True
    elif guess > number:
        print("Guess lower!")
    else:
        print("Guess higher!")

 

2. 숫자를 문자로 바꾸로, 자릿수는 0으로 채우기.

각 자릿수를 비교해야 하므로, 문자가 처리하기 편합니다. 또 두자리나 한자리 입력시에도 왼쪽은 0으로 채워서, 문자로 처리하기 편하게 만들어 줍니다.

import random
number = str(random.randint(1,999)).zfill(3) #남는 자리를 0으로 채워줍니다.
print(number)  
found = False

while not found:
    guess = input("input number :").zfill(3) #입력한 숫자도 0으로 채워줍니다.
    print(guess)
    if guess == number:
        print("You got it")
        found = True
    elif guess > number:
        print("Guess lower!")
    else:
        print("Guess higher!")
733
input number :500
500
Guess higher!
input number :750
750
Guess lower!
input number :733
733
You got it
3. 스트라이크, 볼 판단

자리가 완전히 일치할경우, strike 변수에 1증가, 자리상관없이 있기만 하면, ball 변수에 1증가 시켰습니다. 정확하게 하려면, 스트라이크된 숫자는 볼에서 제외해야 하지만, 지금은 중복으로 카운트 되는데로 놔두겠습니다. 일단 문제를 푸는데는 크게 지장이 없으므로, 나중에 좀더 업그레이드를 시켜보도록 하죠.

import random
number = str(random.randint(1,999)).zfill(3)
#print(number)  
found = False

while not found:
    guess = input("input number :").zfill(3)
    print(guess)
    if guess == number:
        print("You got it")
        found = True
    else:                       # 여기서 부터 변경 부분.
        strike = 0
        ball = 0
        for i in range(3):
            if guess[i] == number[i]:
                strike += 1
            elif guess[i] in number:
                ball+=1
        print("strike:{} ball:{}".format(strike,ball))
input number :389
389
strike:0 ball:0
input number :256
256
strike:0 ball:1
input number :017
017
strike:1 ball:0
input number :467
467
strike:0 ball:0
input number :005
005
strike:1 ball:0
input number :022
022
strike:0 ball:0
input number :515
515
You got it

7번만에 맞췄네요;;

댓글

댓글 본문
작성자
비밀번호
버전 관리
노마드
현재 버전
선택 버전
graphittie 자세히 보기