# Bagles
# 'bagels' 숫자 3개 하나도 맞는 게 없음
# 'pico' 맞는 숫자는 있지만 자리가 틀리다.
# 'fermi' 맞는 숫자도 있고, 자리도 맞음
# Baseball 게임과 유사하다.
def getSecretNum(numDigits):
# Returns a string that is numDigits long, made up of unique random digits.
numbers = list(range(10)) # 0~9 까지의 값을 리스트로 저장
# random 모듈의 shuffle()함수 : 리스트의 레퍼런스를 파라미터로 줘야하며, 아이템의 순서를 무작위로 바꾼다.
# - 값을 따로 반환하지 않으며, 리스트 자체를 변경한다.
random.shuffle(numbers)
secretNum = ''
# 게임의 정답을 만드는 과정
for i in range(numDigits): # numDigits(3)만큼 암호를 만든다.-> 4로 변경하면 Baseball Game이다.
secretNum += str(numbers[i]) # 대입 연산자 : +=,-=,*=,/=
def getClues(guess, secretNum):
# Returns a string with the pico, fermi, bagels clues to the user.
if guess == secretNum:
clue = []
for i in range(len(guess)):
if guess[i] == secretNum[i]:
clue.append('Fermi')
elif guess[i] in secretNum:
clue.append('Pico')
if len(clue) == 0:
# 리스트의 sort()메소드 : 리스트를 알파벳과 숫자 순서로 정렬해준다.
# 반환형은 None반환이다.
# join() 문자열 메소드 : 리스트 인자를 합친 문자열을 반환한다.
# '@'.join(['x','y'] => 'x@y' 중간 중간 별로 @가 삽입된다.
def isOnlyDigits(num):
# Returns True if num is a string made up only of digits. Otherwise returns False.
if num == '':
for i in num:
if i not in '0 1 2 3 4 5 6 7 8 9'.split():
def playAgain():
# This function returns True if the player wants to play again, otherwise it returns False.
print('Do you want to play again? (yes or no)') return input().lower().startswith('y')
NUMDIGITS = 3
MAXGUESS = 10
print('I am thinking of a %s-digit number. Try to guess what it is.' % (NUMDIGITS)) print('Here are some clues:') print('When I say: That means:') print(' Pico One digit is correct but in the wrong position.') print(' Fermi One digit is correct and in the right position.') print(' Bagels No digit is correct.')
while True:
secretNum = getSecretNum(NUMDIGITS)
print('I have thought up a number. You have %s guesses to get it.' % (MAXGUESS))
numGuesses = 1
while numGuesses <= MAXGUESS:
guess = ''
while len(guess) != NUMDIGITS or not isOnlyDigits(guess):
print('Guess #%s: ' % (numGuesses)) # 문자열 삽입 기법(String interpolation)
# - 문자열 삽입을 쓰면 표시자(placeholder,마커) %s(변환 지시자(conversion specifier))를
# - 쓰고, 끝에 변수 이름을 쓴다. print('%s %s %s',%( , , ))
guess = input()
clue = getClues(guess, secretNum)
numGuesses += 1
if guess == secretNum:
break
if numGuesses > MAXGUESS:
print('You ran out of guesses. The answer was %s.' % (secretNum))
if not playAgain():
break