야구게임 만들어 놨는데 오류를 못찾겠습니다..

조회수 1097회

아래처럼 만들어 봤는데, 중복되는 숫자를 막는 첫 함수까지는 잘 돌아갑니다.

그런데 예를 들어 123입력을 했을 때, strike가 한개라도 있으면 반복해서 123을 여러번 입력하면 strike가 혼자서 늘어나서 게임이 종료되 버리네요... 마찬가지로 456을 입력했을 때, 0 strike 1ball이면, 반복해서 입력하면 ball이 계속 늘어나고 ,,

어디서 오류가 났는지 모르겠습니다, 여러분들은 아시겠나요??

import random

answer = random.sample(range(1,10),3)

tr_num = 0
st_num = 0
bl_num = 0


def same_num():
    if (num[0] == num[1] == num[2]) or (num[0] == num[1]) or (num[0] == num[2]) or (num[1] == num[2]):
        result = False

    else:
        result = True

    return result


def det_num(a, b):
    for i in range(0, 3):
        for j in range(0, 3):
            if (num[i] == str(answer[j]) and i == j):
                a += 1
            elif (num[i] == str(answer[j]) and i != j):
                b += 1
            else:
                continue

    return a, b


print("Game Start")
while (1):
    num = (input("Input Num"))
    same_num()

    if same_num() == False:
        print("숫자가 중복됩니다. 다시 입력해 주세요.")
        continue

    st_num, bl_num = det_num(st_num, bl_num)

    print(st_num, "strike", bl_num, "ball")
    tr_num += 1

    if st_num == 3:
        break

print(tr_num, "번 만에 성공하셨습니다.")
  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • "123입력을 했을 때, strike가 한개라도 있으면 반복해서 123을 여러번 입력하면" 이라는 뜻이 뭔지 모르겠어요.

    구체적으로 예를 들어주실 수 있나요? 예를 들어,

    123을 여러번 입력하면 ~가 출력되어야합니다. 그런데 제 코드에서는 ~가 나옵니다 와 같이요.

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • det_num 을 콜할 때 st_num 과 bl_num을 매개 변수를 넘기는데 이 두변수의 초기화가 while 문 밖에 있습니다. 그래서 프로그램이 처음 실행 될때 만 한번 초기화 하고 그 이후에는 이전 값이 저장된 채 매개변수로 넘겨지게 됩니다.

    그러나 함수 내부에서도 초기화가 없으므로 이전 결과에 기본으로 계속 더해 지게 되는 군요... 함수를 호출하기 전 아니면 함수 내부에서든 변수를 0으로 초기화 하면 될 것 같습니다...

    그리고 근본적으로 왜 함수에 저 두변수의 값을 넘겨주는지 모르겠습니다. 사실 매개변수가 없으도 det_num 함수는 전혀 문제 없이 작동 할 수 있는데요...

    암튼 잘 해결하세요....

    st_num, bl_num = det_num(st_num, bl_num)
    
    def det_num(a, b):
        for i in range(0, 3):
            for j in range(0, 3):
                if (num[i] == str(answer[j]) and i == j):
                    a += 1
                elif (num[i] == str(answer[j]) and i != j):
                    b += 1
                else:
                    continue
    
        return a, b
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)