2017-06-13 105 views
1

我剛開始學習Python和我想的樂趣,看看我是否可以使蒙提霍爾問題的Python版本。當我使用1或2次迭代時,似乎一切都在小規模工作,但過去沒有任何工作。 for循環沒有完成我想要的迭代量。的Python沒有完成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) 
+0

嘗試增加打印語句在while循環。它是我看到的唯一的代碼塊。所以如果出於任何原因你的退出條件沒有得到滿足,它將永遠留在while循環中。 – reticentroot

+0

你不想爲此使用random.choice()。對於這個問題,知道選擇了哪些門非常重要,而不僅僅是門後面是什麼,所以使用random.randint(0,2)或random.randrange(len(門))來獲得實際的門指數。 – Cuagau

回答

1

問題不在於for循環,而在於while循環。

爲了讓你的while循環中斷,montychoice必須等於car和玩家的選擇。但是,如果玩家的選擇就是不car,但它的goat? while循環永遠不會中斷。

我想你想and,而不是or您while循環。這樣,如果任何一個條件都不符合,循環就會中斷。

+0

謝謝你解決了我的問題:) –

0

問題是這樣的循環

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

一旦玩家選擇了汽車,這是說蒙蒂是否挑選汽車或沒有汽車,他挑的另一種選擇。所以他一直在不停地挑選,而且你不會在劇本中有更多的選擇。