我正在编写一个数学考试包,其中包含一个模块root.py(和polynomial.py),该模块有效地表示一阶多项式或二项式。我想格式化我创建的class Root:
对象,使其以最简化(人类可读)的形式可视化。例如,如果根的形式为:ax + b
;其中a
和b
表示根的系数,仅当b
!= 0时才存在'+/-',而a
项应省略'+ '>> 1,并从前导系数中删除值1
。
我已经看过这个documentation和这个stack overflow article
以下是一些相关代码:
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'
示例:
上面提到的代码(排序)已经可以工作,但是很冗长。完全公开,我只是期望一种更“ pythonic”的方式来做到这一点。允许字符串格式为b+ax
而不是ax+b
的字符串格式是很好的,但不是必须的,但是这个问题超出了范围。
答案 0 :(得分:1)
如评论中所述,您可以通过使用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
答案 1 :(得分:1)
如果您不想添加其他依赖项,则可以尝试以下操作:
lookup = { 1: 'x', -1: '-x'}
a = lookup.get(a, '{:-d}x'.format(a))