zoukankan      html  css  js  c++  java
  • 蒙提霍尔游戏 python 模拟

    本文使用蒙特卡罗方法验证蒙提霍尔游戏的结论。

    以下代码,本人原创!

    完整代码

    import random
    
    
    # 蒙提霍尔游戏
    def play_game(strategy='nonchange'):
        # 门牌编号
        doors = [0,1,2]
    
        # 门后的奖品
        gifts = ['goat', 'goat', 'car']
        random.shuffle(gifts)
    
        # 观众挑选一扇门(编号)
        viewer_choice = random.choice(doors)
    
        # 主持人从剩下的两扇门中,打开门后是是山羊的某一扇门(编号)
        host_open = random.choice(list(filter(lambda x:gifts[x]=='goat' and x!=viewer_choice, doors)))
        
        # 顺便,也标记剩下的一扇门(编号)
        viewer_lift = list(filter(lambda x:x!=viewer_choice and x!=host_open, doors))[0]
    
        # 观众根据策略获得的奖品
        viewer_gift = [gifts[viewer_choice], gifts[viewer_lift]][strategy=='change']
        
        # 根据策略成功与否,返回 1、0 (为方便计数)
        return [0, 1][viewer_gift=='car']
        
    
    # 游戏次数
    n = 10000
    
    
    # 蒙特卡罗方法,模拟 n 次游戏
    # 策略一:不改变选择
    p = sum((play_game('nonchange') for _ in range(n))) / n  # 频率 ≈ 概率
    print('nonchange:', p)
    
    
    # 蒙特卡罗方法,模拟 n 次游戏
    # 策略二:改变选择
    p = sum((play_game('change') for _ in range(n))) / n     # 频率 ≈ 概率
    print('change:', p)
    
    

    效果图

  • 相关阅读:
    Understanding Optional and Compulsory Parameters
    WebMail
    bool?
    第六章笔记 上
    菜鸟错题集
    vue的基本用法
    luogg_java学习_06_面向对象特性之封装和继承
    luogg_java学习_05_面向对象(方法和类)
    CSS3学习总结
    luogg_java学习_04_数组
  • 原文地址:https://www.cnblogs.com/hhh5460/p/6713994.html
Copyright © 2011-2022 走看看