2016-03-22 2 views
0

Я пытаюсь имитировать проблему Монти Холла, где кто-то выбирает дверь, и случайный удаляется - в конце концов, это должен быть один с машиной и один без, один из которых кто-то должен быть выбран. В то время как мне не нужно симулировать в настоящее время/спрашивать человека, использующего программу, какую дверь им хотелось бы, у меня возникают проблемы с настройкой вычислений. Когда я запускаю код, он выводит 0, где должно быть примерно 66%Вычисление Simon Hall Python

import random 

doors=[0,1,2] 
wins=0 

car=random.randint(0,2) 
player=random.randint(0,2) 

#This chooses the random door removed 
if player==car: 
    doors.remove.random.randint(0,2) 
else: 
    doors.remove(car) 
    doors.remove(player) 

for plays in range(100): 
    if car == player: 
     wins=wins+1 

print(wins) 
+6

'car' и' player' не меняются внутри цикла for. Вы сравниваете те же два числа 100 раз. – Blorgbeard

+0

Как изменить переменные внутри моего цикла? – Janet

+0

Поместите код, который изменит их в соответствии с оператором 'for' ... – kindall

ответ

2

Вы должны поместить свой код внутри цикла, чтобы фактически запустить его каждый раз. Вам также необходимо убедиться, что вы разрешаете только допустимые варианты во второй раз (они не могут выбрать удаленную дверь) и что вы только удаляете действующие двери (вы не можете удалить дверь с автомобилем или проигрывателем - выбранная дверь).

import random 

wins = 0 

for plays in range(100): 
    doors = [0,1,2] 
    car = random.choice(doors) 
    player = random.choice(doors) 

    # This chooses the random door removed 
    doors.remove(random.choice([d for d in doors if d != car and d != player])) 

    # Player chooses again (stay or switch) 
    player = random.choice(doors) 
    if player == car: 
     wins += 1 

print(wins) 

Но для целей проблемы Монти Холла вам даже не нужно отслеживать двери.

win_if_stay = 0 
win_if_switch = 0 
for i in range(100): 
    player = random.randint(0, 2) 
    car = random.randint(0, 2) 
    if player == car: 
     win_if_stay += 1 
    else: 
     win_if_switch += 1