三门问题的python代码实现~~~

最近不知为啥(可能是因为我一直在研究概率)被头条连推送了几次三门问题的视频,说实话有些博主根本就没有把问题讲清楚~~ 作为程序员,我想还是用代码来解决最有说服力~~~

分析过程(略),上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: 不知道三门问题的请自行百度~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

happybasic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值