Python_蒙提霍尔问题的模拟

蒙提霍尔问题的解决:使用Python模拟

蒙提霍尔问题

蒙提霍尔问题(又称三门问题、山羊汽车问题),参赛者面前有三扇关闭着的门,其中一扇的后面是一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,主持人会开启剩下两扇门中的一扇,露出其中一只山羊。主持人其后会问参赛者要不要更换选择,选另一扇仍然关着的门。

更换选择还是不更换选择?

思路

从统计学角度将,更换选择得到汽车的概率更大,原因是:

    如果第一次选择正确,更换选择必定错误 如果第一次选择错误,更换选择必定正确 第一次选择:1/3概率正确,2/3概率不正确

也就是说,【第一次选择错误】的概率(2/3)是【更换选择后必定正确】的概率,所以【更换选择后必定正确】即【更换选择后得到汽车】的概率为2/3,重选更加有利。

Python模拟

编写代码,函数默认为1000次不更换选择。我选择了10000次,分别更换和不更换选择。

import random


(Copyright © https://blog..net/s_gy_zetrov. All Rights Reserved)


def choose(iteration = 1000, change = n):
    win_car = 0
    win_goat = 0
    prize_layout = random.randint(1, 3)
    if prize_layout == 1:
        door = [goat, goat, car]
    elif prize_layout == 2:
        door = [car, goat, goat]
    elif prize_layout == 3:
        door = [goat, car, goat]
    for i in range(1, iteration + 1):
        init_choice = random.randint(0, 2)
        if change == n:
            if door[init_choice] == goat:
                win_goat = win_goat + 1
            else:
                win_car = win_car + 1
        elif change == y:
            if door[init_choice] == goat:
                win_car = win_car + 1
            else:
                win_goat = win_goat + 1
    print("win_car: %d (%.2f%%)" % (win_car, win_car * 100 / iteration))
    print("win_goat: %d (%.2f%%)" % (win_goat, win_goat * 100 / iteration))

if __name__ == __main__:
    print("-------- NOT change scenario --------")
    choose(10000, n) # (Copyright © https://blog..net/s_gy_zetrov. All Rights Reserved)
    print("-------- change scenario --------")
    choose(10000, y)

输出:(Copyright © . All Rights Reserved)

-------- NOT change scenario --------
win_car: 3369 (33.69%)
win_goat: 6631 (66.31%)
-------- change scenario --------
win_car: 6683 (66.83%)
win_goat: 3317 (33.17%)

更换选择后有66.83%的概率赢得汽车,验证完毕。

peace out : )

(Copyright © . All Rights Reserved)


visitor tracker


经验分享 程序员 微信小程序 职场和发展