是否有内置的Python3用于格式化表示多项式前导系数的字符串?

时间:2019-05-13 12:40:08

标签: python python-3.x string

我正在编写一个数学考试包,其中包含一个模块root.py(和polynomial.py),该模块有效地表示一阶多项式或二项式。我想格式化我创建的class Root:对象,使其以最简化(人类可读)的形式可视化。例如,如果根的形式为:ax + b;其中ab表示根的系数,仅当b!= 0时才存在'+/-',而a项应省略'+ '>> 1,并从前导系数中删除值1

我已经看过这个documentation和这个stack overflow article

以下是一些相关代码:

root.py

class Root:
    def __init__(self, a=0, b=0):
        # Does stuff with a/b to get coefficients

    def __str__(self):
        a, b = '', '0'
        ### Begin code block of concern
        if self.a:
            b = ''
            if self.a == 1:
                a = 'x'
            elif self.a == -1:
                a = '-x'
            else:
                a = '{:-d}x'.format(self.a)
        ### End code block of concern
        if self.b:
            b = '{:+d}'.format(self.b)
        return a + b # The string '{-}ax{+/-}b'

示例:

  • -3x + 7, 3x-7 + 3x-7
  • 7-3x ,-7 + 3x + 7-3x
  • -x-1,x + 2 -1x-1,+ 1x + 2或1x + 2

上面提到的代码(排序)已经可以工作,但是很冗长。完全公开,我只是期望一种更“ pythonic”的方式来做到这一点。允许字符串格式为b+ax而不是ax+b的字符串格式是很好的,但不是必须的,但是这个问题超出了范围。

2 个答案:

答案 0 :(得分:1)

如评论中所述,您可以通过使用scypy库简化代码,这可能会导致您出现以下情况:

from sympy.core.symbol import Symbol
from sympy.simplify import simplify

x = Symbol('x')
print(simplify(-1 * (-3 * x + 7)))
# >>> output: 3*x - 7

或者,就您而言:

a, b = 3, 2
print(simplify(a * x + b)) # >>> 3*x + 2

a, b = -1, 2
print(simplify(a * x + b)) # >>> 2 - x

a, b = 0, -2
print(simplify(a * x + b)) # >>> -2    

答案 1 :(得分:1)

如果您不想添加其他依赖项,则可以尝试以下操作:

lookup = { 1: 'x', -1: '-x'}
a = lookup.get(a, '{:-d}x'.format(a))