Python 蒙蒂霍尔模拟器工作不正常

Python 蒙蒂霍尔模拟器工作不正常,python,Python,我试着模拟蒙蒂霍尔问题 首先,我选择了获胜的门,并随机选择。然后打开一个不是所选门的门。然后选中,如果选中=获胜门。如果是,我将1添加到非切换点(b.num) 然后,为了切换选择,我从doors列表中删除了selected door,并将selected均衡为列表中的唯一项。然后检查是否再次选中=获胜门,以及是否在切换点(s.num1)上添加1 问题是转换成功率大约等于33。它的预期值约为66。问题在哪里 import random from random import randint def

我试着模拟蒙蒂霍尔问题

首先,我选择了获胜的门,并随机选择。然后打开一个不是所选门的门。然后选中,如果选中=获胜门。如果是,我将1添加到非切换点(b.num)

然后,为了切换选择,我从doors列表中删除了selected door,并将selected均衡为列表中的唯一项。然后检查是否再次选中=获胜门,以及是否在切换点(s.num1)上添加1

问题是转换成功率大约等于33。它的预期值约为66。问题在哪里

import random
from random import randint

def b():
    b.num+=1
b.num=0

def s():
    s.num+=1
s.num=0

d=int(input("try count: "))

def a():
    winner=randint(1,3)
    selection=randint(1,3)
    doors=[1,2,3]
    doors_to_open=randint(1,2)
    if selection == 1:
        if doors_to_open==1:
            doors.remove(2)
        else:
            doors.remove(3)

    if selection == 2:
        if doors_to_open==1:
            doors.remove(1)
        else:
            doors.remove(3)

    if selection == 3:
        if doors_to_open==1:
            doors.remove(1)
        else:
            doors.remove(2)

    if selection == winner:
        b()
        #print("Not switching win count: ",b.num)

    # switch

    doors.remove(selection)
    selection = doors[0]

    if selection == winner:
        s()
        #print("Switching win count: ",s.num)

for q in range (0,d):
    a()

#print("Switching win count: ",s.num)
print("Switching percent: ",(s.num/d)*100)
#print("Not switching win count: ",b.num)
print("Not switching percent: ",(b.num/d)*100)

input()

调用s函数时,您错过了一个不等于运算符。如果你加上!在这种情况下。它将修复您的模拟

import random
from random import randint

def b():
    b.num+=1
b.num=0

def s():
    s.num+=1
s.num=0

d=int(input("try count: "))

def a():
    winner=randint(1,3)
    selection=randint(1,3)
    doors=[1,2,3]
    doors_to_open=randint(1,2)
    if selection == 1:
        if doors_to_open==1:
            doors.remove(2)
        else:
            doors.remove(3)

    if selection == 2:
        if doors_to_open==1:
            doors.remove(1)
        else:
            doors.remove(3)

    if selection == 3:
        if doors_to_open==1:
            doors.remove(1)
        else:
            doors.remove(2)

    if selection == winner:
        b()
        #print("Not switching win count: ",b.num)

    # switch

    doors.remove(selection)
    selection = doors[0]

    if selection != winner: #Change is done in this line
        s()
        #print("Switching win count: ",s.num)

for q in range (0,d):
    a()

#print("Switching win count: ",s.num)
print("Switching percent: ",(s.num/d)*100)
#print("Not switching win count: ",b.num)
print("Not switching percent: ",(b.num/d)*100)
(感谢马克·迈耶)问题已经解决了。这个密码也打开了获胜的大门。以下是正确的代码:

import random
from random import randint

def a():
    a.sayı+=1
a.sayı=0

def b():
    b.sayı+=1
b.sayı=0

def c():
    kapılar=[1,2,3]
    cevap=randint(1,3)
    seçim=randint(1,3)

    #kapı aç
    kapılar1=[1,2,3]
    if seçim==cevap:
        kapılar1.remove(cevap)
    else:
            kapılar1.remove(cevap)
            kapılar1.remove(seçim)
    #kapılar1.remove(cevap)
    #kapılar1.remove(seçim)
    kapılar.remove(kapılar1[0])

    #dont switch
    if seçim==cevap:
        a()

    #switch
    kapılar.remove(seçim)
    seçim=kapılar[0]

    if seçim==cevap:
        b()

d=int(input("Deneme sayısı: "))

for e in range(0,d):
    c()

print("Switching win percent: ",(b.sayı/d)*100)
print("Not switching win pecent: ",(a.sayı/d)*100)
input()

看起来你在打开大门,却没有咨询他们是否是赢家。蒙蒂从来没有打开过获胜的大门。是的,我想你是对的。谢谢你的帮助