Python 蒙蒂霍尔模拟器工作不正常
我试着模拟蒙蒂霍尔问题 首先,我选择了获胜的门,并随机选择。然后打开一个不是所选门的门。然后选中,如果选中=获胜门。如果是,我将1添加到非切换点(b.num) 然后,为了切换选择,我从doors列表中删除了selected door,并将selected均衡为列表中的唯一项。然后检查是否再次选中=获胜门,以及是否在切换点(s.num1)上添加1 问题是转换成功率大约等于33。它的预期值约为66。问题在哪里Python 蒙蒂霍尔模拟器工作不正常,python,Python,我试着模拟蒙蒂霍尔问题 首先,我选择了获胜的门,并随机选择。然后打开一个不是所选门的门。然后选中,如果选中=获胜门。如果是,我将1添加到非切换点(b.num) 然后,为了切换选择,我从doors列表中删除了selected door,并将selected均衡为列表中的唯一项。然后检查是否再次选中=获胜门,以及是否在切换点(s.num1)上添加1 问题是转换成功率大约等于33。它的预期值约为66。问题在哪里 import random from random import randint def
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()
看起来你在打开大门,却没有咨询他们是否是赢家。蒙蒂从来没有打开过获胜的大门。是的,我想你是对的。谢谢你的帮助