python中的漂亮多项式打印

python中的漂亮多项式打印,python,formatting,Python,Formatting,我将使用什么格式的字符串打印表达式 2x^3+3x^2-6x+1(注意标志两侧的空格) 以及(如果直截了当的话) x^2+2x+1(如果系数为1,则x中没有系数) 我试过在强制标志之间插入填充物,如下所示: "{0: =+}x^2 {1: =+}x {2: =+}".format(1, -2, 3) 但没有出现填充 由于您没有指定,我假设您的表达式已经是字符串形式,您只需要使它们看起来更好。在这种情况下,可以通过一个简单的replace调用在标志的两侧添加空格 def add_spaces_t

我将使用什么格式的字符串打印表达式

2x^3+3x^2-6x+1
(注意标志两侧的空格)

以及(如果直截了当的话)

x^2+2x+1
(如果系数为1,则x中没有系数)

我试过在强制标志之间插入填充物,如下所示:

"{0: =+}x^2 {1: =+}x {2: =+}".format(1, -2, 3)

但没有出现填充

由于您没有指定,我假设您的表达式已经是字符串形式,您只需要使它们看起来更好。在这种情况下,可以通过一个简单的
replace
调用在标志的两侧添加空格

def add_spaces_to_either_side_of_signs(s):
    return s.replace("+", " + ").replace("-", " - ")

expressions = [
    "2x^3+3x^2-6x+1",
    "30.1x^2+60.2x-90.3",
    "x^2+2x+1"
]

for expression in expressions:
    print "non-pretty version:", expression
    print "pretty version:    ", add_spaces_to_either_side_of_signs(expression)
结果:

non-pretty version: 2x^3+3x^2-6x+1
pretty version:     2x^3 + 3x^2 - 6x + 1
non-pretty version: 30.1x^2+60.2x-90.3
pretty version:     30.1x^2 + 60.2x - 90.3
non-pretty version: x^2+2x+1
pretty version:     x^2 + 2x + 1

如果你真的想让你的输出看起来很棒,比如这是一篇你想发表的论文或其他东西,你可以输出LaTeX,它可以排版你的方程式

还有,你知道Sage数学工具吗?它将Python与许多数学库相结合。如果您使用Sage,您可以使用符号方程,您的“工作簿”将显示TeX呈现的方程。Sage使用JavaScript编写的TeX子集来排版您的方程!注意:Sage选择使用
^
操作符进行求幂,正如您在示例中所做的那样。在Sage中,您可以使用
^
而不是
**
键入方程式


假设您有
[1,-6,3,2]
表示
“2x^3+3x^2-6x+1”


表达式的源数据结构是什么?它是字符串、函数、列表还是什么?我想你需要有自己的
\uu str\uu
方法。我不认为这是一个不合理的问题,但请展示一下你迄今为止所做的努力(并解释你的数据结构)。你想要
-x^2+1
还是
-x^2+1
,对于kicks,您可以使用
u”显示内容⁰¹²³⁴⁵⁶⁷⁸⁹"
non-pretty version: 2x^3+3x^2-6x+1
pretty version:     2x^3 + 3x^2 - 6x + 1
non-pretty version: 30.1x^2+60.2x-90.3
pretty version:     30.1x^2 + 60.2x - 90.3
non-pretty version: x^2+2x+1
pretty version:     x^2 + 2x + 1
import re

expressions = ["2x^3+3x^2-6x+1", "30.1x^2+60.2x-90.3", "x^2+2x+1"]

for i in expressions:
  print re.sub('.', lambda m: {'+':' + ', '-':' - '}.get(m.group(), m.group()), i)
class Polynomial(list): 
    def __repr__(self):
        # joiner[first, negative] = str
        joiner = {
            (True, True): '-',
            (True, False): '',
            (False, True): ' - ',
            (False, False): ' + '
        }

        result = []
        for power, coeff in reversed(list(enumerate(self))):
            j = joiner[not result, coeff < 0]
            coeff = abs(coeff)
            if coeff == 1 and power != 0:
                coeff = ''

            f = {0: '{}{}', 1: '{}{}x'}.get(power, '{}{}x^{}')

            result.append(f.format(j, coeff, power))

        return ''.join(result) or '0'
>>> Polynomial([1, -6, 3, 2])
2x^3 + 3x^2 - 6x + 1
>>> Polynomial([1, -6, 3, -2])
-2x^3 + 3x^2 - 6x + 1
>>> Polynomial([])
0