样例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= 0 # 不换门获奖
Changing_doors= 0 # 换门获奖
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)
结论:换门会增加获奖的概率