打印多项式的派生词-python

时间:2019-02-22 11:15:21

标签: python python-3.x

我有一个学校运动课,制作一个程序来打印输入多项式的派生词。我在此站点上找到了一个代码,该代码几乎可以达到我想要的效果。由于我在此特定练习中缺乏编程技能,因此我需要更多帮助。

因此,我需要计算的多项式位于底部的“ run(xxxxxxxx)”行中,并且几乎可以运行。第一个应该打印“ 4x ^ 3 + 12x ^ 2 +1”,但打印“ 4x ^ 3 + 9x ^ 2 +”。第二个,我需要找出如何在多名词组中加上用“ y”进行计算的可能性。

我想问题可能在于程序无法计算所有行,这就是为什么它是9x ^ 2而不是12x ^ 2的原因。

任何人都可以给我小费如何前进或向我展示代码,以便我可以学习如何制作它?

import re

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))
    return eq_map

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):
        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 个答案:

答案 0 :(得分:0)

首先,您的代码无法处理第二个方程式,因为它假设遵循以下模式的项:ax^ba^xx^ba给它一个意外的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)