所以我有一个数学公式,它有两个输入(你必须插入的两个数字,正整数)。术语的名称是“对角”和“术语(n)”。方程式是
( 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。
编辑:我尝试了发布的不同方法,现在当插入4,4时,它返回80。导入数学
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发布于 2015-07-20 09:46:07
我不认为你想要除以每个迭代的阶乘。在您的循环之后执行此操作。
for i in range (term + (diagonal - 2)):
product = product * (i+1)
product /= math.factorial(diagonal - 1)发布于 2015-07-20 09:52:26
你的算法是错误的,特别是除以阶乘的时候。
如果你确定这就是你想要做的,你可能想让product成为一个浮点数,否则你总是会得到零,因为你的第一个除数小于1……
product = float(term)发布于 2015-07-20 13:25:26
这里有一个函数方法来解决你的问题。
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)20
编辑
你的代码的问题是,你会把term的初始值乘以两倍(因此当term和对角线都是4时,你会得到80而不是20 )。要解决此问题,请将product= float(term)行更改为product = 1。
https://stackoverflow.com/questions/31507782
复制相似问题