【问题标题】:Python3 script not producing expected resultsPython3 脚本未产生预期结果
【发布时间】:2016-11-03 20:26:50
【问题描述】:

我制作了一个 Python 脚本来测试Monty Hall Problem 我的问题是,当它应该做相反的事情时,代码似乎输出了 30% 的胜利和 60% 的失败。

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) + '')

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

【问题讨论】:

  • 这些缩写变量代表什么?
  • @RadLexus 正确的门,猜测的门,新的猜测门。我将更新我的代码,使其更易于阅读。

标签: python python-3.x random


【解决方案1】:

这实际上并没有正确实施蒙蒂霍尔问题。当最初的猜测不正确时,另一个不正确的门会在被提供切换之前显示出来,因此这是一个确定性的选择。当最初的猜测正确时,会随机显示其他不正确的门之一。

在您的实施中,在最初的猜测之后,您没有得到任何额外的信息 - 您只是完全随机选择第二扇门,与您的第一扇门不同。

下面是一个示例,说明如何实现正确的方法:

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

【讨论】:

  • 谢谢。我很久以前批量制作了这个,并决定用 Python 重新创建它。我完全忘记设置移除门了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 2019-03-07
  • 1970-01-01
相关资源
最近更新 更多