10w次计算结果如下:

代码(AI)如下:
[Python] 纯文本查看 复制代码 import random
def monty_hall_simulation(num_trials):
"""
模拟蒙提霍尔问题
参数:
num_trials: 模拟的试验次数
返回:
stay_wins: 不换门赢得汽车的次数
switch_wins: 换门赢得汽车的次数
"""
stay_wins = 0
switch_wins = 0
for _ in range(num_trials):
# 随机放置汽车在一扇门后 (0, 1, 2)
car_door = random.randint(0, 2)
# 参赛者随机选择一扇门
contestant_choice = random.randint(0, 2)
# 主持人打开一扇有山羊的门(不能是参赛者选择的门)
remaining_doors = [i for i in range(3) if i != contestant_choice]
# 如果参赛者选择的是有车的门,主持人可以打开剩下两扇门中的任意一扇
if contestant_choice == car_door:
host_opens = random.choice(remaining_doors)
else:
# 如果参赛者选择的是山羊,主持人必须打开另一扇有山羊的门
host_opens = remaining_doors[0] if remaining_doors[1] == car_door else remaining_doors[1]
# 计算换门后的选择
switch_choice = [i for i in range(3) if i != contestant_choice and i != host_opens][0]
# 统计结果
if contestant_choice == car_door:
stay_wins += 1
if switch_choice == car_door:
switch_wins += 1
return stay_wins, switch_wins
# 运行模拟
num_trials = 100000
stay_wins, switch_wins = monty_hall_simulation(num_trials)
print(f"模拟次数: {num_trials}")
print(f"不换门赢得汽车的次数: {stay_wins}")
print(f"换门赢得汽车的次数: {switch_wins}")
print(f"不换门的胜率: {stay_wins/num_trials:.4f} ({stay_wins/num_trials*100:.2f}%)")
print(f"换门的胜率: {switch_wins/num_trials:.4f} ({switch_wins/num_trials*100:.2f}%)") |