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



我正在编程一个数学考试软件包,其中包含一个模块,root.py(and polyenmial.py(,该模块有效地表示一阶多项式或二项式。我想将我创建的class Root:对象格式化以最简化(人类可读(形式可视化。例如,如果根为: ax + b;其中 ab表示根的系数,只有在 b!= 0时才能存在'/-',并且a项应省略' '符号,如果> 1,则省略了从the的值 1领先系数

我已经查看了此文档,以及此堆栈溢出文章

这是一些相关代码:

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,但是这个问题不超出范围。

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

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

如评论中所述,您可以使用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    

最新更新