以下描述来自百度百科: " d# P. d$ @0 W" a
三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机会率?如果严格按照上述的条件,即主持人清楚地知道,哪扇门后是羊,那么答案是会。换门的话,赢得汽车的机率是2/3。% x* i0 A" n$ k
: r' S6 S& ~) T# g
鄙人谈几句话:: v" Z1 M+ k; t' k3 f
很多人都认为改变选择之后是二选一的情况,认为赢得汽车的概率是1/2,包括伟大的数学家鄂尔多斯都这样认为。但是我们要用事实来证明,如果真实做这个实验,会消耗太多资源,下面由鄙人用计算机编程来模拟这个情形。源码公开,如果有大神觉得不妥,欢迎指正。3 {. m# J; g* B' B' i# @1 U. x! c( u
8 z. {9 P, G( k以下是鄙人的python模拟程序: / |1 A6 y. r& s4 Y+ ]
#Author : Naupio / J, Z+ g# A% C, s1 Rimport random as rd' D! R: T# f0 ?) H) f4 L% n# X
change = True K3 q* _# F# |! R
def moni(times=10000):, C7 R/ p0 x3 x7 Z4 b& L
counts = 0.09 d! X e( ?7 H
for i in range(times): 8 P0 N- D+ o5 T) X# Y rightaim = int(rd.random()*3) #汽车所在的门$ E8 r; e9 q. c
guss = int(rd.random()*3) #第一次猜的门 8 a8 Z& I" w& L2 M aim=[0,1,2] #初始化三个门 1 t c3 N3 ~2 v 7 J/ \. w* y& _, d #找出要主持人打开的门 % p; t9 w- w/ O$ \7 D
for j in aim: e; @4 J: H/ s* U
if (j!=guss and j!=rightaim): 5 [. C! Y8 D- `* ^: c openaim = j + h4 i( H1 R3 x/ s# p( p% i break) ?% R4 D2 q3 ?3 G; v) g1 u; i
) B0 h$ l. R& c# K" S% Q* F #找出另一个门 . |& @' G( E7 l
for j in aim: " W o9 k8 F3 C8 U- o0 Y if (j!=guss and j!=openaim):- E6 t( V2 o( _, W+ Z
otheraim =j Y' Q) p2 E }2 w; v9 a: u& [( F break$ B- r1 B/ n3 B+ o* g5 f+ A" D
; ~' c8 K/ g. v$ a! c6 t: B/ U3 R! H$ q/ R& k
#改变选择 7 K" U9 l5 p7 S. i/ u
if change: # ~6 O) `' D, F% s5 w guss = otheraim 2 K8 N! `8 M9 i. g4 h* D- P " Y+ [3 I* z( S7 i5 r. F) [
#改变选择之后猜中汽车的次数统计 3 l4 d& e" D1 f+ T1 h& S
if guss==rightaim: 9 B% y/ Q' {+ ~ P5 h+ r0 s3 O+ m c counts+=16 @+ H5 I* |) R" N7 R, ~- i% i
2 _( S( G+ y7 O$ m8 m0 R
#返回改变选择之后猜中汽车的概率 % R; N' o7 @, r* P0 g+ R3 h3 ]
return counts/times/ i0 ~9 f2 t- X. w
print "改变选择之后的模拟一千次结果是:",moni(1000)' q) b2 R( j5 ~# A B5 j$ E& P
print "改变选择之后的模拟一万次结果是:",moni(10000) & W8 B% }$ F5 o! w. k; tprint "改变选择之后的模拟十万次结果是:",moni(100000) / @2 s! k a/ e; H; U7 A: B {print "改变选择之后的模拟一百万次结果是:",moni(1000000)! k- U+ `7 G0 S
print "改变选择之后的模拟一千万次结果是:",moni(10000000) % W+ B# I4 d4 y2 n* z
q3 O: j: W, S" K% I以下是模拟效果截图: & b" c' v9 s9 B* I ! d `; }7 @7 q; ]/ @