Почему эта реализация Монти Холла дает вероятность быть 50%? - PullRequest
0 голосов
/ 10 мая 2018

Недавно я смотрел видео о проблеме Монти Холла и был заинтересован в том, что у соперника был шанс выиграть 2/3 при переключении. Поэтому я решил написать имитацию, чтобы увидеть это сам. Тем не менее, моя симуляция дала ответ 50%. Может ли кто-нибудь указать, почему? Примечание: количество дверей можно изменить, изменив значение num_of_doors.

from random import randint

num_of_doors = 3
num_of_simulations = 0
wins = 0

while True:
    num_of_simulations += 1
    doors = {k: "Donkey" for k in range(1, num_of_doors + 1)}
    car = randint(1, num_of_doors)
    doors[car] = "Car"
    choice = randint(1, num_of_doors)

    while len(doors) > 2:
        reveal = randint(1, num_of_doors)
        if reveal in doors:
            if reveal != choice and doors[reveal] != "Car":
                del doors[reveal]

    for k in doors:
        if k != choice:
            choice = k

    if doors[choice] == "Car":
        wins += 1
    print(100 * wins / num_of_simulations)

1 Ответ

0 голосов
/ 10 мая 2018

Вы нашли ответ, но я подумал, что я просто опубликую свой выстрел на этом:

from random import randint

def monty(n_doors):
    car = randint(0, n_doors - 1)
    first_choice = 0  # always pick 0 for convenience
    remaining_door = car if first_choice != car else 1  # 1 for convenience
    return remaining_door == car

total_runs = 10000
trials = [monty(3) for x in range(total_runs)]
print(sum(trials) / total_runs)

Дает:

0.6705
...