我是靠谱客的博主 欢喜酸奶,最近开发中收集的这篇文章主要介绍python生日相同的概率_50个人中有人生日相同的概率高达97%,你信吗?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

同学们常常被数学老师的某些违反直观感受的数字给吓着了,比如这个:

“如果你们班有23个同学,那么至少有两个同学生日相同的概率大约是50%;如果你们班有50个同学,那么至少有两个同学生日相同的概率是97%。”

换句话说,如果你们学校很大,比如有100个班,每个班50个学生的话,那么很可能大概有97个左右的班都有生日重复的同学。如果你凭直观感觉跟数学老师打赌说你认为不超过比如30个班有生日重复,或者保险一点赌不超过90个班,那么你基本上输定了。

好了,这个数学公式其实很简单,就是先计算班上所有人生日都不重复的概率,然后用1减掉就可以了:

不过这个式子,一般的计算器并搞不定,里面的数字实在太大了。就算是Google计算器,阶乘大概最多可以算到170!,你可以试一下365!,结果是这样的:

这个时候,Python超级计算的优势又体现出来了,既简单又强大,一句话搞定,而计算毫无压力:

Pn = 1 - factorial(365) / (365**n * factorial(365-n))

计算结果:

P(23) = 0.5072972343239854

P(50) = 0.9703735795779884

完美!数学老师又赢了!

可能你还不服输,想真实地看一下,直观地感受一下。那么你除了到学校校务处去验证一下之外,还有一个方法,就是用Python模拟实验咯。

我们的代码包括了上述的理论计算以及相应的模拟实验如下(代码中有一个关键的函数set( ),叫集合函数,这里借以去掉一个列表中的重复项,以后再细讲):

import random

from math import *

n = int(input("请输入一个班有多少人:"))

# 按相关公式计算理论值

Pn = 1 - factorial(365) / (365**n * factorial(365-n))

print("一个班", n, "个人中至少有两个人生日相同的概率:")

print("理论值 =", Pn)

# 进行随机实验

EXP_NUM = 10000 # 实验次数

counter = 0 # 计数器,统计出现重复生日的次数

birthdays = [] # 用来存储随机产生的生日的列表

for i in range(EXP_NUM):

for j in range(n):

birthdays.append(random.randint(1,365)) # 产生生日表

if len(birthdays) > len(set(birthdays)): # 如果有重复

counter = counter + 1 # 累计重复次数

birthdays = [] # 重置生日表

print("实验值 =", counter/EXP_NUM)

输入23个人:

请输入一个班有多少人:23

23

一个班 23 个人中至少有两个人生日相同的概率:

理论值 = 0.5072972343239854

实验值 = 0.5096

输入50个人:

请输入一个班有多少人:50

50

一个班 50 个人中至少有两个人生日相同的概率:

理论值 = 0.9703735795779884

实验值 = 0.9718

虽然有点儿违反直觉,但事实上就是这样的。

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

源代码文件地址:

最后

以上就是欢喜酸奶为你收集整理的python生日相同的概率_50个人中有人生日相同的概率高达97%,你信吗?的全部内容,希望文章能够帮你解决python生日相同的概率_50个人中有人生日相同的概率高达97%,你信吗?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部