我正在做自己的方法来解决多项式问题的导数只是为了好玩。但我想出了一个问题。我无法从'*x**2'
删除或删除array_1 = '3*x**3 + 2*x**2 + 3*x + 5'
以获取此类数组; array = [3, 2, 3, 5]
。
array_1 = '3*x**3 + 2*x**2 + 3*x + 5'
def converter(array_1):
array_1 = array_1.split(' + ')
return str(array_1)
array = [5, 3, 2] # for testing ( I reversed order of an array.)
def derivative(array):
new_array = []
for x, elem in enumerate(array):
z = x*elem
new_array.append(z)
return new_array[1:]
result = derivative(array)
print(result)
print(converter(array_1))
答案 0 :(得分:2)
你的array
只是一个字符串 - 它只是一系列字符。所以每个elem
只是一个字符。您需要做的是编写解析器。
对于这么简单的事情,您可以使用字符串操作解析所有内容,或者regular expressions如果您知道如何使用它们或想要阅读它们的教程。这是一个只有str
类的方法的例子:
s = '3*x**3 + 2*x**2 + 3*x + 5'
for term in s.split('+'):
coefficient, _, factor = term.partition('*')
variable, power = factor.partition('**')
do_something_with(coefficient, variable, power)
(当然您可能希望将coefficient
和power
转换为do_something_with
代码中的数字,但这很简单;只需使用int
或float
。)
但这会有些脆弱。它会处理您拥有的确切格式(只要do_something_with
可以处理额外的空格,并且variable
和power
使用空字符串 - 只需调用int
或float
可以处理前者,但不能处理后者。但是,如果你尝试使用3 * x**3 + 2 * x**2 + 3 * x + 5
,它就会失败。
更好的选择是使用解析或解析器生成库。这有一点学习曲线,但值得做。例如,pyparsing
是一个相当容易学习的东西,有一些很棒的教程,它有广泛的examples,其中一个我认为非常接近你的#39}做的。
最后,您的格式恰好是Python语法的一个子集。您可以通过使用Python附带的Python解析器ast
来利用它。但是,这并不是一个新手友好的选择。
答案 1 :(得分:0)
这就是我所做的。我知道它不起作用。我会尝试改进它。
array_1 = '3*x**3 + 2*x**2 + 3*x + 5'
def converter(array_1):
array_1 = array_1.split(' + ')
print(array_1)
new_array = []
for x in array_1:
new_array.append(x[-0])
return new_array
array = [5, 3, 2] # for testing
def derivative(array):
new_array = []
for x, elem in enumerate(array):
z = x*elem
new_array.append(z)
return new_array[1:]
result = derivative(array)
print(result)
print(converter(array_1))
输出:
[3, 4]
['3*x**3', '2*x**2', '3*x', '5']
['3', '2', '3', '5']