初学者 python:monty hall & counter 输出
beginner python: monty hall & counter output
我正在尝试计算一个人在 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 inside 循环,因此它唯一一次打印,它将被初始化为 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
上付出了一些努力,但它目前始终是 "goat",但是您无论如何都不使用 monty_choice
,所以它可能无关紧要。
你在下一个if
街区的逻辑也有问题:如果persons_choice1是汽车,那么3号门肯定是山羊。但是,如果人的选择是山羊,而他们没有选择的已经是汽车,会发生什么?在这种情况下,您最终有两次机会获得 car
。此外,您的最终 if 语句只会在该人未选择门号 3 并赢得汽车时增加您的计数器。我不确定这是不是你的意图。
我正在尝试计算一个人在 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 inside 循环,因此它唯一一次打印,它将被初始化为 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
上付出了一些努力,但它目前始终是 "goat",但是您无论如何都不使用 monty_choice
,所以它可能无关紧要。
你在下一个if
街区的逻辑也有问题:如果persons_choice1是汽车,那么3号门肯定是山羊。但是,如果人的选择是山羊,而他们没有选择的已经是汽车,会发生什么?在这种情况下,您最终有两次机会获得 car
。此外,您的最终 if 语句只会在该人未选择门号 3 并赢得汽车时增加您的计数器。我不确定这是不是你的意图。