今天用Python求解「羊车门」经典的概率问题,对概率学基础和Python语法的灵活运用有所收货.
本次「羊车门」求解过程采用的是:穷举法计算概率已验证概率学基础理论.期间重点借鉴了'奥卡姆剃刀的博客'和 南葱:「羊车门」经典概率题中不换门选中车的概率是多少? 二位老师的求解思路.
我的求解思路是: 我把「羊车门」问题中的'羊'和'车'想象成"0"和"1",然后用穷举法计算数组中的元素出现"0"和"1"的数量,再计算数组中的每元素出现"0"的概率,最后用最简单的方法计算总概率.得出的结果和二位老师基本一致.
有机会还是要好好学习一下概率学基础理论知识的.
欢迎大家批评指正
python代码如下:
# 经典的'羊车门问题'.采用穷举法计算概率.
import random
import time
# 0=车;1=羊
Start_Time = time.clock()
N = 3 # - 定义数组元素数量[即:门的数量] -
Door = list(range(N)) # - 有几扇门 -
Count = 1 # - 循环计数器 -
Crycle_index = 100000000 # - 循环Max值 -
D1 = D2 = D3 = 0 # 每扇门背后=车时的计数器
while Count <= Crycle_index:
for num in range(len(Door)): # --- 初始化3扇门背后的物品=1 ---
Door[num] = 1
# --- 随机分配'车'对应的'门'的位置 ---
reward = random.choice(range(N))
Door[reward] = 0
#print (Count,Door)
if Door[0] == 0:
D1 += 1
elif Door[1] == 0:
D2 += 1
elif Door[2] == 0:
D3 += 1
else:
pass
Count += 1
print ('-'*60)
print ('{0:^44}'.format("经典的'羊车门问题'.采用穷举法计算概率."))
print (' 1. 经过[{0}]亿次的运算'.format(Crycle_index/100000000))
print (' 2. D1=0的概率:{0:.2%} | D2=0的概率:{1:.2%} | D3=0的概率:{2:.2%},'\
.format((D1/Count),(D2/Count),(D3/Count)))
p1 = (D1 + D2 + D3)/Count/3
print (' 3. 只选择第一选项的平均获奖概率:[{0:.2%}]'.format(p1))
print (' '*5,'即:')
p2 = 1-(p1)
print (' 4. 放弃第一选择项,改选第二选择项的平均获奖概率:[{0:.2%}]'.format(p2))
print (' '*5,'即:')
print (' 5. 本次运算耗时{0:.2f}秒'.format((time.clock()-Start_Time)))
print ('-'*60)
Python运行结果如下:
------------------------------------------------------------
经典的'羊车门问题'.采用穷举法计算概率.
1. 经过[1]亿次的运算
2. D1=0的概率:33.33% | D2=0的概率:33.34% | D3=0的概率:33.33%,
3. 只选择第一选项的平均获奖概率:[33.33%]
即:
4. 放弃第一选择项,改选第二选择项的平均获奖概率:[66.67%]
即:
5. 本次运算耗时226.43秒
------------------------------------------------------------