无法完全弄清楚什么不起作用(检查"Even the Last"练习)



您将得到一个整数数组。你应该找到偶数索引的整数的和(第0,第2,第4…(。然后把这个和的数字和数组的最后一个元素相乘。不要忘记,第一个元素的索引为0。对于空数组,结果将始终为0(零(。输入:整数列表。输出:整数形式的数字。前提条件:0≤len(数组(≤20all(数组中x的isistance(x,int((all(对于阵列中的x,-100<x<100

result = 0 
if array:
for element in array: 
i = array.index(element)
if i%2 == 0:
result += element
else:
pass
else:
return 0
return result
Last_digit = array[-1]
final_result = result*Last_digit
return final_result
print(final_result)```

我已经解决了问题,您已经共享了有问题的数组。既然你有这个阵列:

[-37,-36,-19,-99,29,20,3,-7,-64,84,36,62,26,-76,55,-24,84,49,-65,41]

如果您注意到这里,84会出现两次,第一次出现在索引9,然后出现在索引16。用于获取元素索引的方法.index返回元素在列表中找到的第一个实例的索引。因此,对于值84,索引取为9,而不是16,这是一个奇数,这不会将84添加到您的总和中。您应该为代码使用enumerate

for idx, element in enumerate(array):             
if idx %2 == 0:
result += element

首先,我建议阅读stackexchange关于发布格式良好的问题的指南。您需要说明您的目标是什么,您尝试了什么,抛出了什么错误,输出应该是什么样子——以及代码示例和所需的最小可复制示例。

不过,我还是会帮你的。

您在第11行有一个悬空的return

else:
return 0
return result

这毫无意义,因为您已经返回了0。这显然也是一个函数的片段,不是吗?张贴整个功能。但根据说明,你可以试试这个:

import random
array = random.sample(range(-100, 100), 20)
def etl_func(arr):
arrsum = 0
for i, val in enumerate(arr):
if i%2 == 0: arrsum += val
return (arrsum * arr[-1])

answer = etl_func(array)
print(answer)

请注意,如果您已经给定了要使用的数组,则不需要导入random并使用array = random.sample(range(-100, 100), 20)。它们只是作为一个例子包含在这里。

还要注意,没有必要使用else: pass。如果条件评估为真(即i%2 == 0(,则将执行if块。如果i%2 != 0,循环将自动短路,并进入下一次迭代。添加else: pass就像告诉坐在你椅子上的人坐在你的椅子上。你告诉程序做它无论如何都要做的事情。如果它真的想的话,那么包含else: pass并不一定有什么错……但它只是添加了几行毫无意义的代码,没有人愿意处理这些代码。

EDIT:我不知道你应该写一个函数还是只写一些代码(回到"问一个格式良好的问题"的问题…(,所以我选择了一个函数。将函数转换为纯代码应该很简单,但您希望养成编写良好函数以实现可重用性和模块化的习惯。使一切运行更加平稳优雅,并使故障排除更加容易。

此函数也适用于原始帖子评论中提到的数组。

此外,如果您需要直接替换代码(而不是函数……我不熟悉checkio或答案的格式(,并且您已经在变量array中存储了整数数组,请尝试以下操作:

arrsum = 0
for i, val in enumerate(array):
if i%2 == 0: arrsum += val
print(arrsum * array[-1])

由于您的问题没有说明使用或定义函数,因此return语句不应该出现在任何位置。除非您正在编写函数,否则不会返回任何内容。

最新更新