Python 返回数组中元素的总和,同时忽略位于元素6和9(也包括)之间的所有元素
这就是全部问题: 返回数组中数字的总和,但忽略从6开始并延伸到下一个9的数字部分除外(每6后面至少有一个9)。返回0表示没有数字 输出的示例如下:Python 返回数组中元素的总和,同时忽略位于元素6和9(也包括)之间的所有元素,python,for-loop,enumerate,Python,For Loop,Enumerate,这就是全部问题: 返回数组中数字的总和,但忽略从6开始并延伸到下一个9的数字部分除外(每6后面至少有一个9)。返回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的单独列表,并
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之后的元素添加到新数组中,直到迭代器达到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
代码:
*注:
您需要更好地命名变量。例如,在您的代码中:
for x, i in enumerate(arr):
应该是:
for index, value in enumerate(arr):
因此,您可以更好地阅读或调试错误。迭代器解决方案(我喜欢这些):
这主要是对这些值进行求和。每当遇到
6
时,不在其中的9
将消耗所有值,直到下一个9
(这是错误的,因此从6
到9
的所有值都不会计入总和)。感谢您指出这一点。我更改了值,但是对于问题中提到的第二个和第三个数组示例,我没有得到正确的答案。答案分别是33和23。无法理解。如果i<6或i>9:sum+=arr[x]没问题,伙计,请用sum+=arr[x]代替sum+=arr[i],使用sum+=arr[x]将不会使索引器:列表索引超出范围,但结果sum与此逻辑错误请共享整个错误消息,这是我见过的最短的解决方案。谢谢。@versacecrispies顺便说一句,这个问题在什么地方出现了吗?我总是喜欢在问题出现的地方提交解决方案,以获得额外的验证。例如,所示的所有三个示例也可以用sum(arr中的x表示x,如果不在6@HeapOverflow中,请您解释一下“如果x!=6或9不在其中”是如何工作的?@pk786如果x不是6,它就包含在sum中。如果它是6,那么9不在其中会消耗所有东西,直到下一个9(这是假的,所以没有一个算入总数)。@pk786好吧,为了确定里面是否有9,它需要检查它,直到找到一个为止(或者直到最后,但问题保证有一个)。
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)