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