Python3脚本没有产生预期的结果
问题描述:
我已经做了一个Python脚本来测试Monty Hall Problem 我的问题是,代码似乎输出30%的胜利和60%的损失时,它应该做的相反。Python3脚本没有产生预期的结果
from random import randint
wins = 0
losses = 0
for i in range(1000):
correctDoor = randint(1, 3)
guessDoor = randint(1, 3)
while True:
newGuessDoor = randint(1, 3)
if newGuessDoor != guessDoor:
break
elif newGuessDoor == guessDoor:
pass
if newGuessDoor == correctDoor:
wins = wins+1
else:
losses = losses+1
print('Wins = ' + str(wins) + '\nLosses = ' + str(losses) + '')
我觉得我错过了明显的东西。 任何帮助将不胜感激。
答
这实际上并没有正确实施Monty Hall问题。当初始猜测不正确时,另一个不正确的门在被提供切换之前被揭示,因此它是确定性选项。当最初的猜测是正确的时候,其他错误的门随机显示。
在你的实现中,在初始猜测之后,你不会得到任何额外的信息 - 你只是随机选择第二扇门,这与第一扇门不一样。
这里是你如何执行正确的方法的例子:
In [168]: from random import randint, choice
...: wins = 0
...: losses = 0
...: for i in range(1000):
...: correctDoor = randint(1, 3)
...: guessDoor = randint(1, 3)
...: if guessDoor != correctDoor:
...: newGuessDoor = correctDoor
...: else:
...: newGuessDoor = choice([i for i in [1,2,3] if i != guessDoor])
...: if newGuessDoor == correctDoor:
...: wins = wins+1
...: else:
...: losses = losses+1
...: print('Wins = ' + str(wins) + '\nLosses = ' + str(losses) + '')
...:
Wins = 653
Losses = 347
+0
谢谢。我很久以前就批量创建了这个版本,并决定用Python重新创建它。我完全忘了设置一个移动门。 –
什么的缩写变量代表什么? – usr2564301
@RadLexus正确的门,猜测门,新的猜测门。我会更新我的代码,以便阅读。 –