繁体   English   中英

Python中的数学公式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM