Python没有完成循环

时间:2017-06-13 03:24:26

标签: python for-loop iteration

我刚开始学习python,我想知道我是否可以制作monty hall问题的python版本。当我使用1或2次迭代但过去没有任何工作时,一切似乎都在小规模工作。 for循环没有完成我想要的迭代次数。

import random

def problem(tests):

    wins = 0
    losses = 0
    doors = ["goat", "car", "goat"]

    for test in range(tests):
        #we shuffle the doors
        random.shuffle(doors)
        #the player picks a door
        choice = random.choice(doors)
        #monty chooses a door
        montychoice = random.choice(doors)
        while montychoice != 'car' or montychoice == choice:
            montychoice = random.choice(doors)

        #if the player's door is a car, he losses
        if choice == 'car':
            losses += 1
            print 'goat'
        elif choice == 'goat':
            wins += 1
            print 'car'

    print "Switching wins: %d" % wins
    print "Switching loses: %d" % losses

problem(100)

2 个答案:

答案 0 :(得分:1)

问题不在于for循环,而在于while循环。

为了让你的while循环中断,montychoice必须等于car和玩家的选择。但是如果玩家的选择不是car,而是goat呢? while循环永远不会破坏。

我认为你的while循环需要and而不是or。这样,如果不满足任何条件,则循环中断。

答案 1 :(得分:0)

问题在于这个循环

while montychoice != 'car' or montychoice == choice:
        montychoice = random.choice(doors)

一旦玩家选择了这辆车,这就说明了monty是否选择了汽车,他必须选择另一种选择。所以他一直在继续挑选,而你的剧本中没有任何进一步的。