初学者 Python:Monty Hall & Counter输出



我试图计算一个改变门选择的人在 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

您的范围格式正确。 你是对的,你的counter在哪里是问题所在。

如您所知,每次循环中,for循环都会运行在for语句下方缩进的所有代码。 您在循环将计数器初始化为 0,因此它唯一一次打印时,它将被初始化为 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 语句只是在人没有选择门号3 并赢得汽车时增加您的计数器。 我不确定这是否是你的意图。

最新更新