蒙提霍尔悖论亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论、三门问题(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函数太慢了,还不如直接加快......