我想获取多项式的系数并将它们存储在一个数组中,例如:
23x³+5x²+10x+5
arr[0]=23
arr[1]=5
arr[2]=10
arr[3]=5
我知道如何评估函数,但在这种情况下,我只想在 python 中获取系数
我想获取多项式的系数并将它们存储在一个数组中,例如:
23x³+5x²+10x+5
arr[0]=23
arr[1]=5
arr[2]=10
arr[3]=5
我知道如何评估函数,但在这种情况下,我只想在 python 中获取系数
假设问题的输入是一个字符串,它表示一个任意次数(最大为 9)的多项式,如下所示:
检测系数的问题可以通过使用正则表达式来解决,该表达式查找可选地后跟一个
x
可选地后跟一个 unicode“指数”字符的数字。下面的正则表达式做到了这一点,尽管它变得比想要处理没有写出系数或指数的情况变得比必要的复杂,因为它是 1:顺便说一句,它会在不同的捕获组中捕获出现在 之前的数字
x
(-
如果系数为负,则为可选),它自己的x
(实际上是可选的,因此它也适用于独立项)和 Unicode 数字指数。x 前面的数字和指数的数字一样是可选的,因为它们可能不像"x+1"
.应用该正则表达式后,我们遍历结果组以保存我们在字典中找到的内容。字典的键是指数,值是对应的系数。有些病例必须以特殊方式检测和处理:
这些特殊情况会使代码有点混乱,如下所示:
这条线
exp = ord(exp) & 0x000F
是一个“肮脏的把戏”。碰巧的是,指数的 Unicode 字符(如数字的 ASCII 码)的排序方式使得它们的最后一个十六进制数字与它们所代表的数字一致。例如,² 的 Unicode 为 0x00B2,³ 的 Unicode 为 0x00B3,⁴ 的 Unicode 为 0x2074,等等,如您在此处所见利用这一事实,
&
我通过逻辑将代码的所有位设置为 0,除了最后 4 位,因此给了我它们所代表的数字。结果是这个字典:
剩下的就是将该字典转换为列表,以便索引是指数,值是系数。为了使事情足够通用,我们首先看看最大的键是什么(在本例中为 3),因为这给了我们多项式的次数,因此得到了结果列表的必要大小。剩下的只是填写:
这种情况下的结果是:
在用户要求相反顺序的问题中,我认为是错误的,因为合乎逻辑的事情是
[i]
该列表的索引为我们提供了 的i
- 次方的系数x
。无论如何,如果你真的需要它,只需做一个finalcoeficientes.reverse()
让我们将以上所有内容放入一个函数中:
注意如果项无序、缺少某些项(相应的系数为零)或系数之间存在间隙,则该算法也有效。如果在减号和数字之间有一个带有空格的负系数,则它不起作用。
输入及其相应输出的示例:
我尝试了更多,并且成功了,但我可能错过了其他一些“特殊情况”。当然,它不做符号运算,所以它也不适用于像
"x+x"
(不添加 x)这样的多项式。更新
如果指数不是 unicode 指数,而是以
x**N
or的形式出现x^N
,则正则表达式会变得有点复杂(承认两种变体),并且将是:也就是说,函数如下:
尝试一些示例似乎可以正常工作: