用python代码验证“三门问题”


前言

刷视频看到三门问题,有点反直觉,通过分析想明白后,写程序验证一下

程序较简单,只用到python里random的randint()函数,该函数有两个参数a、b,作用是生成[a,b]之间的一个整数

一、三门问题是什么?

三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。

问题是:换另一扇门是否会增加参赛者赢得汽车的机率。如果严格按照上述的条件?

答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。

虽然该问题的答案在逻辑上并不自相矛盾,但十分违反直觉。这问题曾引起一阵热烈的讨论。

通过数学分析,我们知道交换后赢的概率更大,现在我们用程序结果来说明。

二、使用步骤

1.引入库

from  random import randint

2.程序主体

c1=c2=c3=c4=0         #c1,c2,c3,c4用于四种对应结果计数
count=0               #懒得慢慢输入了,用循环代替,count小于500前默认交换

for i in range(1000):         #做一千次实验
    choices = [1, 2, 3]       #有三个选择1,2,3,代表三道门
    temp=choices              #temp复制choices
    ans = randint(1, 3)       #生成随机数ans为正确答案

    #choice = int(input("输入你的选择(1/2/3):"))         
    choice=randint(1,3)         #随机生成choice表示我们的选择

    choice1=choice              #choice1表示第一次选择

    for i in choices:           #主持人为你排除选项
        if i!=ans and i!=choice:
            print("为你排除了:%d" % i)
            temp.remove(i)
            break

    #choice2=input("是否选择更换?输入’yes‘确定更换:")
    #if choice2=='yes':
    count+=1                    #count<500默认选择交换,>500默认不换
    if count<500:
        
        if temp[0]!=choice:
              choice=temp[0]
        else: choice=temp[1]
        print("你的选择由-->%d更改为-->%d"%(choice1,choice))


    if choice==ans:           #输出结果
        if choice==choice1:
            c1 += 1
            print("恭喜你,你坚持了正确的答案!")
        else:
            c2 += 1
            print("恭喜你,交换以后猜对了!")
    else:
        if choice==choice1:
            c3 += 1
            print("你猜错了,应该交换的!")
        else:
            c4 += 1
            print("原答案正确,换错了!")

print("\n四种情况统计如下:\n原来猜对了且坚持答案:%d\t原来没猜对交换后对了:%d"%(c1,c2))
print("原来没猜对且坚持答案:%d\t原来猜对但交换后错了:%d"%(c3,c4))

print("\n坚持答案对的概率为:{:.2%}\t坚持答案错的概率为:{:.2%}".format(c1/500,c3/500))
print("交换后答对的概率为:{:.2%}\t交换后答错的概率为:{:.2%}".format(c2/500,c4/500)) 

 三.运行结果

第一次

第二次

第三次

总结

分析三次运行结果,可以看出交换答对的概率约为2/3,不交换答对的概率约为1/3

从而成功验证了三门问题,不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值