python - 初学者 python : monty hall & counter output

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

最佳答案

您的范围格式正确。你是对的,你的计数器就是问题所在。

您可能知道,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 block 中的逻辑也有问题:如果persons_choice1是汽车,那么门3肯定是山羊。但是,如果人们的选择是山羊,而他们没有选择的已经是汽车了,会发生什么呢?在这种情况下,您最终可能有两次获得汽车的机会。另外,您的最终 if 语句只会在该人没有选择doornumber3 选择并赢得汽车时增加您的计数器。我不确定这是否是您的意图。

关于python - 初学者 python : monty hall & counter output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44120500/

相关文章:

python - 在一个子像素位置将一个图像补丁插入另一个图像

Python:如何生成按键?

python - Django:反转 'detail',参数为 '(' ',)' and keyword arguments ' {}' 未找到

python - 以预定间隔从摄像机视频中提取图像

python - 将文件从源复制到目标并附加目标文件名

用于大小数字的 Javascript 计数器

java - 在 Java 中将计数器重置为零?

java - 在java,android中使用循环计数器访问变量

javascript - setInterval 手动设置间隔时间

java - 将奖励按钮按下限制为每小时一次