如何在python中实现生日公式?
所以,我试图编写一个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
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)