# ============================================================# Simulação do Problema de Monty Hall# Aplicação de probabilidade e simulação computacional# ============================================================
import random
def monty_hall(strategy, trials=10000): """ Simula o Problema de Monty Hall.
Parâmetros ---------- strategy : str Estratégia adotada pelo participante: - "stay": permanece com a escolha inicial; - "switch": troca de porta depois que o apresentador abre uma porta com uma cabra.
trials : int Número de repetições da simulação.
Retorno ------- float Proporção de vitórias obtida na simulação. """
# Contador do número de vitórias do participante wins = 0
# Repetição do experimento várias vezes for _ in range(trials):
# Representação das três portas: # 0 representa uma cabra # 1 representa o carro doors = [0, 0, 1]
# Distribui aleatoriamente o carro entre as três portas random.shuffle(doors)
# O participante escolhe aleatoriamente uma porta: # os índices possíveis são 0, 1 e 2 choice = random.randint(0, 2)
# O apresentador deve abrir uma porta: # - diferente da escolhida pelo participante; # - contendo uma cabra. remaining = [ i for i in range(3) if i != choice and doors[i] == 0 ]
# Escolhe aleatoriamente uma das portas possíveis # para revelar uma cabra opened = random.choice(remaining)
# Se a estratégia for trocar, o participante escolhe # a única porta que ainda está fechada e que não era # sua escolha inicial if strategy == "switch": choice = [ i for i in range(3) if i != choice and i != opened ][0]
# Verifica se a porta escolhida contém o carro if doors[choice] == 1: wins += 1
# A taxa de vitória é o número de vitórias dividido # pelo número total de simulações return wins / trials
# Número de repetições do experimentotrials = 10000
# Simula a estratégia de permanecer com a escolha inicialprob_stay = monty_hall("stay", trials)
# Simula a estratégia de trocar de portaprob_switch = monty_hall("switch", trials)
# Apresenta os resultados da simulaçãoprint(f"Probabilidade estimada mantendo: {prob_stay:.4f}")print(f"Probabilidade estimada trocando: {prob_switch:.4f}")