蒙特卡罗算法——三门问题

样例3:三门问题

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

分析:

主持人开门前VS主持人开门后

不换门获奖概率 = (1/3 * 100%)+(1/3 * 0%)+(1/3 * 0%)=1/3

换门获奖概率 = (1/3 * 0%)+(1/3 * 100%)+(1/3 * 100%) =2/3

代码:

import random

Without_changing_doors=
# 不换门获奖
Changing_doors= # 换门获奖
N = 100000  # 试验次数

# 不换门

for i in range(N):
    door_list = [
"1", "2", "3"# 三扇门的编号
   
car = random.choice(door_list)  # 汽车随机放在某扇门后
   
challenger = random.choice(door_list)  # 挑战者随机选择一扇门
   
if challenger == car:  # 不换门
       
Without_changing_doors = Without_changing_doors + 1

# 换门
for i in range(N):
    door_list = [
"1", "2", "3"]
    car = random.choice(door_list)
    challenger = random.choice(door_list)

   
# 主持人随机选择一扇门
   
host_list = ["1", "2", "3"]
    host_list.remove(challenger)
#不是挑战者选择的
   
if car in host_list:
        host_list.remove(car) 
#不是车所在的门
   
Rest = random.choice(host_list)

   
#挑战者换剩下的一扇门
   
door_list.remove(challenger)  # 去掉已经选过的门
   
door_list.remove(Rest)  # 去掉主持人排除的门
   
challenger = door_list[0# 剩下的门
   
if challenger == car:
       Changing_doors = Changing_doors +
1

print("不换门获奖概率:", Without_changing_doors/N)
print("换门获奖概率:", Changing_doors / N)

 

 

结论:换门会增加获奖的概率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值