我试图计算改变门选择的人在10,000次迭代中可能获胜(获得车辆)的次数。我不确定我的范围或计数器是否格式不正确(或两者都有)。代码似乎工作,直到我试图打印计数器 - 这导致了一个1的列表。
for i in range (10000):
doors = ["goat"] + ["goat"] + ["car"]
rn.shuffle(doors)
persons_choice = rn.randint(0,2)
persons_choice1 = str(doors[persons_choice])
if persons_choice1 == "goat":
monty_choice = "goat"
elif persons_choice1 == "car":
monty_choice = "goat"
if persons_choice1 == "car":
doornumber3 = "goat"
elif persons_choice1 == "goat":
doornumber3 = "car"
final_options = [persons_choice1] + [doornumber3]
rn.shuffle(final_options)
final_choice = rn.randint(0,1)
thefinal_choice = str(final_options[final_choice])
counter = 0
if thefinal_choice == "car":
if str(persons_choice1) != str(thefinal_choice):
counter += 1
print counter
答案 0 :(得分:2)
您的范围格式正确。你的counter
就是问题,你是对的。
正如您所知,for
循环每次都在循环中运行所有在for
语句下缩进的代码。您将计数器初始化为0 in 循环,因此它将打印的唯一时间,它将初始化为0,然后使用行counter += 1
向其添加1。您应该将初始化和答案都放在循环中。这是一个例子,使用您发布的代码:
counter = 0
for i in range (10000):
doors = ["goat"] + ["goat"] + ["car"]
rn.shuffle(doors)
persons_choice = rn.randint(0,2)
persons_choice1 = str(doors[persons_choice])
if persons_choice1 == "goat":
monty_choice = "goat"
elif persons_choice1 == "car":
monty_choice = "goat"
if persons_choice1 == "car":
doornumber3 = "goat"
elif persons_choice1 == "goat":
doornumber3 = "car"
final_options = [persons_choice1] + [doornumber3]
rn.shuffle(final_options)
final_choice = rn.randint(0,1)
thefinal_choice = str(final_options[final_choice])
if thefinal_choice == "car":
if str(persons_choice1) != str(thefinal_choice):
counter += 1
print counter
注意,此代码仍有其他问题。你付出了一些努力来计算monty_choice
,但它现在总是"山羊",但是你不管怎样你都不会使用monty_choice
,所以它可能没有'}无所谓。
你在下一个if
区块的逻辑也是有问题的:如果persons_choice1是汽车,那么3号门肯定是山羊。但是,如果人们的选择是山羊,而他们没有采取的选择已经是汽车,会发生什么?在这种情况下,您最终可能有car
两次机会。此外,你的最终if声明只是在这个人没有采取doornumber3选择并赢得赛车时增加你的计数器。我不确定这是不是你的意图。