三门问题 解析及代码验证

    有三扇关闭的门,其中两扇门的后面是空的,剩下一扇门后是一辆法拉利跑车。

640?wx_fmt=png

   当你选择一道门以后,暂时先不打开这扇门,接下来把剩下两扇门当中的一扇打开,是空门。

   给你重新选择的机会:可以坚持刚才选择的门,也可以换另一扇没有打开的门。

   如果你是游戏参与者,你怎样选择的获奖率更大?获奖率又是多少?

                                答案就是:换门,换门的中奖概率为2/3;如果不换,中奖概率为1/3

    首先明确两点:在三扇门中选取一道,中奖概率为1/3;在两扇门中选取一道,中奖概率为1/2。现在的问题是在三扇门中先选取一道,然后去掉剩下两道中的一道空门,接下来中奖的概率是多少?

    我们可以这样理解:假如我选择了1号门,中奖概率为1/3,那么不选择1号门的中奖概率为2/3(即2号门和3号门合并为一道大门,中奖概率为2/3),现在我们在大门中(2号门和3号门)中去掉一个空门。那么剩下的门中奖概率就等于2/3(即大门中奖概率为2/3,去掉一道空门只是改变大门大小,变为某个具体的门(2号或3号),不改变它的概率)。

    

     如何去验证以上推论?以抛硬币为例,通过大量重复试验来统计正反面概率。同理我们也可以通过多次试验来统计换门或不换门的中奖概率。

  1. 参与者随机在三道门中选取一道,系统随机选取中奖的门号(即参与者的选择以及系统选择均为随机)
  2. 去掉一个空门(主持人在已知参与者的门号以及中奖门号的前提下,去掉一个空门)
  3.  获取去掉一个空门后的中奖情况。
  4.  重复1-3的步骤,统计次数

    根据上述步骤,参考代码如下:


import random

#步骤说明:类似验证硬币的正反面的概率,通过多次的实验来验证统计去掉一个空门后不换门中奖的概率
#1:参与者随机在三道门中选取一道,系统随机选取中奖的门号(即参与者的选择以及系统选择均为随机)
#2:去掉一个空门(主持人在已知参与者的门号以及中奖门号的前提下,去掉一个空门)
#3:获取去掉一个空门后的中奖情况。
#4:重复1-3的步骤,统计次数
def three_door():
    #自选的门号
    a = random.randint(1, 3)
    #中奖的门号
    b = random.randint(1, 3)
    #去掉空门后,剩下的门的门号
    c = 0
    #去掉一个空门 (如果刚好选中,则随机去掉一个空门;不然剩下的门就等于中奖门号)
    if a == b:
        if a == 1:
            c = random.randint(1, 3)
        elif a == 3:
            c = random.randint(1, 3)
        else :
            c = random.randint(1, 3)
            if c == 2:
                c = 3
    else :
        c = b
    #去掉一个空门之后,中奖返回1,不中返回0
    if( a == b):
        return 1
    elif c == b:
        return 0

if __name__ == "__main__":
    #实验次数
    A = 0
    #中奖次数
    B = 0
    #不中次数
    C = 0
    #重复试验,统计次数
    while(A<10000):
        #去掉一个空门,不换门的中奖情况
        D = three_door()
        if D == 1:
            A+=1
            B+=1
        elif D == 0:
            A+=1
            C+=1
    print ("三门问题不换门胜率:{}".format(B/A) )
    print ("三门问题换门胜率:{}".format(C/A) )

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值