首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的数学公式

Python中的数学公式
EN

Stack Overflow用户
提问于 2015-07-20 09:41:36
回答 3查看 216关注 0票数 0

所以我有一个数学公式,它有两个输入(你必须插入的两个数字,正整数)。术语的名称是“对角”和“术语(n)”。方程式是

代码语言:javascript
复制
( n(n+1)(n+2)...(n+ (diagonal-2)) )/ (diagonal-1)!

所以基本上你输入两个数字(对角线和术语),它应该会吐出一个数字。所以我用python写了一个程序,但它总是返回0。

代码语言:javascript
复制
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。导入数学

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2015-07-20 09:46:07

我不认为你想要除以每个迭代的阶乘。在您的循环之后执行此操作。

代码语言:javascript
复制
for i in range (term + (diagonal - 2)):
    product = product * (i+1)
product /= math.factorial(diagonal - 1)
票数 4
EN

Stack Overflow用户

发布于 2015-07-20 09:52:26

你的算法是错误的,特别是除以阶乘的时候。

如果你确定这就是你想要做的,你可能想让product成为一个浮点数,否则你总是会得到零,因为你的第一个除数小于1……

代码语言:javascript
复制
product = float(term)
票数 1
EN

Stack Overflow用户

发布于 2015-07-20 13:25:26

这里有一个函数方法来解决你的问题。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31507782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档