Checkio Python 列表难题:索引超出范围错误
这是checkIo上的问题描述 -
“你会得到一个整数数组。你需要找到偶数索引(0、2、4……)的元素之和,然后把这个和与数组的最后一个元素相乘。别忘了,第一个元素的索引是0。对于一个空数组,结果总是(零)。”
结果应该是这样的 -
if __name__ == '__main__':
assert checkio([0, 1, 2, 3, 4, 5]) == 30, "(0+2+4)*5=30"
assert checkio([1, 3, 5]) == 30, "(1+5)*5=30"
assert checkio([6]) == 36, "(6)*6=36"
assert checkio([]) == 0, "Empty"
这是我想到的解决方案 -
def checkio(array):
total = sum(array[::2]) * array[-1]
return total
前面三个结果运行得还不错。最后一个结果却出现了索引超出范围的错误。我无法解决这个问题。可能我的代码整体上都是错的。但因为前面三个结果是成功的,所以我不太确定。
最后,我不太明白这个是用来做什么的 -
if __name__ == '__main__':
1 个回答
2
你需要这样做:
def checkio(array):
if array:
return sum(array[::2]) * array[-1]
else:
return 0
或者你可以用一行代码来实现:
def checkio(array):
return sum(array[::2]) * array[-1] if array else 0
关于
if __name__ == '__main__'
我这里有个很好的回答:
if __name__ == "__main__": 是干什么的?
简单来说,__main__
是你当前执行的顶层模块的名字,只有在这个顶层模块中,这段代码才会执行。你可以在解释器里输入 __name__
,它会返回相同的结果。或者在你正在执行的模块里,加上:
print('__name__ is: ', __name__ )
然后你会看到,当你执行这个模块时,它会打印出 __main__
。