蒙提霍尔游戏 python 模拟

简介: 本文使用蒙特卡罗方法验证蒙提霍尔游戏的结论。以下代码,本人原创!完整代码import random# 蒙提霍尔游戏def play_game(strategy='nonchange'): # 门牌编号 doors = [0,1,2] # 门后的奖品 gifts = ['goat', 'goat', 'car'] random.

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

以下代码,本人原创!

完整代码

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)

效果图

img_c5598aabf25c8255fec40d1589d6cbf6.jpg

目录
相关文章
|
12天前
|
存储 人工智能 算法
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
【Python】Yahtzee(掷骰子游戏)模拟程序【独一无二】
|
3月前
|
Python
使用Python模拟掷骰子游戏的技术指南
使用Python模拟掷骰子游戏的技术指南
48 0
|
9月前
|
数据采集 安全 小程序
如何用100行Python代码做出魔性声控游戏“八分音符酱”
有了这两样东西,其他就没什么特别的了。如果你用 cocos2d 开发过小游戏,剩下的就是一些常规工作。
|
9月前
|
人工智能 Python
Python 案例分析|21 点扑克牌游戏
本案例通过一个 21 点扑克牌游戏的设计和实现,帮助大家了解使用 Python 数据类型、控制流程和输入输出。
190 0
Python 案例分析|21 点扑克牌游戏
|
5月前
|
Python
77 python - 打飞机案例(优化代码)
77 python - 打飞机案例(优化代码)
25 0
|
9月前
|
人工智能 Python
用python模拟地球飞越火星
当一个飞行器飞过一个行星时,如果距离较近,就会受到行星的引力影响:靠近时会逐渐加速,远离时会逐渐减速。由于能量守恒,飞行器在进入和离开行星轨道时,与行星的相对速度大小没有变化
|
11月前
|
Python
Python模拟星空
Python模拟星空,你值得拥有!uu们一周不见啦,本周博主参考网上大佬们的星空,给大家带来了属于自己的星空,快来看看吧~
88 0
|
Python
Python代码游戏————星球大战
Python代码游戏————星球大战
315 0
Python代码游戏————星球大战
python小玩意——猜拳游戏
python小玩意——猜拳游戏
python小玩意——猜拳游戏
python小玩意——温度转换程序
python小玩意——温度转换程序