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
我不认为你想要的阶乘为每迭代来划分。在你的循环之后这样做。
for i in range (term + (diagonal - 2)):
product = product * (i+1)
product /= math.factorial(diagonal - 1)
仍然返回错误的答案 –
@DzmitrijPasat看到我的评论,你的范围是错误的 – njzk2
那么,现在你可能不得不做一些调试。通过“错误的答案”,我认为你的意思是现在返回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
。
'范围(术语+(对角线-2))看起来不正确。它应该是范围(术语,术语+(对角线-2)+ 1)'(并且使用'i'而不是'i + 1') – njzk2
如果可以,您的公式看起来像是(n + d-2) ! /((d-1)!*(n-1)!)'。 – njzk2
我厌倦了njzk2方法,它仍然返回错误的答案 –