为什么函数 return 在 Python 中出现错误 "list index out of range"?

Why does a function return the error "list index out of range" in Python?

这段代码写在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)

当我运行时,它说"list index out of range",指的是print(mylist[n])。 但是,我一直在 mylist.append(i) 中向列表中添加素数。所以有人可以告诉我这里的问题是什么,因为我不明白发生了什么。 99**99是不是太小了?或者更微妙的代码问题?

问题是您一找到(或找不到)第一个素数就尝试打印出第 10001 个元素。另外,请注意,您从例程中 return 而没有找到 any 素数——如果您要做到这一点的话。无法到达 append 语句。

你到达 print 语句只是因为你的第一次迭代有 i = 0,所以你没有进入 for 循环完全没有。

请遵循发帖指南:花时间研究如何生成质数。它可以比你现在做的快得多,并且会给你一个漂亮、简洁的代码来放入你的程序中。

99**99不算小;如果你真的打印它,你就远远超出了你的需要(如果你试图 运行 它出来,你永远不会完成,这是 657 位的工作)。但是你的循环没有意义;如果它执行一次,你的内部循环将立即 return TrueFalse

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

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