Checkio Python 列表难题:索引超出范围错误

2 投票
1 回答
1058 浏览
提问于 2025-04-17 23:08

这是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__

撰写回答