我正在编程一个数学考试软件包,其中包含一个模块,root.py(and polyenmial.py(,该模块有效地表示一阶多项式或二项式。我想将我创建的class Root:
对象格式化以最简化(人类可读(形式可视化。例如,如果根为: ax + b
;其中 a
和 b
表示根的系数,只有在 b
!= 0时才能存在'/-',并且a
项应省略' '符号,如果> 1,则省略了从the的值 1
领先系数。
我已经查看了此文档,以及此堆栈溢出文章
这是一些相关代码:
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'
示例:
- -3x 7, 3X-7 3x-7
- 7-3x ,-7 3x 7-3x
- -x-1,x 2 不 -1x-1, 1x 2,或1x 2
上面提到的代码已经有效,但是冗长。全面披露,我只期望采用更多的" Pythonic"方式来做到这一点。这是不错的,但不必要的字符串格式允许使用b+ax
的形式,而不是ax+b
,但是这个问题不超出范围。
如果您不想添加其他依赖项,则可以尝试以下操作:
lookup = { 1: 'x', -1: '-x'}
a = lookup.get(a, '{:-d}x'.format(a))
如评论中所述,您可以使用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