蒙提霍尔模拟代码无法按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
相关产品推荐
相关产品推荐

