模拟蒙蒂霍尔悖论游戏

实验报告

模拟蒙蒂霍尔悖论游戏

实验目的

(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

经验分享 程序员 微信小程序 职场和发展