最近,在网上看到一个有趣的三门问题,遂准备用python来娱乐下。下边是三门问题的介绍。
三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目 Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。
参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。
问题是:换另一扇门会否增加参赛者赢得汽车的机率?
要求:
通过程序模拟三门问题,并重复进行大量测试,统计换门与不换门的情况下,赢得汽车的概率。
下边是解答的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
total = 100000
a = b = c = d = e = f = 0.00
x = 0
from random import randint
list = [ "sheep1" , "sheep2" , "car" ]
tuple = ( "yes" , "no" )
while x! = total:
t = randint( 0 , 2 )
i = randint( 0 , 1 )
if list [t] = = "car" :
if tuple [i] = = "yes" :
a + = 1
else :
b + = 1
elif list [t] = = "sheep1" :
if tuple [i] = = "yes" :
c + = 1
else :
d + = 1
elif list [t] = = "sheep2" :
if tuple [i] = = "yes" :
e + = 1
else :
f + = 1
x + = 1
print "总次数为%d" % (total)
print "换%d" % (a + c + e), "不换%d" % (b + d + f)
print "不换赢的概率为%.2f%%" % (b / (c + b + e) * 100 )
print "换赢的概率为%.2f%%" % ((c + e) / (c + b + e) * 100 )
|
下图运行结果:

结论: 由此可以看出,换门赢的概率大约是不换赢的概率的2倍,所以换门能增加参赛者赢得汽车的概率。
本文转自 goldfishe 51CTO博客,原文链接:http://blog.51cto.com/jack88/1902857
网友评论