작성
·
159
0
# v2: 안 보고 만들기 (23.11.21)
from random import randint
from os import system
answer = []
num = str(randint(0, 9))
for i in range(3):
while num in answer:
num = str(randint(0, 9))
answer.append(num)
strikes = 0
balls = 0
system('cls')
while strikes < 3:
user_input = str(input("3자리 숫자를 입력해 주세요."))
if len(user_input) != 3:
print("3자리 자연수를 입력해주세요.")
continue
if not user_input.isdigit():
print("문자 말고 숫자를 입력해주세요.")
continue
if user_input[0] == user_input[1] or user_input[1] == user_input[2] or user_input[0] == user_input[2]:
print("중복된 숫자 없이 입력해주세요.")
continue
strikes = 0
balls = 0
# 숫자 비교
for i in user_input:
for j in answer:
if i in answer and i == j:
strikes += 1
if i in answer and i != j:
balls += 1
if strikes != 3:
print(f"{strikes} 스트라이크, {balls} 볼")
else:
print("성공!")
37, 39에서 저는 i in answer를 써 봤는데요. 막 2 스트라이크 4 볼이 나오고 그런 현상이 생깁니다ㅠㅠ
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
난수 생성과 게임 로직 부분에 문제가 있는 것 같습니다. 우선, i in answer
부분 때문에 볼과 스트라이크의 카운트가 예상과 다르게 나올 수 있습니다. 답(answer)에 사용자가 입력한 숫자(i)가 있을 경우, 해당 숫자가 위치까지 정확히 일치하는지를 확인하여 스트라이크를 카운팅하고, 위치는 다르지만 숫자가 존재하는 경우에 볼을 카운팅해야 합니다. 코드를 수정하기 위해선 i
변수를 index로 활용하고, user_input
과 answer
의 각 자릿수를 비교하여 로직을 수정해야 할 것 같습니다. 또한 볼 카운팅 시 중복 카운트를 피하기 위해 이미 확인한 숫자에 대해서는 카운트를 하지 않도록 조건을 추가해야 합니다. 다음은 수정된 코드의 일부입니다:
# ...
while strikes < 3:
user_input = str(input("3자리 숫자를 입력해 주세요: "))
# ... 기존 조건 검사 ...
# 숫자 비교 로직 수정
strikes = 0
balls = 0
for i in range(3):
if user_input[i] == answer[i]:
strikes += 1
elif user_input[i] in answer:
balls += 1
if strikes != 3:
print(f"{strikes} 스트라이크, {balls} 볼")
else:
print("성공!")
break
이렇게 수정하면 각 자릿수별로 정확한 스트라이크와 볼을 계산할 수 있습니다. 도움이 되셨길 바랍니다!