2016-11-03 114 views
2

我已经做了一个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) + '') 

我觉得我错过了明显的东西。 任何帮助将不胜感激。

+0

什么的缩写变量代表什么? – usr2564301

+2

@RadLexus正确的门,猜测门,新的猜测门。我会更新我的代码,以便阅读。 –

回答

4

这实际上并没有正确实施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重新创建它。我完全忘了设置一个移动门。 –

相关问题