最近,在网上看到一个有趣的三门问题,遂准备用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
|
#!/usr/bin/python
#coding:utf-8
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
)
# print list[t],tuple[i]
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