python - 是否有内置的 Python3 用于格式化代表多项式的前导系数的字符串?
问题描述
我正在编写一个数学考试包,其中包含一个模块 root.py(和 polynomial.py),它有效地表示一阶多项式或二项式。我想将class Root:
我创建的对象格式化为最简化(人类可读)的形式。例如,如果根的形式是:ax + b
; 其中a
和b
表示根的系数,'+/-' 应该仅在b
!= 0 时存在,并且a
如果 > 1,则该术语应省略 '+' 符号,并省略1
前导系数中的值。
这是一些相关的代码:
根.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
让字符串格式允许表单而不是 only会很好但没有必要ax+b
,但是这个问题超出了范围。
解决方案
正如评论中所说,您可以通过使用 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
推荐阅读
- java - 属性 [project] 标有矛盾的注释
- r - dplyr:在 for 循环中获取分组的最小和最大列
- python - 在 Django Model 数据库函数中使用 Unaccent
- java - 我无法使用 Selenium 启动浏览器
- python - 按值而不是引用在列表中分配值
- smtp - 为什么即使在配置 SMTP 之后 prestashop 电子邮件也无法正常工作?
- algorithm - 从给定数字中获取所有可能的操作组合的算法
- html - 背景图像未使用 CSS 显示
- c++ - 如何为我的游戏设置主菜单场景?QT C++
- node.js - 如何使用 listObjectV2 和 NodeJs 从 S3 AWS 获取对象列表?