인프런 커뮤니티 질문&답변

수뼈님의 프로필 이미지
수뼈

작성한 질문수

남박사의 파이썬 기초부터 실전 100% 활용

숫자 야구게임 만들기 (파이썬기초, 랜덤함수, 반복문, 조건문)

숫자야구 코드를 짜 봤는데 뭔가 이상합니다.

작성

·

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_inputanswer의 각 자릿수를 비교하여 로직을 수정해야 할 것 같습니다. 또한 볼 카운팅 시 중복 카운트를 피하기 위해 이미 확인한 숫자에 대해서는 카운트를 하지 않도록 조건을 추가해야 합니다. 다음은 수정된 코드의 일부입니다:

# ...

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

이렇게 수정하면 각 자릿수별로 정확한 스트라이크와 볼을 계산할 수 있습니다. 도움이 되셨길 바랍니다!

수뼈님의 프로필 이미지
수뼈

작성한 질문수

질문하기