0

我写这段代码

def evaluate_poly(poly, x):
    """
    Computes the value of a polynomial function at given value x. Returns that
    value as a float.

    Example:
    >>> poly = [0.0, 0.0, 5.0, 9.3, 7.0]    # f(x) = 5x^2 + 9.3x^3 + 7x^4 
    >>> x = -13
    >>> print evaluate_poly(poly, x)  # f(-13) = 5(-13)^2 + 9.3(-13)^3 + 7(-13)^4 
    180339.9

    poly: list of numbers, length > 0
    x: number
    returns: float
    """
    # FILL IN YOUR CODE HERE ...
    answer = 0.0
    for i in range(0, len(poly)):
        answer +=poly[i]*(x**i)
    return float(answer)

并始终如一地得到回应

Traceback (most recent call last):
  File "<pyshell#53>", line 1, in <module>
    evaluate_poly( [0.0, 0.0, 5.0, 9.3, 7.0], -13)
  File "/Users/katharinaross/Downloads/ps2/ps2_bisection.py", line 28, in evaluate_poly
    answer +=poly[i]*(x**i)
TypeError: 'list' object is not callable

所有的“””都是我的教授关于代码应该如何运行的例子的注释。这是什么意思?

4

1 回答 1

0

该错误消息是我使用该行时得到的确切消息:

answer += poly(i)*(x**i)

(使用括号而不是方括号)。当我使用方括号时,我得到了正确的答案,如评论中所述:

$ cat qq.py
def evaluate_poly(poly, x):
    """
    Computes the value of a polynomial function at given value x. Returns that
    value as a float.

    Example:
    >>> poly = [0.0, 0.0, 5.0, 9.3, 7.0]    # f(x) = 5x^2 + 9.3x^3 + 7x^4
    >>> x = -13
    >>> print evaluate_poly(poly, x)  # f(-13) = 5(-13)^2 + 9.3(-13)^3 + 7(-13)^4
    180339.9

    poly: list of numbers, length > 0
    x: number
    returns: float
    """
    # FILL IN YOUR CODE HERE ...
    answer = 0.0
    for i in range(0, len(poly)):
        answer +=poly[i]*(x**i)
    return float(answer)

print evaluate_poly ([0.0,0.0,5.0,9.3,7],-13)

$ python qq.py
180339.9

因此,要么您已经竭尽全力修改代码和输出(不太可能),要么您的 Python 解释器处理索引运算符的方式有问题。

由于这在其他环境中运行良好,因此不太可能是该代码本身,因此您需要寻找其他原因。

作为第一步,您应该创建一个文件,其中除了我qq.py上面的文件内容外,什么都没有,然后运行它以查看它是否出现类似的问题。

其次,我会检查你的堆栈跟踪在 () 中提出的文件/Users/katharinaross/Downloads/ps2/ps2_bisection.py实际上是你认为的那个文件。

还要向我们展示整个文件,因为顶部可能有影响给定代码的东西。

我提到了所有这些,因为该异常不在您的示例代码的第 28 行(根据堆栈跟踪),它实际上在第 19 行左右,所以它上面可能有一些您没有向我们展示的东西。

于 2013-09-23T02:26:05.497 回答