为什么函数会在Python中返回错误“list index out of range”?

时间:2017-03-03 22:15:56

标签: python list python-3.x primes

此代码是用Python 3编写的。我试图找到第10001个素数。

#10001st prime number
mylist=[]
def prime_index(n):
    for i in range(99**99):
        for x in range(2, int(i**1/2)):
            if i % x == 0:
                return False
            return True
            mylist.append(i)
        n=int(n+1)
        print(mylist[n])
        break
prime_index(10001)

当我跑步时,它会说“列表索引超出范围”,指的是print(mylist[n])。 但是,我一直在mylist.append(i)的路上添加素数。所以有人可以告诉我这里的问题是什么,因为我不明白发生了什么。 99 ** 99太小了吗?或者更细微的代码问题?

2 个答案:

答案 0 :(得分:3)

99**99不是太小;如果你真的打印它,你就会超出你的需要(如果你试图将其运行,你永远不会完成它,它的657位工作)。但你的循环毫无意义;如果内部循环执行一次,你的内部循环将立即返回TrueFalse

"幸运的是"对你来说,它永远不会执行一次。第一个外循环第一次将i设置为0,因此内循环根本不运行(侧注,您可能需要i ** (1/2),而不是i ** 1 / 2;取幂优先级高于除法。因为它没有运行,所以你最终会将索引编入一个空列表(并且不要求索引10001)。

此代码中存在太多问题无法解决所有问题;寻找其他试验部门的主要查找代码,以了解它应该是什么样子。

答案 1 :(得分:1)

问题是,一旦找到(或没有)第一个素数,就会尝试打印出第10001个元素。另外,请注意您从例程返回时没有找到任何素数 - 如果您要那么远。无法访问附加语句。

您只需要打印语句,因为您的第一次迭代时i = 0,所以您根本不要输入 for 循环。

请遵循发布指南:花时间研究如何生成素数。它可以比你做得快得多,并且会为你提供一个很好的,简洁的代码来加入你的程序。