我正在解决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)))
答案 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元素元组的语法,因为仅括号是模棱两可的。如果要最大程度地清除,则可以使用一个列表而是在大多数情况下-列表文字是[]
,而集合文字是{}
)