这是一个猜数游戏,你要猜的是一个4位数字,可以是0开头,数字不重复。 你有10次机会,每次猜测会提示几A几B,A表示数字和位置都正确,B表示 数字正确位置不正确,输入exit或quit可中途退出游戏。 游戏当中有个彩蛋,设置一个特殊四位数,每次输入就会出现“生日快乐”图片。
这个游戏有一定的数学背景,有数学家证明了在合适的策略下平均猜对
所需次数的期望值大约是5.2次。你试试看?
源码如下:
# This is an example! # 引用random, PIL库 import random from PIL import Image # 判断猜测结果,返回'*A*B',A表示数字和位置都正确,B表示数字正确位置不正确 def check(answer, guess): A = 0 # 猜对数字和位置的个数 B = 0 # 猜对数字但位置错误的个数 for i, digit in enumerate(guess): if int(digit) == answer[i]: # digit是字符串guess的枚举,是字符型,answer是数值型列表 A += 1 elif int(digit) in answer: B += 1 return '{}A{}B'.format(A, B) def generate(): # 用0~9的列表生成随机数,取前4位作为答案 digits = list(range(10)) random.shuffle(digits) return digits[:4] def draw(): img = Image.open("birthday2.gif") img.show() img.close() # 主函数 def main(): print('这是一个猜数游戏,你要猜的是一个4位数字,可以是0开头,数字不重复。\n' '你有10次机会,每次猜测会提示几A几B,A表示数字和位置都正确,B表示' '数字正确位置不正确,输入exit或quit可中途退出游戏。') # 初始化和答案猜测次数 answer = generate() tries = 0 # 循环 10 次或者直到猜对 while tries < 10: # 读取用户输入 guess = input('请输入一个4位数字:') if guess == 'exit' or guess == 'quit': print('很遗憾,你没有在规定次数内猜对。答案是:',''.join(map(str, answer))) break # 输入exit或者quit可退出游戏 if len(guess) != 4 or len(set(guess)) != 4 or not guess.isdigit(): print('输入不合法,请重新输入!') continue if guess == "0529": draw() # 生日彩蛋! tries += 1 # 判断猜测结果并输出提示 result = check(answer, guess) print('第{}次猜测:{}'.format(tries, result)) if result == '4A0B': print('恭喜你猜对了!') print('按任意键继续...') input() answer = generate() tries = 0 continue if tries == 10: print('很遗憾,你没有在规定次数内猜对。答案是:',''.join(map(str, answer))) # ''.join将字符串用''连接,map将列表中每个元素变成字符串元素 print('按任意键继续...') input() answer = generate() tries = 0 continue main()