三门问题的python代码实现~~~
本文通过编程模拟验证了经典的三门问题。作者采用蒙特卡洛方法进行100万次实验,结果显示换门的获胜概率为66.62%,不换门则为33.38%。代码清晰地模拟了参赛者初始选择、主持人开门以及最终换门决策的全过程,用数据证实了换门策略的优越性。该实验为理解这个反直觉的概率问题提供了有力的实证支持。
·
最近不知为啥(可能是因为我一直在研究概率)被头条连推送了几次三门问题的视频,说实话有些博主根本就没有把问题讲清楚~~ 作为程序员,我想还是用代码来解决最有说服力~~~
分析过程(略),上code:
import random
def monty_hall_simulation(num_trials=1000000):
switch_wins = 0 # 换门获胜次数
stay_wins = 0 # 不换门获胜次数
for _ in range(num_trials):
# 随机生成奖品位置(0, 1, 2)
prize_door = random.randint(0, 2)
# 参赛者初始选择
initial_choice = random.randint(0, 2)
# 主持人剩余可选的门(无奖品且未被选的门)
remaining_doors = [door for door in [0, 1, 2] if door != initial_choice and door != prize_door]
# 如果参赛者开始选对了(剩余有2个门),主持人可随机开一扇
# 如果开始选错了(剩余只有1个门),主持人只能开这扇门
opened_door = random.choice(remaining_doors) if len(remaining_doors) > 1 else remaining_doors[0]
# 换门:选择既不是初始选择也不是主持人打开的门
final_choice_switch = [door for door in [0, 1, 2] if door != initial_choice and door != opened_door][0]
# 统计结果
if final_choice_switch == prize_door:
switch_wins += 1
#endif
if initial_choice == prize_door:
stay_wins += 1
#endif
#next
print(f" 模拟次数: {num_trials}")
print(f" 换门胜率: {switch_wins*100 / num_trials:.2f} %")
print(f"不换门胜率: {stay_wins*100 / num_trials:.2f} %")
#end def
# -----------------------------------------------------------------------------
# Main Program
# -----------------------------------------------------------------------------
if __name__ == '__main__':
# 运行模拟(默认10万次)
monty_hall_simulation()
运行结果如下:
模拟次数: 1000000
换门胜率: 66.62 %
不换门胜率: 33.38 %
ps: 不知道三门问题的请自行百度~
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)