我将使用什么格式字符串来打印像
这样的表达式 2x^3 + 3x^2 - 6x + 1
(注意标志两侧的空格)
30.1x^2 + 60.2x - 90.3
和(如果直截了当)
x^2 + 2x + 1
(如果系数为1,则x中的术语没有系数。)
我尝试在这样的强制符号之间插入填充:
"{0: =+}x^2 {1: =+}x {2: =+}".format(1, -2, 3)
但不显示填充。
答案 0 :(得分: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
答案 1 :(得分:1)
假设您[1, -6, 3, 2]
代表"2x^3 + 3x^2 - 6x + 1"
:
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
答案 2 :(得分:0)
如果你真的希望你的输出看起来很棒,比如这是你要发布的纸张或其他东西,你可以输出LaTeX来排序你的等式。
http://oneau.wordpress.com/2011/12/25/latex-sympy/
Print latex-formula with python
另外,你知道Sage数学工具吗?它将Python与众多数学库相结合。如果你使用Sage,你可以使用符号方程式,你的“工作簿”将显示TeX渲染的方程式。 Sage使用JavaScript编写的TeX子集来排版方程式!注意:Sage选择使用^
运算符进行求幂,就像您在示例中所做的那样。在Sage中,您可以使用^
而不是**
键入方程式。
答案 3 :(得分:0)
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)