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
下一篇:
css颜色渐变到透明怎么写