我一直在尝试解决在Python的monty hall problem,才能在编码前进,这就是为什么我试图随机一切。问题是:我遇到了一些麻烦。正如你们大多数人可能知道的那样,monty问题应该表明,改变门的胜利率(66%)比停留在选定的门(33%)更高。由于某种奇怪的原因,虽然我的模拟显示这两种情况都有33%的胜利率,但我不确定为什么。蒙提霍尔模拟并不如预期运行
下面的代码:
from random import *
def doorPriceRandomizer():
door1 = randint(0,2) #If a door is defined 0, it has a price in it
door2 = randint(0,2) #If a door is defined either 1 or 2, it has a goat in it.
door3 = randint(0,2)
while door2 == door1:
door2 = randint(0,2)
while door3 == door2 or door3 == door1:
door3 = randint(0,2)
return door1,door2,door3 #This random placement generator seems to be working fine.
while True:
loopStart = 0
amountWin = 0
amountLose = 0
try:
loopEnd = int(input("How often would you like to run this simulation: "))
if loopEnd < 0:
raise ValueError
doorChangeUser = int(input("[0] = Do not change door; [1] = Change door: "))
if doorChangeUser not in range(0,2):
raise ValueError
except ValueError:
print("Invalid input. Try again.\n")
else:
while loopStart != loopEnd:
gameDoors = doorPriceRandomizer()
inputUser = randint(0,2)
if doorChangeUser == 0:
if gameDoors[inputUser] == 0:
amountWin += 1
loopStart += 1
else:
amountLose += 1
loopStart += 1
elif doorChangeUser == 1:
ChangeRandom = 0
while gameDoors[ChangeRandom] == gameDoors[inputUser]:
ChangeRandom = randint(0,2)
if gameDoors[ChangeRandom] == 0:
amountWin += 1
loopStart += 1
else:
amountLose += 1
loopStart += 1
print("Win amount: ",amountWin,"\tLose amount: ",amountLose)
我在做什么错?我非常感谢所有帮助!提前致谢!
欢迎来到SO:请参加[导览]并阅读[MCVE],以增加获得所需帮助的机会。您发布的代码块应遵循[MCVE]中的指导原则。 –
如果任何人的兴趣,我这样做,和我做游戏的功能,这样你就可以运行它吨次在一个循环中获得的可能性,并且你可以调用该函数不带参数的播放。如果你有一些空闲时间检查它,这将意味着很多我:https://github.com/NoahCristino/montyhall –