TypeError:'list'对象不可调用 - Python

时间:2013-09-23 02:18:40

标签: python-2.7

我写这段代码

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

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

1 个答案:

答案 0 :(得分: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行附近,所以可能有一些你没有向我们展示的东西。