Python中的数学公式

问题描述:

所以我有这个数学公式有两个输入(两个数字,你必须插入正整数)。术语的名称是“对角线”和“术语(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方法,它仍然返回错误的答案 –

我不认为你想要的阶乘为迭代来划分。在你的循环之后这样做。

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

仍然返回错误的答案 –

+0

@DzmitrijPasat看到我的评论,你的范围是错误的 – njzk2

+1

那么,现在你可能不得不做一些调试。通过“错误的答案”,我认为你的意思是现在返回0以外的东西。所以这是一个问题。但我不确定你的公式分解成循环是否正确,你可能必须自己解决。 –

您的算法不正确,特别是除以阶乘。

如果你确定这是你想要做什么,你可能想使product一个浮动或者你总是会得到零,因为你的第一个分小于1 ...

product = float(term) 

这里有一个针对你的问题的功能性方法

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