【发布时间】:2017-07-24 04:24:31
【问题描述】:
这段代码是用 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 是不是太小了?或者更微妙的代码问题?
【问题讨论】:
-
当
print()执行时,我想你会对n的值感到惊讶。将一些调试打印语句添加到您的代码中,以确定它执行时发生的情况;通过这种方式,您可以观看您的代码运行。特别是,在 print() 执行之前打印出n的值,这样您就可以看到代码试图显示的数组索引。 -
就目前而言,当
mylist的长度仍为 0 时,您的代码第一次到达违规行。 -
range(99**99)生成一个与mylist无关的数字列表。 -
没有理由使用
int(n+1),只需使用n+1。 -
可能
n=n+1和print语句应该在for循环之后。而且你不应该有break,因为这意味着循环只会运行一次。
标签: python list python-3.x primes