Python模拟蒙提霍尔问题:改变选择真能大幅提高获胜概率?
你已经开始编写一个经典的蒙提霍尔问题(Monty Hall Problem)的模拟程序。这个实验通过随机选择汽车和羊的位置,并观察玩家在保持初始选择或改变选择时获胜的概率来研究概率论。 以下是完整的代码实现: ```python import random def monty_hall_simulation(num_trials): win_stay = 0 win_switch = 0 for _ in range(num_trials): # 随机安排汽车和羊的位置(0,1,2代表三扇门) car_door = random.randint(0, 2) player_choice = random.randint(0, 2) # 主持人打开一扇有羊的门(不是玩家选的那扇,也不是汽车所在的那扇) open_door = None for door in [0, 1, 2]: if door != player_choice and door != car_door: open_door = door break # 玩家的两个可能选择:保持原选择或改变选择 stay_door = player_choice switch_door = None for door in [0, 1, 2]: if door != player_choice and door != open_door: switch_door = door break # 判断是否赢得奖品 if stay_door == car_door: win_stay += 1 if switch_door == car_door: win_switch += 1 return win_stay, win_switch # 运行模拟 num_trials = 10000 win_stay, win_switch = monty_hall_simulation(num_trials) print(f"保持原选择获胜次数: {win_stay}") print(f"改变选择获胜次数: {win_switch}") print(f"保持原选择获胜概率: {win_stay / num_trials:.4f}") print(f"改变选择获胜概率: {win_switch / num_trials:.4f}") ``` ### 解释: 1. **初始化计数器**:`win_stay` 和 `win_switch` 分别记录保持原选择和改变选择时的获胜次数。 2. **循环进行多次试验**:使用 `for _ in range(num_trials)` 进行多次模拟。 3. **随机分配汽车和羊的位置**:使用 `random.randint(0, 2)` 随机生成汽车所在的位置 `car_door` 和玩家的初始选择 `player_choice`。 4. **主持人打开一扇有羊的门**:遍历所有门,找到既不是玩家选择的门也不是汽车所在的门,并将其设为 `open_door`。 5. **计算两个可能的选择**:一个是保持原选择 `stay_door`,另一个是改变选择 `switch_door`。 6. **判断是否赢得奖品**:比较玩家的选择与汽车的位置,更新相应的计数器。 7. **输出结果**:打印出保持原选择和改变选择的获胜次数及概率。 通过运行这个模拟,你会发现改变选择获胜的概率显著高于保持原选择的概率,这验证了蒙提霍尔问题的结论。 ######[AI写代码神器 | 753点数解答 | 2024-11-27 19:14:10]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)458
- P1007:小核桃数组变换难题,Python代码揭秘最终平方和!(字节豆包 | 416点数解答 | 2026-02-07 18:24:18)39
- P1007小核桃数组变换难题:C++代码求解最终两数平方和! (字节豆包 | 651点数解答 | 2026-02-07 18:25:02)31
- 超详细:JDK安装及Windows系统环境变量设置全攻略 (阿里通义 | 376点数解答 | 2024-03-06 17:27:29)352
- Comfortable Cows问题:代码实现、解释与复杂度分析(字节豆包 | 956点数解答 | 2026-02-02 17:26:13)55
- 推销员阿明的螺丝街“疲劳之旅”:如何为不同X值积累最大疲劳值?(字节豆包 | 627点数解答 | 2026-02-04 21:39:36)24
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)414
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)405
- Java调用Python接口中文乱码?设置UTF - 8编码一招解决!(讯飞星火 | 263点数解答 | 2024-06-06 17:07:59)389
- 解决Java调用Python接口中文乱码问题:设置UTF - 8编码全攻略(讯飞星火 | 160点数解答 | 2024-06-06 17:18:39)414
- Java调用Python接口中文乱码问题:字符编码统一解决方案(讯飞星火 | 344点数解答 | 2024-06-06 17:19:55)526
- 解决Java调用Python接口时中文值乱码问题:设置字符编码为UTF-8(讯飞星火 | 264点数解答 | 2024-06-06 17:27:09)389