初学者蟒蛇:monty hall&反输出

时间:2017-05-22 19:13:18

标签: python 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

1 个答案:

答案 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选择并赢得赛车时增加你的计数器。我不确定这是不是你的意图。