为了账号安全,请及时绑定邮箱和手机立即绑定

打印多项式的导数 - python

打印多项式的导数 - python

MYYA 2021-11-16 15:30:12
我有一个学校练习来制作一个打印输入多项式的导数的程序。我在这个网站上发现了一个代码,几乎和我想要的一样好。由于我在此特定练习中缺乏编程技能,因此我需要更多帮助。所以,我需要计算的多项式在底部的“run(xxxxxxxx)”行中,它几乎可以工作。第一个应该打印“4x^3 + 12x^2 + 1”,但打印“4x^3+9x^2+”。第二个我需要找出如何在多项式中添加使用“y”进行计算的可能性。我想问题可能是程序无法计算所有行,这就是为什么它是 9x^2 而不是 12x^2。任何人都可以给我一个提示如何前进或向我展示代码,以便我可以学习如何制作它?import redef read(eq):    terms = eq.split('+')    equation = [re.split('x\^?', t) for t in terms]    eq_map = []    for e in equation:        try:            coeff = int(e[0])        except ValueError:            coeff = 1        try:            power = int(e[1])        except ValueError:            power = 1        except IndexError:            power = 0        eq_map.append((coeff, power))    return eq_mapdef write(eq_map):    def str_power(p):        if p == 0:            return ''        elif p == 1:            return 'x'        else:            return 'x^%d' % (p,)    def str_coeff(c):        return '' if c == 1 else str(c)    str_terms = [(str_coeff(c) + str_power(p)) for c, p in eq_map]    return "+".join(str_terms)def derivative(eq):    eq_map = read(eq)    der_map = [(p*c, p-1) for c, p in eq_map[:-1]]    return write(der_map)def run(eq):    print (eq, '->', derivative(eq))run("x^4 + 3x^3 + x +x^3")run("x^3 + xy")谢谢 :)
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

首先,您的代码无法处理第二个等式,因为它假定项遵循以下模式:ax^b、a^x、x^b或a,而您给它一个意外的xy。我无法猜测这里的预期输出是什么。如果你想让它在 x 部分之后(或之前)存在,你必须指定如何和实现它。


对于第一个方程,有不同的问题。


一个合乎逻辑的问题是您未能对多边形进行归一化,即将具有相同指数值的项分解。如果不y涉及,很容易做到,但是如果您想处理它们,则必须明确接受并处理具有 2 个变量的多项式。


然后read函数看起来是正确的,只要不y涉及,但我会在这里做规范化:


def read(eq):

    terms = eq.split('+')

    equation = [re.split('x\^?', t) for t in terms]

    eq_map = []

    for e in equation:

        try:

            coeff = int(e[0])

        except ValueError:

            coeff = 1

        try:

            power = int(e[1])

        except ValueError:

            power = 1

        except IndexError:

            power = 0

        eq_map.append((coeff, power))

    # Normalize the polynom

    old = [0, -1]

    new_map = []

    for e in sorted(eq_map, key = lambda x: x[1],reverse=True):

        if e[1] == old[1]:

                old[0] += e[0]

        else:

                old = list(e)

                new_map.append(old)

    return [tuple(i) for i in new_map]

然后str_coeff是错误的,因为1不应该变成''而是保持 1:


def write(eq_map):

    def str_power(p):

        if p == 0:

            return ''

        elif p == 1:

            return 'x'

        else:

            return 'x^%d' % (p,)


    def str_coeff(c, p):

        return '' if (c == 1 and p != 0) else str(c)

    str_terms = [(str_coeff(c, p) + str_power(p)) for c, p in eq_map]

    return "+".join(str_terms)

并且在derivative你不能无条件地放弃最后一项,但如果有的话,放弃0的幂项:


def derivative(eq):

    eq_map = read(eq)

    der_map = [(p*c, p-1) for c, p in eq_map if p != 0]

    return write(der_map)


查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信