我刚开始学习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)
答案 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是否选择了汽车,他必须选择另一种选择。所以他一直在继续挑选,而你的剧本中没有任何进一步的。