IndexError:列表索引超出范围我不明白

时间:2016-06-19 02:53:48

标签: python list indexing

这个程序应该把所有可以被3和5整除的数字并将它们全部加在一起,但我不明白,我试着运行这个脚本,它只是一直给我错误:

Traceback (most recent call last):
File "first.py", line 23, in <module>
main()
File "first.py", line 19, in main
merica = merica + good[count-1]
IndexError: list index out of range

我不明白这意味着什么,因为

count-1 

是否在索引的范围内?

def main():
    merica = 0
    commonfactors = []
    good = []
    count = 1

    while count <= 1000:
            if count%3 == 0:
                    good.append(count)
            elif count%5 == 0:
                    if count in good:
                            commonfactors.append(count)
                    else:
                            good.append(count)
            count = count+1
    count = count - 1000
    while count <= 1000:
            merica = merica + good[count-1]
            count = count+1
    print(merica)
main()
exit()

任何帮助都会非常感谢!

3 个答案:

答案 0 :(得分:0)

整个块假定good的长度不准确。

while count <= 1000:
        merica = merica + good[count-1]
        count = count+1

如果您只在其中放置,则长度不能为1000.

无论如何,您应该了解内置的sum()函数:

good = [1, 2, 3]
merica = sum(good)

您可能还会发现range()功能也很有用:

for number in range(1000):
    # This will loop 1000 times with number equal to 0 to 999.

这转变为代码审查......但你为什么要这样做:

count = count - 1000

而不只是设置count = 0

你也可以从一些更具防御性的风格编程中受益。了解如何使用assert

count = count - 1000
assert count == 0

assert count-1 < len(good)
merica = merica + good[count-1]

这些断言将帮助您快速跟踪您正在做出的假设。

祝你好运!

答案 1 :(得分:0)

当计数为3或5(不是两者)的倍数时,您只需将数字附加到好。

所以,好的大小不会是1000。

这就是你收到错误的原因。

你的下面的循环只能运行到最高计数&lt; = 466。

def main():
    merica = 0
    commonfactors = []
    good = []
    count = 1

    while count <= 1000:
            if count%3 == 0:
                    good.append(count)
            elif count%5 == 0:
                    if count in good:
                            commonfactors.append(count)
                    else:
                            good.append(count)
            count = count+1
    count = count - 1000
    while count <= len(good):
            merica = merica + good[count-1]
            count = count+1
    print(merica)
main()
exit()

答案 2 :(得分:0)

由于错误表明列表索引超出范围,因此请考虑列表的长度以及我们尝试使用的索引。在这里,假设列表good中有1000个项目,因为while循环最多可达1000个。

while count <= 1000:
        merica = merica + good[count-1]
        count = count+1

好的,现在我们看到程序希望列表中有1000个项目。在构建列表时,让我们看看是否成立。

while count <= 1000:
        if count%3 == 0:
                good.append(count)
        elif count%5 == 0:
                if count in good:
                        commonfactors.append(count)
                else:
                        good.append(count)
        count = count+1

现在我们看到正在通过向值附加值来构造列表,其中值从1到1000.但是我们应用条件来追加它,也就是说,它必须可以被3或5整除。那么什么关于素数?没有else块附加这些数字。因此,我们不会附加完整的1000个数字,但只追加可被5或3整除的数字。

解决方案是改变我们关于第二个while块中循环大小的假设。 while count <= len(good):将根据列表的大小调整长度。