题目5:编写程序,模拟蒙蒂霍尔悖论游戏。

蒙提霍尔悖论亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论、三门问题(Monty Hall problem)。

三门问题(Monty Hall problem),是一个源自博弈论的数学游戏问题,大致出自美国的电视游戏节目Let's Make a Deal。问题的名字来自该节目的主持人蒙提·霍尔(Monty Hall)。

游戏规则如下:

参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人会开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。

编写程序如下(烂的一匹,轻喷TAT):

import random
A = [1,0,0]
random.shuffle(A)
B = A
n = int(input("你选择几号门打开?"))-1
B[n] = 2
print("打开"+str(B.index(0)+1)+"门",end=',')
m = input("这个门里面的是一只山羊,你要更换你的选项吗?更换的话输入Y,不更换输入N。")
print(B)
if m == 'Y':
    A.pop(n)
    A.remove(0)
    C = A[0]
else:
    C = A[n]
print(C)
if C == 1:
    print("恭喜你获得一辆汽车!")
else:
    print("感谢参与,就差一点儿。")

这个程序有bug的比如遇到下面这种情况:

 你可以通过代码推理出来1号门里面是一辆汽车QAQ

于是就出现了下面这种百分百得汽车的bug。

但我是真的不知道该怎么修改了,才疏学浅,以后会了更高级的代码在来修它吧。

 最后玩个花的QAQ

代码放下面,我让计算机随机选一个,并且保持更换选项,并统计最后有多少此得到汽车

import random
mn = int(input())
MN = [ ]
for i in range(0,mn):
    A = [1, 0, 0]
    random.shuffle(A)
    B = A
    n = int(random.randint(1, 3)) - 1
    B[n] = 2
    m = "Y"
    if m == 'Y':
        A.pop(n)
        A.remove(0)
        C = A[0]
    else:
        C = A[n]
    if C == 1:
        MN.append(1)
    else:
        MN.append(0)
a = MN.count(1)
b = MN.count(0)
print(a,b)

 就让计算机浅浅地跑1亿次吧QAQ(计算机:**,垃圾代码浪费算力!)

结果如下:

 可以看出更换选项有更大概率获得汽车,大约是三分之二吧,这个问题我也不太懂QAQ

其次就是,后来我发现用count函数太慢了,还不如直接加快......

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值