[英]Math formula in Python
因此,我有一个具有两个输入的数学公式(您必须插入两个数字,正整数)。 术语的名称为“对角线”和“(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
我认为您不希望在每次迭代中都使用阶乘除法。 在循环之后执行此操作。
for i in range (term + (diagonal - 2)):
product = product * (i+1)
product /= math.factorial(diagonal - 1)
您的算法不正确,尤其是在除以阶乘时。
如果您确定这是您要执行的操作,则可能要使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)
20
编辑
您的代码的问题是您要乘以term的初始值两次(因此,当term和对角线均为4时,为什么得到80而不是20)。 要解决此问题,请将product= float(term)
行更改为product = 1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.