Python实现蒙提霍尔问题的随机数生成与开门逻辑问题咨询
问题解答
1. 生成三个不重复的门编号
不用反复调用randint(1,3)再做去重判断,直接用random.sample方法就能快速生成无重复的随机序列:
# 从[1,2,3]里随机取3个不重复的数,相当于把三个门的顺序打乱 door_list = random.sample([1,2,3], 3) # 可以自定义规则分配,比如第一个元素是汽车所在的门 car = door_list[0]
这个方法天然保证输出的三个数值完全不重复,比手动实现去重逻辑效率高,代码也更简洁。
2. 猜中汽车门时随机打开剩余两扇门的其中一扇
两种修改方案,按需选就行:
方案A:只修改你当前写死的分支
直接在对应分支里用random.choice从2、3里随机选一个输出:
elif guess == 1 and guess == car: opened_door = random.choice([2,3]) print(f"Opening door # {opened_door}")
方案B:通用逻辑优化(推荐)
直接筛选所有符合主持人开门规则的门,不用硬编码判断guess的值,后续扩展也方便:
def choice(guess): # 筛选可打开的门:不能是用户选的,也不能是藏汽车的 available_doors = [d for d in [1,2,3] if d != guess and d != car] # 随机选一个打开 opened_door = random.choice(available_doors) print(f"Opening door # {opened_door}") print("Here is a Goat")
这个方案可以直接替换你原来choice函数里的所有分支判断,还能兼容用户选2、3号门的场景,逻辑更严谨。
另外你现有代码里的next_door函数存在逻辑问题:判断guess == 2的时候打印打开2号门,不符合蒙提霍尔的规则——主持人不会打开用户已经选中的门,建议直接用上面的通用逻辑替换原有分支,减少硬编码错误。
内容的提问来源于stack exchange,提问作者FrocketGaming
相关产品推荐
相关产品推荐

