Python羊车门问题,用蒙特卡罗模拟法编程解决
时间: 2024-10-18 15:20:11 浏览: 35
Python中的"羊车门问题"通常指的是一个经典的概率问题,也称为“三门问题”或“蒙提霍尔问题”。这个问题是这样的:有三扇门,其中一扇门后面有一辆汽车,另外两扇门后面各有一只山羊。参与者先选择一扇门,然后主持人打开另一扇门露出一只山羊,接着询问参与者是否想要改变他们的选择。实际上,无论初始选择如何,参与者改变选择赢得汽车的概率都是更高的,因为初始选择错误的概率是2/3。
用Python来模拟这个问题,可以创建一个函数,随机生成每次实验的结果,并记录改变选择的情况。以下是简单的代码实现:
```python
import random
def monty_hall_simulation(num_trials):
# 初始化变量
car_behind_door = 0 # 汽车在0、1、2门中的位置
initial_choice = [random.randint(0, 2) for _ in range(num_trials)] # 参与者最初的选择
switch_choices = [] # 改变选择后的结果
# 模拟过程
for i in range(num_trials):
car_behind_door = random.randint(0, 2)
initial_choice_i = initial_choice[i]
# 主持人揭开非汽车门
if initial_choice_i == car_behind_door:
alternative = 0 if car_behind_door == 1 else 1
else:
alternative = (initial_choice_i + 2) % 3
# 记录参与者是否改变选择并计算最终结果
if initial_choice_i != alternative:
switch_choices.append(True)
else:
switch_choices.append(False)
return car_behind_door, initial_choice, switch_choices, sum(switch_choices) / len(switch_choices)
# 运行模拟并打印结果
num_trials = 100000
car_prob, initial_prob, switch_prob, win_rate = monty_hall_simulation(num_trials)
print(f"汽车在门{car_prob},初始选择正确率{initial_prob * 100:.2f}%,切换选择获胜率{win_rate * 100:.2f}%")
```
阅读全文