繁体   English   中英

为什么函数会在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)

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

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

“幸运的是”,它永远不会执行一次。 第一个外循环第一次将i设置为0,因此内循环根本不运行(侧注,你可能想要i ** (1/2) ,而不是i ** 1 / 2 i ** (1/2) ;取幂有更高优先于分裂)。 因为它没有运行,所以你最终索引到一个空列表(并且不要求索引10001)。

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

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

你得到print语句只是因为你的第一次迭代有i = 0,所以你根本不进入for循环。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM