Math Python多项式积分函数输出错误

Math Python多项式积分函数输出错误,math,python-3.x,Math,Python 3.x,输出: 积分:0.25x^4.0+1.0x^3.0+1.0x^2+1x+C3ln(x)+ 所以基本上,除了当我积分一个x^-1项时,一切都是有效的。如果if子句认为常量项是最后一项,因此提前返回“C”并将ln(x)放在后面,这有什么不对?为什么ln(x)后面的加号也是?已经玩了几个小时了,但还是想不出来 当我不包括x^-1术语时,一切都是有效的。如果你想知道为什么我在不定积分中加入了左极限和右极限,我计划在函数中实现不定积分或定积分。你发布的代码中的缩进会显示几个If语句。您可能需要再次检查它是

输出:

积分:0.25x^4.0+1.0x^3.0+1.0x^2+1x+C3ln(x)+

所以基本上,除了当我积分一个x^-1项时,一切都是有效的。如果if子句认为常量项是最后一项,因此提前返回“C”并将ln(x)放在后面,这有什么不对?为什么ln(x)后面的加号也是?已经玩了几个小时了,但还是想不出来


当我不包括x^-1术语时,一切都是有效的。如果你想知道为什么我在不定积分中加入了左极限和右极限,我计划在函数中实现不定积分或定积分。

你发布的代码中的缩进会显示几个If语句。您可能需要再次检查它是否与正在运行的代码匹配。示例:“常量”检查嵌套在此代码中的“线性”检查中。“常量”检查“'x'不在术语中”将永远不会计算为True,它位于仅当“'x'在术语中”为True时才会执行的块内部!我的建议是,不要试图在这段代码中找到bug,而是重写,分两步进行:第一步,将输入解析为表示项、系数和指数的结构;第二步,利用解析结构逐项计算积分。如果你有解析的公式,计算积分很容易,对吗?也许先解决这个问题,把它弄走。然后剩下的是更机械的解析问题。这是一种经典的关注点分离或分而治之的方法。如果使用带有调试器的IDE,这是一个很容易解决的问题。通过一两次代码,你就会知道你的假设哪里出错了。市场上最好的IDE来自JetBrains;试试PyCharm。是的,我刚更改了常量检查以匹配代码。它没有嵌套在初始循环中,因此工作正常。我将在调试器中查看它。。。我想我将重写代码,以执行两个单独的过程,这样当我包含具有限制的部分时,它就可以计算,而无需再次解析。谢谢
def poly_integrate(terms,left_limit,right_limit):
    split_terms = terms.split('+')
    integral_fxdx = 'Integral:'
    integral = 0
    for term in split_terms:
        if (left_limit and right_limit) is None:
            #power term
            if 'x^' in term:
                split_term = term.split('x^')
                if float(split_term[1]) != -1:
                    int_coef = float(split_term[0])/(float(split_term[1])+1)
                    int_term = str(int_coef) + 'x^' + str(float(split_term[1]) + 1)
                    integral_fxdx = integral_fxdx + int_term
            if float(split_term[1]) == -1:
                int_term = split_term[0] + 'ln(x)'
                integral_fxdx = integral_fxdx + int_term
            #linear term
            if 'x' in term and ('^' not in term):
                split_term = term.split('x')
                int_term = str(float(split_term[0])/2) + 'x^2'
                integral_fxdx = integral_fxdx + int_term
            #constant
            if 'x' not in term:
                int_term = term + 'x'
                integral_fxdx = integral_fxdx + int_term
            #add plus or constant
            if term != terms[-0]:
                integral_fxdx = integral_fxdx + '+ '
            if term == terms[-0]:
                integral_fxdx = integral_fxdx + '+ C'
        return integral_fxdx