首页 > 解决方案 > 是否有内置的 Python3 用于格式化代表多项式的前导系数的字符串?

问题描述

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

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

这是一些相关的代码:

根.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'

例子:

上面提到的代码已经(有点)有效,但是很冗长。完全披露,我只期待一种更“pythonic”的方式来做到这一点。b+ax让字符串格式允许表单而不是 only会很好但没有必要ax+b,但是这个问题超出了范围。

标签: pythonpython-3.xstring

解决方案


正如评论中所说,您可以通过使用 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    

推荐阅读