Monty Hall problem的概率统计python实现

738 2023-05-10 23:34


这是一个众所周知的问题,许多人奇怪的直觉都难以正確回答。这個问题通常涉及到一個奖品放在三个门后,其中一个门后是奖品,另外两个门后是没有奖品的,门是关闭的。玩家必须选择一个门,然后主持人将会打開一个没有奖品的门,然后问玩家是否要改变他们的选择。问题是,改变他们的选择是否会增加他们赢得奖品的机会?

让我们来看看利用python模拟Monty Hall problem的概率统计:```python

import random

#模拟Monty Hall问题的函数
def monty_hall(num_of_doors, switch_choice):
  # 设置三个门,其中一个是奖品门
  doors = ["goat"] * num_of_doors
  prize_door = random.randint(0, num_of_doors - 1)
  doors[prize_door] = "car"

  # 设置玩家选择的门
  player_choice = random.randint(0, num_of_doors - 1)

  # 选择打开的门
  opened_door = random.choice([i for i in range(num_of_doors) if i != player_choice and doors[i] == "goat"])

  # 玩家选择是否改变选择
  if switch_choice:
    # 如果玩家改变选择,则将其选择更改为另一个未打开的门
    player_choice = [i for i in range(num_of_doors) if i != player_choice and i != opened_door][0]

  # 玩家最终的选择是否是奖品门
  win = doors[player_choice] == "car"

  return win

# 模拟Monty Hall问题并统计结局
def simulate(num_of_doors, num_of_trials, switch_choice):
  wins = 0
  for i in range(num_of_trials):
    if monty_hall(num_of_doors, switch_choice):
      wins += 1
  win_percentage = wins / num_of_trials * 100
  lose_percentage = 100 - win_percentage

  print(f"Win percentage: {win_percentage:.2f}%")
  print(f"Lose percentage: {lose_percentage:.2f}%")

# 测试
num_of_doors = 3 # 三个门
num_of_trials = 1000 # 模拟1000次
switch_choice = True # 玩家选择更改选择
simulate(num_of_doors, num_of_trials, switch_choice)


```

输出结果:

Win percentage: 65.10%

Lose percentage: 34.90%

这表明,当玩家改变选择时,他们赢得奖品的机会明显增加。根据统计,玩家改变选择的情况下,赢得奖品的机会约为65%,而不改变的情况下,约为33%。 ♨

全部评论

·