Python编写Monty Hall模拟结果为0.5与预期0.66不符,求代码问题排查
三门问题模拟结果异常排查
你代码运行得到0.5的核心原因是最后一步选择逻辑不符合三门问题的推导前提:
- Marilyn给出的2/3胜率,是参赛者固定选择换门时的结果
- 你代码中
s = random.choice(doors)是在Monty开门后剩下的两扇门里随机二选一,这种情况胜率自然是50%
另外原代码缺少import random语句,实际运行会报错,修正时需要补上。
修正后可复现0.66胜率的代码
import random n = 1000000 count = 0 for i in range(n): doors = [1,2,3] monty_choose = [1,2,3] # 固定汽车位置为1,初始选择随机等同于汽车位置随机的效果 car = 1 monty_choose.remove(car) ichoose = random.choice(doors) if ichoose in monty_choose: monty_choose.remove(ichoose) monty = random.choice(monty_choose) else: monty = random.choice(monty_choose) doors.remove(monty) # 固定执行换门操作:排除初始选择的门,剩下的就是要换的门 doors.remove(ichoose) s = doors[0] if s == car: count = count + 1 print(count/n)
修正后运行代码,输出结果会稳定在0.66~0.67区间,符合预期结论。
内容的提问来源于stack exchange,提问作者Carol G
相关产品推荐
相关产品推荐

