模拟蒙蒂霍尔悖论游戏
实验报告
模拟蒙蒂霍尔悖论游戏
实验目的
(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
