前言
本人是大一刚入学没多久的新生,第一次写博客可能某些方面不太好望大家多多谅解!您觉得写得不好的地方,欢迎加大力度开口喷/滑稽~
1.问题重述
抛硬币100次,问出现10次连续正面朝上的概率为多少?
2.问题分析
针对问题,在python上大致可以分为两种方法实现:
1)仿真实验
2)数学公式的递归计算
本文使用的是仿真实验计算,仿真实验的实验次数越多,计算得到的结果越精准。
3.问题的求解
首先,记硬币的正面为1,反面为0,在python里面引用random库的randint()函数生成只有一百万个0或1的列表,然后使用for循环遍历列表,统计0或1重复出现的次数并进行累加,在循环语句中添加条件只为正面,即列表的第i个元素是1且第i+1个元素也是1;在循环语句的最后再判断这个重复出现的次数是否等于10,如果等于10,就累加给另外一个变量,最终将这个变量除于10000就可以得到抛硬币100次,出现10次连续正面朝上的概率。
4.代码
import random as rd
row = [rd.randint(0,1) for i in range(1000000)]#紧凑格式的生成1000000个元素列表
a,sum1 = 1,0
for i in range(len(row)-1):
if row[i] == 1 and row[i] == row[i+1]:#判断第i个元素是否为1且第i个跟第i+1个元素是否相同
a += 1
else:
a = 1
if a == 10:
sum1 += 1
print(sum1/10000)
5.关于抛硬币的一点注释
首先关于最终输出结果为什么要除于10000,我们仿真实验生成的是1000000个只有0或1的列表,而问题是求抛硬币100次出现10次正面连续朝上的概率,因此这里的1000000个元素的列表实际上10000次抛硬币100次的仿真结果。
最后的一些话
本人第一次写博客,某些地方不足请大家多多包涵,哪里不足请大力提出意见,就算是祖安文科状元也没事,别满腹金文憋在心中,这多委屈/滑稽,最后谢谢大家!