Return 数组中元素的总和,同时忽略元素 6 和 9 之间的所有元素(也包括在内)

Return the sum of elements in an array while ignoring all elements that lie in between elements 6 and 9 (also included)

这就是整个问题:

Return 数组中数字的总和,除了忽略以 6 开头并延伸到下一个 9 的数字部分(每个 6 后面至少有一个 9)。 Return 0 表示没有数字。

输出的示例如下:

summer_69([1, 3, 5]) --> 9
summer_69([4, 5, 6, 7, 8, 9]) --> 9
summer_69([2, 1, 6, 9, 11]) --> 14

我尝试使用我自己的方法,尽管还有其他可用的解决方案,但我想知道为什么我的解决方案出错。 我试图初始化一个名为 arr1 的单独列表,我打算遍历给定的数组,直到它到达第一个 6。然后我想继续将 6 之后的元素添加到新的数组 arr1 直到迭代器达到 9。至于其余数字,我在代码的 else 块中将它们相加。

这是我的解决方案:

def summer_69(arr):
    sum = 0
    arr1 =[]
    for x,i in enumerate(arr):
        if i == 6:
            while arr[x]!=9:
                arr1 = i
                x+=1
        else:
            sum += arr[i]
    return sum

我收到以下错误:

IndexError: list index out of range

谁能指出为什么它会给我这个错误?

你的错误在这一行:

    sum += arr[i]

您传递的值应该是索引。只需将 i 更改为 x

代码:

def summer_69(arr):
    sum = 0
    arr1 =[]
    for x, i in enumerate(arr):
        if i == 6:
            while arr[x]!=9:
                arr1 = i
                x += 1
        else:
            sum += arr[x]
    return sum

*注意:

您需要更好地命名您的变量。例如,在您的代码中:

for x, i in enumerate(arr):

应该是:

for index, value in enumerate(arr):

因此您可以更好地阅读或调试错误。

迭代器解决方案(我喜欢那些):

def summer_69(arr):
    it = iter(arr)
    return sum(x for x in it if x != 6 or 9 not in it)

这里主要是对数值求和。每当遇到 6 时,9 not in it 会消耗所有值,直到下一个 9(它是错误的,所以 none 从那个 6 到那个9算进总和)。