因此,我必须创建一个采用以下形式的字符串的程序:
2x^3 + x^2 - 4
并计算其派生值,即使其像这样:6x^2 + 2x
因此,我正在创建一个class Monomial
具有三个成员变量的变量:系数,变量名称和功效。换句话说,我必须将多项式分解为单项式。然后,我必须将每个单项式分解为上述变量。因此2x^3
将表示为以下对象:Monomial(2, 'x', 3)
但是,我该如何专门分割字符串呢?我不想使用“ SymPy”或其他库来轻松计算导数。
我会使用正则表达式:
pattern = "(\d+)?([a-z])\^(\d+)" result = re.match(pattern, "323x^22") print result.groups()
产生:
('323', 'x', '22')
模式说明如下:
每个括号将包含一个组,第一个括号与由“ \ d”指示的数字匹配,并与尽可能多的由“ +”指示的数字匹配。问号表示如果没有匹配项(例如,因为x ^ 2),则确定为OK。在中心组中,您会看到[az],它将匹配任何单个小写字母。因此,如果您找到“ 23c ^ 2”,它也会匹配。最后,您需要转而使用“ \ ^”转义“ ^”符号,该符号在正则表达式中具有其自身的含义。
result = re.match(pattern, "x^2") print result.groups()
现在,对于输入“ x ^ 2”,此代码将产生:
(None, 'x', '2')
因此只需确保将None替换为1。