案例介绍--《Python编程快速上手2》
在Pico Fermi Bagels这个逻辑推理游戏中,
你要根据线索猜出一个三位数。
游戏会根据你的猜测给出以下提示之一:如果你猜对一位数字但数字位置不对,则会提示“Pico”;
如果你同时猜对了一位数字及其位置,则会提示“Fermi”;
如果你猜测的数字及其位置都不对,则会提示“Bagels”。
你有10次猜数字机会。
案例完整代码
import random
NUM_DIGITS = 3 #猜测位数
MAX_GUESSES = 10 #猜测的机会
def main():
print('一些文字')
# 主循环
while True:
# 玩家所要猜测的数字
secretNum = getSecretNum()
print('你的机会:{}'.format(MAX_GUESSES)) #Mark format函数可以将括号中的字符串传入到前面的{}里
print('请猜一个数字')
numGuesses = 1
while numGuesses <= MAX_GUESSES:
guess = ''
# 在玩家输入正确数字前保持循环
while len(guess) != NUM_DIGITS or not guess.isdecimal(): #Mark isdecimal函数用于判断字符串是否只包含数字
guess = input('Guess#{}: '.format(numGuesses))
clue = getClue(guess, secretNum)
print(clue)
numGuesses += 1
if guess == secretNum:
break # 玩家猜对了数字,结束当前循环
print('想要再玩一次吗?<Y/N>')
if not input('>').lower().startswith('Y'):
break
print('感谢游玩')
def getSecretNum():
# 返回唯一一个长度为NUM_DIGITS且由数字组成的字符串
numbers = list('0123456789') # 创建数字0-9的列表
random.shuffle(numbers) # 将它们随机排列
secretNum = ''
for i in range(NUM_DIGITS):
secretNum += str(numbers[i])
return secretNum
def getClue(guess, secretNum):
# 返回一个由Pico, Fermi, Bagels组成的字符串,用于猜测一个三位数
if guess == secretNum:
return '你猜对了'
clues = []
for i in range(len(guess)):
if guess[i] == secretNum[i]:
# 正确数字位于正确的位置
clues.append('数字位置都正确')
elif guess[i] in secretNum:
clues.append('数字正确,位置不对')
if len(clues) == 0:
return '数字,位置都不对' # 没有正确的数字
else:
clues.sort()
return ''.join(clues)
# 程序运行入口
if __name__ == '__main__':
main()
知识点
format()函数
format函数可以将括号中的字符串传入到前面的{}里
print('你的机会:{}'.format(MAX_GUESSES))
isdecimal()函数
isdecimal函数用于判断字符串是否只包含数字,返回Bool值
while len(guess) != NUM_DIGITS or not guess.isdecimal():
函数链式调用
这段判断中连续调用了三个函数,
if not input('>').lower().startswith('Y'):
break
print('感谢游玩')
startswith()函数
这个函数保证了用户输入的字符串中只要有y就会返回Ture
list()函数
这个函数会拆分传入的字符串并拆分为列表,numbers = list('012')等同于number=['0','1','2']
numbers = list('0123456789')
shuffle()函数
shuffle()由random()调用,意为随机.重新排列
import random
# 创建一个包含数字的列表
numbers = [1, 2, 3, 4, 5]
# 输出原始列表
print("Original list:", numbers)
# 使用 shuffle() 函数打乱列表
random.shuffle(numbers)
# 输出打乱后的列表
print("Shuffled list:", numbers)
join()函数
功能类似字符串拼接,只要是可迭代对象都可以
# 使用空字符串作为分隔符连接列表中的元素
words = ['Hello', 'world']
sentence = ''.join(words)
print(sentence) # 输出:'Helloworld'
# 使用空格作为分隔符连接列表中的元素
words = ['Hello', 'world']
sentence = ' '.join(words)
print(sentence) # 输出:'Hello world'
# 使用逗号作为分隔符连接列表中的元素
fruits = ['apple', 'banana', 'cherry']
fruit_list = ', '.join(fruits)
print(fruit_list) # 输出:'apple, banana, cherry'
# 连接字符串列表
characters = ['P', 'y', 't', 'h', 'o', 'n']
word = ''.join(characters)
print(word) # 输出:'Python'
# 尝试连接非字符串元素会抛出TypeError
numbers = [1, 2, 3]
# result = ''.join(numbers) # 这会抛出 TypeError
# 如果需要连接非字符串元素,可以首先将它们转换为字符串
numbers = [1, 2, 3]
result = ''.join(str(num) for num in numbers)
print(result) # 输出:'123'
标签:数字,Python,Bagels,secretNum,字符串,Pico,numbers,print,函数
From: https://www.cnblogs.com/shaoSaxon/p/18026334