如何解决此“浮动不可迭代”错误

时间:2019-06-21 21:05:45

标签: python loops conditional-statements

我正在解决MIT编程入门的问题集。

def compute_deriv(poly):
    """
    Computes and returns the derivative of a polynomial function. If the
    derivative is 0, returns (0.0,).
    """

    der = ()
    for ele in poly :
        if poly.index(ele) == 0 :
            continue
        else:
            der += tuple(ele*float(poly.index(ele)))
    return der

poly = (-13.39, 0.0, 17.5, 3.0, 1.0)    # x^4 + 3x^3 + 17.5x^2 - 13.39

print compute_deriv(poly)

为什么程序试图在此行上进行迭代?并返回不可迭代的错误?不是这样的

der += tuple(ele*float(poly.index(ele)))

1 个答案:

答案 0 :(得分:2)

Python正在解释

tuple(ele*float(poly.index(ele)))

作为 cast ,而不是 wrapper 。您给它一个参数,并假设该参数是一个您要重新格式化为元组的可迭代对象。实际上,您实际上想要创建一个包含该对象的单元素元组。列表和集合也可能发生这种情况,我怀疑您是否执行以下任一操作:

list(ele*float(poly.index(ele)))
set(ele*float(poly.index(ele)))

您将看到与当前遇到的错误相同的错误。


对此最简单的解决方案是仅使用tuple文字,而不是tuple()函数:

der += (ele*float(poly.index(ele)),)

(为了清楚起见,(value,)是1元素元组的语法,因为仅括号是模棱两可的。如果要最大程度地清除,则可以使用一个列表而是在大多数情况下-列表文字是[],而集合文字是{}