羊车门问题求解

原题是:参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。 
  问题是:换另一扇门会否增加参赛者赢得汽车的机会率?  


#羊车门问题求解
import random as rd

k=100#选择次数
i=0
m=0
for x in range(k):
    num = [1,1,0]
    rd.shuffle(num)#随机化门
    print("关闭前:"+str(num))
    human = rd.randint(0,2)#选择一个门
    print("随机选择第"+str(human+1)+"个门")
    
    #关闭一个羊门,赋值为9
    y=0
    while y <3:
        if y !=human and num[y] == 1:
            num[y]=9
            j=y
            y=3
        else:
            y+=1
    print("关闭一个门:"+str(num))
    
    #坚持选择
    if num[human] == 0:#中奖
        i+=1
        print("坚持选择中奖!")
    else:
        print("坚持选择未中奖!")
        
    #更换选择
    z=0
    while z <3:
        if z != human and z != j:
            print("重新第"+str(z+1)+"个门")
            if num[z]==0:
                m+=1
                print("重新选择中奖!")
            else:
                print("重新选择未中奖!")
            z=3
        else:
            z+=1

    print("\n")


rate_1=i/k
rate_2=m/k
print("坚持选择的中奖概率="+str(rate_1))
print("重新选择的中奖概率="+str(rate_2))




运行结果如下:

关闭前:[1, 1, 0]
随机选择第2个门
关闭一个门:[9, 1, 0]
坚持选择未中奖!
重新第3个门
重新选择中奖!


关闭前:[1, 0, 1]
随机选择第2个门
关闭一个门:[9, 0, 1]
坚持选择中奖!
重新第3个门
重新选择未中奖!

。。。。。。

 
关闭前:[1, 0, 1]
随机选择第1个门
关闭一个门:[1, 0, 9]
坚持选择未中奖!
重新第2个门
重新选择中奖!


关闭前:[1, 1, 0]
随机选择第1个门
关闭一个门:[1, 9, 0]
坚持选择未中奖!
重新第3个门
重新选择中奖!


关闭前:[1, 0, 1]
随机选择第2个门
关闭一个门:[9, 0, 1]
坚持选择中奖!
重新第3个门
重新选择未中奖!



第一次运行结果:
坚持选择的中奖概率=0.4
重新选择的中奖概率=0.6


第二次运行结果:
坚持选择的中奖概率=0.35
重新选择的中奖概率=0.65  


第三次运行结果:
坚持选择的中奖概率=0.41
重新选择的中奖概率=0.59
。。。





去除输出函数后源代码:

#羊车门问题求解
import random as rd
from time import clock

k=1000000#选择次数
i=0
m=0
clock()
for x in range(k):
    num = [1,1,0]
    rd.shuffle(num)#随机化门
    human = rd.randint(0,2)#选择一个门
    
    #关闭一个羊门,赋值为9
    y=0
    while y <3:
        if y !=human and num[y] == 1:
            num[y]=9
            j=y
            y=3
        else:
            y+=1
    
    #坚持选择
    if num[human] == 0:#中奖
        i+=1

    #更换选择
    z=0
    while z <3:
        if z != human and z != j:
            if num[z]==0:
                m+=1
            z=3
        else:
            z+=1

rate_1=i/k
rate_2=m/k
print("运行时间是:{:5.5}s".format(clock()))
print("坚持选择的中奖概率="+str(rate_1))
print("重新选择的中奖概率="+str(rate_2))


运行结果:
运行时间是:6.2272s
坚持选择的中奖概率=0.333442
重新选择的中奖概率=0.666558



总结:答案是重新选择概率是2/3.
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值