python计算概率

假设每人的生日在一年 365 365 365 天中的任一天是等可能的,那么随机选取 n ( n ≤ 365 ) n(n\leq365) n(n365) 个人,他们的生日各不相同的概率为多少?

解:基本事件总数为 36 5 n 365^n 365n,从 365 365 365 天中选出不同的 n n n 天,共有 C 365 n C_{365}^n C365n 种不同的可能, n n n 个人在每种被选出的 n n n 天中共有 n ! n! n! 种排列的方法,生日各不相同的情况总共有 C 365 n ⋅ n ! C_{365}^n\cdot n! C365nn! 种,所以所求概率为: p 1 = C 365 n ⋅ n ! 36 5 n = A 365 n 36 5 n p_1=\dfrac{C_{365}^n\cdot n!}{365^n}=\dfrac{A_{365}^n}{365^n} p1=365nC365nn!=365nA365n. 由此也可以得出 ”至少有两个人生日相同“ 的概率为: p 2 = 1 − p 1 = 1 − C 365 n ⋅ n ! 36 5 n = 1 − A 365 n 36 5 n p_2=1-p_1=1-\dfrac{C_{365}^n\cdot n!}{365^n}=1-\dfrac{A_{365}^n}{365^n} p2=1p1=1365nC365nn!=1365nA365n.

如果一个班级有 64 个人,那么这个班级至少有两个人生日相同的概率为:0.997

def permutations(n,m): # 定义一个函数,计算 n*(n-1)*(n-2)*...*(n-m+1)
    permutation = 1   # 排列数,初值为1
    for i in range(n-m+1,n+1):   # for 循环遍历 (n-m+1)到n
        permutation *= i  # 乘在一起
    return permutation    # 返回排列数

def CalculateProbability(n):   # 定义一个函数,计算概率
    return (1-permutations(365,64)/365**n)   # 返回1-(64*63*62*...*(365-64+1))/(365^64)

print(CalculateProbability(64))    # 打印计算结果为 0.997...

from random import random   # 导入随机数

li = []   # 定义一个空的列表

# 利用循环,生成1000000组1~365之间的随机数,每组有64个元素。
while 1:
    if len(li) == 1000000:   # 如果li列表有1000000个元素就退出循环
        break
    else:  # 否则就往li中添加元素
        temp = []   # 定义一个临时列表
        # 利用循环,往这个临时列表中添加元素
        while 1:
            a = random()   # 生成一个 [0,1)之间的随机数,是一个小数
            if len(temp) == 64:  # 如果temp列表中有64个元素就退出里面的这个while循环
                break
            else:   # 否则就往temp中添加元素
                if 0<int(a*1000)<366:   # 生成的随机小数乘以1000后,如果在0~366之间,就添加到temp中
                    temp.append(int(a*1000))
        li.append(temp)  # 将temp添加到li中

count = 0 # 计数,初值为零

for i in li: # 遍历列表当中的每一个元素
    a = set() # 定义一个集合
    a = set(i) # 将i列表强制转换成集合,会进行去重操作,如果有重复,说明这64个值中有重复的,也就意味着有生日相同的。
    if len(a) != 64:   # 如果集合a中的元素数量不等于64,说明进行了去重操作,有生日重复
        count += 1   # count值加一,计数

print(count/1000000)  # 最后打印出计算结果,总共有1000000组数据,有生日重复的有count组,计算出比值,比值接近0.997(由于该程序计算量比较大,所以可能要久一点才能计算出结果,但不会慢到要1分钟才能计算出来。)
# 由此就可以验证计算结果的正确性。可以看出,每100个64人的班级中,就有99个班级中有生日重复的同学。这个概率还是非常大的。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackey_Song_Odd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值