http://i.stack.imgur.com/EyqSv.png
所以,我正在尝试制作一个python代码来证明上面这个公式的合理性是因为两个人没有相同的生日
我的尝试:
for birthday in range(365, 0, -1):
print(birthday)
这就是我得到的全部。所以上面的公式把打印365到1,我想知道我怎么能这样做它所以它将继续迭代 - > 365 * 364 * 363 * 362 ....等等。任何帮助表示赞赏。
答案 0 :(得分:0)
您可以使用reduce
模块中的mul
和operator
:
import operator
from decimal import Decimal
result = 1 - (reduce(operator.mul, range(365 - n + 1, 366)) / Decimal(365.0)**n)
在Python 3中reduce
必须从functools
导入。
答案 1 :(得分:0)
使用plain python:
def bday(n):
y = 1
for i in range(365, 365-n, -1):
y *= i / 365.0
return 1 - y
使用numpy(稍快):
import numpy as np
def bday(n):
y = np.arange(365, 365-n, -1) / 365.0
return 1 - np.product(y)