如何在python中实现生日公式?

如何在python中实现生日公式?,python,python-3.x,Python,Python 3.x,所以,我试图编写一个python代码,证明上面的公式是正确的,因为两个人的生日不一样 我的尝试: for birthday in range(365, 0, -1): print(birthday) 这就是我的全部。所以,上面的公式将打印数设为365:1,我想知道如何使它继续迭代->365*364*363*362。。。。等等。感谢您的帮助。您可以使用操作员模块中的reduce和mul: import operator from decimal import Decimal result

所以,我试图编写一个python代码,证明上面的公式是正确的,因为两个人的生日不一样

我的尝试:

for birthday in range(365, 0, -1):
    print(birthday)

这就是我的全部。所以,上面的公式将打印数设为365:1,我想知道如何使它继续迭代->365*364*363*362。。。。等等。感谢您的帮助。

您可以使用
操作员
模块中的
reduce
mul

import operator
from decimal import Decimal
result = 1 - (reduce(operator.mul, range(365 - n + 1, 366)) / Decimal(365.0)**n)
在Python 3中,必须使用普通Python从
functools

导入reduce:

def bday(n):
    y = 1
    for i in range(365, 365-n, -1):
        y *= i / 365.0
    return 1 - y
使用numpy(稍微快一点):


365*364*363*364.!!!---363之后的364?你可以用
1.0-np.exp(-n*(n-1)/730.0)
来近似它,如果我把像200这样的数字放进去,它会输出“结果太大”,我发现reduce函数仍然会发生,尽管365.0**n太大。您可以执行
365**n
并在必要时(Python 2)将reduce转换为float或
从uuuuu future\uuuuuuu导入部分
更新答案以使用防止溢出的
十进制
。如果值仍然超过200,则会出现浮点表示问题。值将变得太小,无法正确显示为1.0。您可以删除
1-
,以查看E表示法中
1
的差异。
import numpy as np

def bday(n):
    y = np.arange(365, 365-n, -1) / 365.0
    return 1 - np.product(y)