我的功能general_poly只是一个小错误

时间:2017-06-30 20:25:22

标签: python

大家好,我几乎用我的代码更正了,现在是:

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

由于

1 个答案:

答案 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