模拟蒙蒂霍尔悖论游戏
实验报告
模拟蒙蒂霍尔悖论游戏
实验目的
(1)了解蒙蒂很尔悖论的内容和游戏规则。
(2)熟练运用字典方法和集合运算。
(3)熟练运用异常处理结构,防止用户非法输人。
(4)了解断言语句assert的用法。
(5)熟练运用for循环遍历序列中的元素。
(6)熟练运用while循环,并掌握退出循环的条件设计与实现。
(7)熟练运用异常处理结构,防止用户非法输入.
(8) 熟练掌握多函数定义与调用。
(9)养成时刻注意各级代码缩进级别的习惯。
实验内容
假设你正参加一个有奖游戏节目,前方有3道门可以选择,其中一个后面是汽车另外两个后面是山羊。你选择一个门,例如1号门,主持人当然知道每个门后面是什么且打开了另一个门,例如3号门,后面是一只山羊。这时,主持人会问你:“你想改选2好们吗?”,然后根据你的选择确定最终要打开的门,并确定你获得山羊(输)或者汽车(赢)。 编写程序,模拟上面的游戏。
相关参考资料
思维 链接: [纭昀芸yun] 断言语句assert的用法 链接:[张一鸣] 图片:
图片:
参考代码
相应代码如下
# 蒙蒂霍而悖论游戏 # 引入randrange函数随机生成数字 from random import randrange # 定义初始化门函数,在三个门中随机选择一个放汽车,使用字典存放 def init(): result={ i:"goat" for i in range(3)} r=randrange(3) result[r]=car return result # 模拟游戏的核心代码 def start(): # 初始化门 doors = init() while True: # 控制选择的第一个门数是0、1、2 try: firstDoorNum = int(input("choose a door:")) assert 0<=firstDoorNum<=2 break except: print("door number must be 0,1,2") # 主持人查看剩余两个门后情况 for door in doors.keys()-{ firstDoorNum}: if doors[door]=="goat": # 打开其中一个为山羊的门 print("goat" behind the door,door) # 获取第三个门号,让玩家选择 thirddoor=(doors.keys()-{ door,firstDoorNum}).pop() change = input(switch to {}?(y/n).format(thirddoor)) # 用于表示玩家最后选择的门号 finaldoornum = thirddoor if change==y else firstDoorNum if doors[finaldoornum] ==goat: return I win else: return you win # 循环进行游戏,直到用户不想继续为止 while True: print(=*30) print(start()) r=input(do you want to try once more?(y/n)) if r==n: break