【问题标题】:How to fix this ' float not iterable ' Error如何解决此“浮动不可迭代”错误
【发布时间】:2019-11-04 17:16:04
【问题描述】:

我正在解决麻省理工学院编程入门的问题集。

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)))

【问题讨论】:

  • 您以浮点数作为参数调用tuple(),但您不能这样做。

标签: python loops conditional-statements


【解决方案1】:

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 元素元组的语法,因为只有括号会产生歧义。如果你想最大限度地清楚,你可以只使用列表来代替时间 - 列表文字只是 [] 和集合文字是 {})

【讨论】:

  • 我不会称之为演员表。 tuple() 通过调用类构造函数创建一个新的tuple 对象,该构造函数始终采用可迭代对象。
  • @dhke 好点,我相应地编辑了答案的开头。我不确定是否有更好的方式在正文中表达这一点,但如果您认为有一种方法可以继续编辑帖子以包含它,谢谢
猜你喜欢
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2014-03-16
  • 1970-01-01
相关资源
最近更新 更多