import random
# 获取一个长度为numDigits的字符串,该字符串由唯一的随机数字组成
def getSecretNum(numDigits):
numbers = list(range(10))
# 随机修改列表元素的顺序
random.shuffle(numbers)
secretNum = ''
for i in range(numDigits):
secretNum += str(numbers[i])
# 给用户提供关于pico, fermi, bagels的线索
def getClues(guess, secretNum):
if guess == secretNum:
return "You got it!"
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:
return 'Bagels'
clue.sort()
# 排序去除掉线索中和顺序相关的额外信息
return ''.join(clue)
# 如果num是仅由数字组成的字符串,则返回True。否则返回False。
def isOnlyDigits(num):
if num == '':
return False
for i in num:
if i not in '0 1 2 3 4 5 6 7 8 9'.split():
return False
return True
# 是否再玩一次
def playAgain():
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))
guess = input()
clue = getClues(guess, secretNum)
print(clue)
numGuesses += 1
if guess == secretNum:
break
if numGuesses > MAXGUESS:
print('You ran out of guesses. The answer was %s.'%(secretNum))
if not playAgain():
break