我正在编写一个程序来评估多项式,作为系数元组给出(从0度到n度)。我定义了函数,然后使用多项式的raw_inputs和x的值来调用它。
这是在Python 2.5.4
中这是一个关于编程的在线课程的练习,对于我的生活,我无法弄清楚出了什么问题;我的程序也与给定的解决方案相同,它返回相同的错误:
"line 19, in evaluate_poly
polySum += poly[n] * (x ** n)
TypeError: can't multiply sequence by non-int of type 'float'"
代码如下:
def evaluate_poly(poly, x):
"""
Computes the polynomial function for a given value x. Returns that value.
Example:
>>> poly = (0.0, 0.0, 5.0, 9.3, 7.0) # f(x) = 7x^4 + 9.3x^3 + 5x^2
>>> x = -13
>>> print evaluate_poly(poly, x) # f(-13) = 7(-13)^4 + 9.3(-13)^3 + 5(-13)^2
180339.9
poly: tuple of numbers, length > 0
x: number
returns: float
"""
polySum = 0.0
for n in xrange(0, len(poly)-1,1):
polySum += poly[n] * (x ** n)
return polySum
function = tuple(raw_input('Enter your polynomial as a tuple of numbers, going from degree 0 to n: '))
x = float(raw_input('Enter the value of x for which your polynomial is to be evaluated: '))
print 'f(x) =', evaluate_poly(function, x)
对于第一个输入我将执行类似(1,1,1,1)的操作然后我将为第二个输入1,并且我得到上述错误。
这里发生了什么?我认为for循环中带有变量n的括号只会索引元组中的每个连续值,但错误似乎是说poly [n]是一个序列而不是一个数字。
感谢您的帮助。
答案 0 :(得分:2)
function = tuple(raw_input('Enter your polynomial as a tuple of numbers, going from degree 0 to n: '))
此行不符合您的想法。以下是它的作用示例:
>>> function = tuple(raw_input('Enter your polynomial as a tuple of numbers, goi
ng from degree 0 to n: '))
Enter your polynomial as a tuple of numbers, going from degree 0 to n: (1, 1)
>>> function
('(', '1', ',', ' ', '1', ')')
它接受用户的输入字符串并将其转换为单个字符的元组。如果您希望用户输入文字元组并对其进行处理,请尝试ast.literal_eval
:
import ast
function = ast.literal_eval(raw_input('Enter your polynomial as a tuple of numbers, going from degree 0 to n: '))
虽然我们正在修复错误,但值得注意的是您的评估代码存在错误:
for n in xrange(0, len(poly)-1,1):
由于xrange
返回的序列排除stop
参数,因此在多项式的最后一个项之前停止。你想要
for n in xrange(len(poly)):
或更好,使用enumerate
,或使用不需要索引和取幂的评估算法:
value = 0
for i in reversed(poly):
value = x*value + i
答案 1 :(得分:0)
tuple()
没有按照您的想法行事。请改为ast.literal_eval()
。