大家好,我几乎用我的代码更正了,现在是:
def general_poly (L):
""" L, a list of numbers (n0, n1, n2, ... nk)
Returns a function, which when applied to a value x, returns the value
n0 * x^k + n1 * x^(k-1) + ... nk * x^0 """
def inner(x):
L.reverse()
return sum(e*x**L.index(e) for e in L)
return inner
但在我测试时给出错误4应该给189但是给我18
由于
答案 0 :(得分:1)
inner
您的方法中有一些应该清理的东西。首先,当您调用L.reverse()
时,实际上是在反转传递给general_poly
的变量引用的列表。您应该使用reversed
,它是原始列表的可迭代副本,反转。
def general_poly(L):
""" ... """
def inner(x):
enum_iter = enumerate(reversed(L))
return sum(e * pow(x, i) for i, e in enum_iter)
return inner
此外,您还会看到我已在reversed(L)
中包含enumerate
调用,该调用返回包含索引和元素的元组可迭代的价值。这意味着您不需要在循环迭代中使用L.index()
方法,从而节省了查找时间。另外,我个人更喜欢使用pow
而不是**
语法,因为我认为它读得更清楚,但这只是我的偏好。
general_poly
让我们用一个例子来测试一下。如果我使用[1, 2, 3]
生成多边形函数,则应返回表示方程x^2 + 2x + 3
的函数。
func = general_poly([1, 2, 3])
print(func(3)) # 18
print(func(4)) # 27
print(func(5)) # 38