You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

蒙提霍尔模拟代码无法按TimesRun设定次数从数组随机取值问题排查

蒙提霍尔模拟代码问题修复

问题原因

代码在单次循环中累计调用了4次Doors()随机抽取函数,每次调用都会独立生成新的随机结果,没有复用同一次抽取结果做判断:

  • 循环首行调用的Doors()返回值没有被存储,直接被丢弃
  • 第一个if判断会再次调用Doors()抽取结果,判断是否为Goat
  • 如果不匹配,进入第一个elif判断Goat1时,会第三次调用Doors()重新抽取
  • 如果仍不匹配,进入第二个elif判断Car时,会第四次调用Doors()重新抽取
    四次抽取结果完全独立,甚至可能出现三个判断分支都不匹配的情况,最终三个计数的加总必然和你设置的TimesRun模拟次数不一致。

修复方案

每次循环仅调用一次Doors(),将返回值存入临时变量后,再用该变量做条件判断即可。

修复后完整代码

import random

def Doors():
    doors = ["Goat","Goat1","Car"]
    selection = doors[random.randint(0,2)]
    return selection

i = 0
goat = 0
goat1 = 0
car = 0

TimesRun = input("How many times would you like to simulate this problem\n")
while i < int(TimesRun):
    # 单次循环仅抽取一次,存储结果后再判断
    current_selection = Doors()
    if current_selection == "Goat":
        goat += 1
    elif current_selection == "Goat1":
        goat1 += 1
    elif current_selection == "Car":
        car += 1
    i += 1
    
print("Goat: " + str(goat) + "\nCar: " + str(car) + "\nGoat1: " + str(goat1))
print(goat + car + goat1)

内容的提问来源于stack exchange,提问作者MagicianJoshua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:45:04