Python实现蒙提霍尔问题

为了体现专业,我在标题处用了一个高端大气上档次的英文名字来描述此问题,实际上这个问题有个土鳖名字,叫羊车问题或者三门问题。

像我这种博学多识的高科技人才,长这么大还是头次听说这么高深的问题。所以为了继续保持我的博学多识,我决定深入研究下。

最近的Python课上,老师提出用python还原三门问题。并探讨下“选择换门”还是“坚持选择”的概率性。

先用代码实现功能:

#coding:utf-8

importrandom

 

#构建三扇门

door1=1

door2=2

door3=3

 

#构建门后的车

car=random.randint(1,3)

 

#开挂。。提示车子在哪扇门后面

#print "car is in the door"+str(car)

 

#输入一扇门对应的数字

pick1=raw_input("please pick one of the doors: ")

pick1=int(pick1)

 

#按照原版的孟缇霍尔问题,第一次不论你选择对还是错,主持人都会按照套路出牌:“你确定吗?真的不改了吗?你他妈为何这么自信?!”

#if pick1 == car:

# print "you got the car!"

#不管你第一次选择对错,主持人都会给你打开一扇错误的门,然后让你二选一

#else:

while1:

kick1=random.randint(1,3)

kick1=int(kick1)

ifkick1!=car andkick1!=pick1:

print"now kick a sheep door:door"+str(kick1)+",please try again"

 

pick2=raw_input(": ")

pick2=int(pick2)

ifpick2==car:

print"you got the car finally!"

break

else:

print"you got wrong!"

break

此后我在这个程序的基础上做了修改,分别自动执行100遍两种选择,并记录结果。统计如下:

下载


太自信的结果,100次只猜中了29次,猜错71次。

下载 (1)


有些时候主持人还是靠谱的,中奖率66%。

过后的几天我把这个问题分享给公司同事,在没经过用心思考的情况下(其实没差,我相信他们用不用心都答不对的- -),他们几乎都觉得两种结果应该都是50%的猜中概率,只有数值策划,他想了一会说概率应该不一样。而且和我讲什么几率论(够了我根本听不懂。。

后来我用自己的理解,解释了一下为什么概率是1/3和2/3。不一定对,但是我觉得很容易理解:

A,B,C三个门,第一次任意选,选中的概率是1/3,这一步是毋庸置疑的。

A B C
1/3 1/3 1/3

如果我们选择A,中奖概率是1/3
假如我们把B和C看做一个整体‘BC’,那么‘BC’的中奖概率是2/3,主持人剔除一个错误的答案,前提是他不会剔除你选择的那个门,其实就是帮我们把B和C变成了一个整体,这样,A的概率还是1/3,转而选择‘BC’,则概率为2/3。

通过一步步的深入研究,我发现这个问题在一部based on a true story电影《决胜21点》中也有提及,说来惭愧,对于一个在棋牌游戏公司打工的人来说,我对这种数学概率论知识近乎残障。。所以我决定开始恶补数学,请问哪能下载《决胜21点》?

延伸阅读:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/953f989cab808de456bb7e216dfa1835.html