Python3脚本未生成预期结果

2024-10-06 10:20:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个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) + '')

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


Tags: 代码from脚本if事情problemrandintlosses
1条回答
网友
1楼 · 发布于 2024-10-06 10:20:24

这实际上并没有正确地实现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

相关问题 更多 >