Monty 4doors蟒蛇

问题描述

我正在研究一个程序,以查找在蒙蒂·霍尔(Monty Hall)问题中具有4个门的可能性,但是未打印更改选择的可能性。

Nullable q.birthdate

解决方法

最初发布的代码不清楚(可能是缩进问题,我不遵循代码逻辑)。

但是,任意数量的门的Monty Hall模拟如下。

代码

from random import choice

# Number of doors
N_doors = int(input("How many doors (>= 3? "))

wins_change = 0                    # number of wins when we change doors
wins_no_change = 0                 # number of wins without changing doors
doors = list(range(1,N_doors+1))  # doors as list [1,2,... N_doors]
N_Trials = 10000                   # number of times to run simulation
for K in range(1,N_Trials): 
    # Host randomly chooses a door for answer
    host_pick = choice(doors) 
    
    # Player randomly chooses a door for their answer
    player_pick = choice(doors)
    
    # Host picks a door to show
    # that's not host_pick or player_pick
    # i.e. door won't be host_pick or player_pick
    show = choice([i for i in doors if i != host_pick and i != player_pick])
    
    # Update win count if player doesn't change selection now that a door is shown
    if host_pick == player_pick:
      wins_no_change += 1

    # Player changes selection 
    # i.e. picks door that's not shown and wasn't their original pick
    player_pick = choice([i for i in doors if i != show and i != player_pick])

    # Player wins if player_pick equals host_pick
    if player_pick == host_pick:
      wins_change += 1
    
# show results
print(f'Probablity winning not changing selection {wins_no_change/N_Trials:.2%}')
print(f'Probablity winning after changing selection {wins_change/N_Trials:.2%}')

测试

测试3门

How many doors (assume >= 3)? 3
Probablity winning not changing selection 33.29%
Probablity winning after changing selection 66.70%

测试4门

How many doors? 4
Probablity winning not changing selection 25.73%
Probablity winning after changing selection 36.90%

注意: