야구게임 만들어 놨는데 오류를 못찾겠습니다..
조회수 1100회
아래처럼 만들어 봤는데, 중복되는 숫자를 막는 첫 함수까지는 잘 돌아갑니다.
그런데 예를 들어 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
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력