2015-10-20 65 views
-2

http://i.stack.imgur.com/EyqSv.png如何在python中實現生日公式?

所以,我試圖讓該爲契機,兩個人不具有相同的生日

我試圖證明上述這一公式Python代碼:

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

這是我所有的。所以上面的公式把打印365到1,我想知道如何使它,所以它會繼續迭代 - > 365 * 364 * 363 * 362 ....等等。任何幫助讚賞。

+1

365 * 364 * 363 * 364 !!! --- 363後364? – SIslam

+0

你可以用'1.0 - np.exp(-n *(n-1)/ 730.0)'來近似它。' – gobrewers14

回答

0

您可以使用reducemuloperator模塊:

import operator 
from decimal import Decimal 
result = 1 - (reduce(operator.mul, range(365 - n + 1, 366))/Decimal(365.0)**n) 

在Python 3 reduce必須從functools進口。

+0

如果我要把一個數字設置爲200,它會輸出「結果太大」,我發現還原函數仍然存在發生雖然 – reborn28

+0

它是365.0 ** n太大。你可以做'365 ** n',如果有必要的話(Python 2)將reduce減少爲float或'from __future__ import division' – AChampion

+0

我更新了答案以使用防止溢出的Decimal。仍然值超過200你會得到一個浮動表示問題。這些值將會過於低於1.0以正確呈現。 –

0

使用普通的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)