首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Monty 4 4doors python

Monty 4 4doors python
EN

Stack Overflow用户
提问于 2020-11-01 08:53:40
回答 1查看 95关注 0票数 0

我正在编制一个程序,以找出蒙蒂霍尔问题中有4扇门的可能性,但更改选择的可能性没有打印出来。

代码语言:javascript
复制
import random

door = ['a', 'b', 'c', 'd']
nc = 0 # When not changed
c = 0  # When changed

tr = 100 #Total number of iterations
for a in range(tr):
    car = random.randint(0, 3) #Inquiry number with car behind

    pc = random.randint(0, 3) #Inquiry number chosen by the participant

    ed = [] #Empty door

for i in range(4):
    if i != pc and i != car:
        ed.append(door[i])


com = random.sample(ed, 2)

if pc == car:
    nc += 1


def list_remover(the_list, val):
    while val in the_list:
        the_list.remove(val)

list_remover(ed, com)


if not ed:
    c += 1

print((nc / tr) * 100, "%")
print((c / tr) * 100, "%")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-01 10:36:25

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

然而,蒙蒂霍尔对任意数量的门的模拟如下。

代码语言:javascript
复制
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门

代码语言:javascript
复制
How many doors (assume >= 3)? 3
Probablity winning not changing selection 33.29%
Probablity winning after changing selection 66.70%

试验4门

代码语言:javascript
复制
How many doors? 4
Probablity winning not changing selection 25.73%
Probablity winning after changing selection 36.90%

注意:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64630139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档