1、经典车羊问题
假设你参加一个游戏节目,有三扇关闭的门,其中一扇后面有一辆汽车,而其他两扇后面是山羊。你首先选择一扇门,然后主持人打开另外两扇门中的一扇,露出其中一只山羊。
现在,你可以选择是否改变自己的选择,选择另外一扇未被打开的门。那么,应该改变选择还是保持原来的选择呢?
import random def monty_hall_simulation(change_choice, num_trials): wins_times = 0 for _ in range(num_trials): doors = ['car', 'goat', 'goat'] random.shuffle(doors) # 随机排列门的位置 first_selected_door = random.randint(0, 2) # 随机选择一扇门 # 主持人打开一扇有山羊的门 opened_door = next(i for i in range(3) if i != first_selected_door and doors[i] == 'goat')
#判断是否选择交换 if change_choice: selected_door = next(i for i in range(3) if i not in (first_selected_door, opened_door)) else: selected_door = first_selected_door if doors[selected_door] == 'car': wins_times += 1 win_percentage = (wins_times / num_trials) * 100 return win_percentage # 进行10000次实验 win_percentage_with_change= monty_hall_simulation(change_choice=1, num_trials=10000) win_percentage_without_change= monty_hall_simulation(change_choice=0, num_trials=10000) print(f"改变选择时获胜的概率: {win_percentage_with_change}%") print(f"保持选择时获胜的概率: {win_percentage_without_change}%") #输出 改变选择时获胜的概率: 66.25% 保持选择时获胜的概率: 33.22%
2、假如我有初始筹码一百块钱,现在有个抛硬币的游戏,抛出正反面的概率是0.5,每次抛出正面,我的筹码量可以增加80%,抛出反面则减少50%,那么我该玩这个游戏吗?
2.1 如果每次必须全部筹
def func_p(p):
x=random.random() #左闭右开[0,1}
if x>=(1-p):
return 1
else:
return 0
def get_res(num_trials): x=100 for _ in range(num_trials): if func_p(0.5) == 1: x=x*1.8 else: x=x*0.5 return x res=get_res(100000) print ("最终收益为:"+str(res-100)) #输出 #最终收益为:-100.0
2.1 如果可以改变筹码量
#单次抛硬币后我筹码的期望为0.5*180+0.5*50=115,只要有充足的资金,不管玩几次,单次的期望始终为正值
def get_res(num_trials): res=0 for _ in range(num_trials): x=100 #每次筹码量固定 if func_p(0.5) == 1: x=x*1.8 else: x=x*0.5 res=res+x return (res/num_trials) res=get_res(100000) print ("平均收益为:"+str(res-100)) #输出 #平均收益为:15.092299999999994
标签:door,硬币,res,selected,问题,num,trials,车羊,change From: https://www.cnblogs.com/jax-/p/17757402.html