2015-07-20 172 views
0

所以我有這個數學公式有兩個輸入(兩個數字,你必須插入正整數)。術語的名稱是「對角線」和「術語(n)」。方程是Python中的數學公式

(n(n+1)(n+2)...(n+ (diagonal-2)))/ (diagonal-1)! 

所以基本上你插入兩個數字(對角線和術語),它應該吐出一個數字。所以,我在python寫了一個程序,但它總是返回0

import math 

diagonal = input("What diagonal do you want to see?") 

term = input("What term do you want to see?") 

product= term 
for i in range (term + (diagonal - 2)): 

    product = ((product * (i+1))/(math.factorial(diagonal - 1))) 

print(product) 

爲了測試這個,當你在4號插上的術語和對角線都應該得到20

編輯:我試過了不同的方法發佈,現在它回到80級的時候4,4插上。 進口數學

diagonal = input("What diagonal do you want to see?") 
term = input("What term do you want to see?") 

product= float(term) 
for i in range (term, term + (diagonal - 2)+1): 
    product = (product * (i)) 

product /= math.factorial(diagonal - 1) 
print product 
+0

'範圍(術語+(對角線-2))看起來不正確。它應該是範圍(術語,術語+(對角線-2)+ 1)'(並且使用'i'而不是'i + 1') – njzk2

+0

如果可以,您的公式看起來像是(n + d-2) ! /((d-1)!*(n-1)!)'。 – njzk2

+0

我厭倦了njzk2方法,它仍然返回錯誤的答案 –

回答

4

我不認爲你想要的階乘爲迭代來劃分。在你的循環之後這樣做。

for i in range (term + (diagonal - 2)): 
    product = product * (i+1) 
product /= math.factorial(diagonal - 1) 
+0

仍然返回錯誤的答案 –

+0

@DzmitrijPasat看到我的評論,你的範圍是錯誤的 – njzk2

+1

那麼,現在你可能不得不做一些調試。通過「錯誤的答案」,我認爲你的意思是現在返回0以外的東西。所以這是一個問題。但我不確定你的公式分解成循環是否正確,你可能必須自己解決。 –

1

您的算法不正確,特別是除以階乘。

如果你確定這是你想要做什麼,你可能想使product一個浮動或者你總是會得到零,因爲你的第一個分小於1 ...

product = float(term) 
0

這裏有一個針對你的問題的功能性方法

from operator import mul 

product = lambda lo, hi: reduce(mul, xrange(lo, hi)) 
formula = lambda n, d: product(n, n+d-1)/product(1, d) 

print formula(4, 4) 

編輯
與您的代碼的問題是,你是長期的初始值乘以兩倍(所以爲什麼你得到80而不是20時的術語和對角線都是4)。要修復此行更改行product= float(term)product = 1