【发布时间】:2021-09-25 14:58:32
【问题描述】:
我在 Monty Hall 模拟中得到 0.5 的答案。
来自教科书:我们假设汽车是通过滚动一个三面骰子放在门后的,这使得所有三个选择的可能性相同。蒙蒂知道汽车在哪里,而且总是打开一扇门,后面有一只山羊。最后,我们假设如果 Monty 可以选择门(即参赛者选择了后面有汽车的门),他以 1/2 的概率选择每个门。玛丽莲显然希望她的读者会认为游戏是以这种方式进行的。
玛丽莲的答案是 0.66,我想模拟这个答案,但我得到了 0.5,不知道我的代码有什么问题。
n = 1000000
count = 0
for i in range(n):
doors = [1,2,3]
# the inital doors that monty can choose
monty_choose = [1,2,3]
# suppose the car is behind door 1
car = 1
# monty cannot choose the door that has car
monty_choose.remove(car)
ichoose = random.choice(doors)
if ichoose in monty_choose:
# monty cannot choose the door i select
monty_choose.remove(ichoose)
monty = random.choice(monty_choose)
else:
monty = random.choice(monty_choose)
# i cannot choose the door that monty chose
doors.remove(monty)
s = random.choice(doors)
if s == car:
count = count + 1
print(count/n)
【问题讨论】:
-
是什么让你认为答案应该是
0.66? -
代码很难理解 - 例如。你在循环内外定义
monty_choose -
我还建议将 cmets 放在自己的行上,而不是在最后添加。
-
来自《概率导论》一书中的蒙蒂霍尔问题。我们假设汽车是通过滚动一个三面骰子放在门后的,这使得所有三个选择的可能性相同。蒙蒂知道汽车在哪里,而且总是打开一扇门,后面有一只山羊。此外,我们假设如果 Monty 可以选择门(即,参赛者选择了后面有车的门),他选择每个门的概率为 1/2。这就是玛丽莲的想法,她的答案是 0.66(2/3)
标签: python logic simulation