【问题标题】:beginner python: monty hall & counter output初学者python:monty hall & counter 输出
【发布时间】:2017-05-22 19:13:18
【问题描述】:

我正在尝试计算一个改变门选择的人在 10,000 次迭代中可能获胜(获得汽车)的次数。我不确定我的范围或计数器的格式是否错误(或两者都有)。在我尝试打印 counter 之前,代码似乎一直在工作——这导致了一个 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

【问题讨论】:

  • 有些事情没有意义。例如,persons_choice1 只能是山羊或汽车,无论哪种方式,您都将 monty_choice 设置为山羊。
  • 您在每次迭代时将计数器重置为 0,在循环之前只执行一次。

标签: python counter


【解决方案1】:

您的范围格式正确。你是对的,你的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 时付出了一些努力,但它目前总是“山羊”,但是您无论如何都不会使用 monty_choice,所以它可能没关系。

你在下一个if 块中的逻辑也是有问题的:如果persons_choice1 是汽车,那么门3 肯定是山羊。但是如果人们的选择是山羊,而他们没有选择的已经是汽车,会发生什么?在这种情况下,您可以在car 获得两次机会。此外,您的最终 if 语句只会在该人没有选择 doornumber3 选择并赢得汽车时增加您的计数器。我不确定这是否是您的意图。

【讨论】:

    猜你喜欢
    • 2018-08-03
    • 2015-02-12
    • 2013-06-28
    • 2014-11-18
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    相关资源
    最近更新 更多