python抛硬币正反面的概率_抛硬币连续N次正面后再次正面的概率是多少呢?有疑虑的话咱用Python模拟一下吧...

Python不用学,看看你就懂;拿来就能用,用用你就会

无需安装编程软件,把代码拷贝到在线编辑器即可运行

抛硬币连续N次正面后下一次还是正面的概率是多少呢?

这是一个答案似乎很肯定但心里又不踏实的问题。学过一点儿概率知识的小伙伴儿都知道老师讲过这个答案,但无论学过的还是没学过的,心里总是有一丝疑虑:真的是这样吗?如果连续很多次正面了,下一次还是正面也太巧了吧?

根据经典概率学,如果每次扔硬币是独立的事件且正反概率相等的话,毫无疑问,无论已经连续多少次正面,下一次正面的概率仍然是50%。

心里还有疑虑的话,最好的办法就是做实验来验证咯。可惜概率统计实验验证的最基本要求就是实验次数要够多,动辄要求扔几万次几十万次,如果是真人秀也太累了吧。

但我们有Python啊,简单编个程序就可以验证呀。正好Python里的随机数发生器特别好用,所以编出来的程序也很简单:

import random

N = 3 # 我们将观察连续出现N次正面后会发生什么

EXP_NUM = 150000 # 总的抛硬币次数

counter1 = 0 # 用来统计已经连续几次正面了

counter2 = 0 # 统计共多少次出现连续N次正面

counter3 = 0 # 统计出现连续N次正面后再次出现正面的次数

for i in range(EXP_NUM):

coin = random.randint(0,1)

if coin == 1: # 扔到了一次正面

counter1 = counter1 + 1 # 累计出现正面的次数

else:

counter1 = 0 # 不是正面,重置计数器

if counter1 == N: # 表明连续出现了N次正面

counter2 = counter2 + 1 # 累计出现N次正面的次数

counter3 = counter3 + random.randint(0,1) # 再扔一次,累计连续N次正面后再次正面的次数

counter1 = 0 # 重置计数器,准备下一次实验

print("N =", N)

print("EXP_NUM = ", EXP_NUM)

print("连续出现N次正面的总次数", counter2)

print("连续出现N次正面后,再次出现正面的次数", counter3)

print("连续出现N次正面后,再次出现正面的比例", counter3/counter2)

我们做15万次实验(总共扔15万次硬币),看看运行结果:

N = 3

EXP_NUM = 150000

连续出现N次正面的总次数 10828

连续出现N次正面后,再次出现正面的次数 5424

连续出现N次正面后,再次出现正面的比例 0.5009235315847802

看来确实还是50%的概率。如果N=5, N=10,甚至N=100,无论N等于多少,结果都仍然是0.5左右,只不过为了保证结果的精确度,实验次数也要大大增加。比如N=5时,实验次数最好大于60万次。

上述代码稍微改一下,就可以成为验证另外一些抛硬币的问题,比如,抛硬币M次出现连续N次正面的概率是多少?平均要抛多少次硬币才能出现连续N次正面的情况?等等。这些问题都是有统计算法的,如果你想要验证一下,都可以用本文类似的编程方法去实现。

最后要强调一下的是,这个是满足经典概率大数定律的验算,不存在硬币本身的均匀性、抛硬币时的环境影响等潜在因素,也就是说我们是理想硬币在理想环境中的理想抛法。当然,即便如此,概率本身仍然不能保证必然,所以你偶尔跑出一个偏离0.5比较远的结果,也不要惊慌,多跑几次看看就可以了。理论上,即使跑出0或者1的可能性都是有的呢,只不过恐怕没人能撞上那种大运吧。

这里是《简单又好玩的Python》栏目,我们的口号是“Python不用学,用用你就会”。欢迎关注!

源代码文件地址: