我刚开始学习python和系统编程。作为家庭作业,我需要找到并打印第n个素数。我写了下面的代码-我可以找到一个小于或等于n的素数列表,但是,我不知道如何从我创建的列表中打印第n个素数。我不断得到索引错误:列表索引超出范围。你知道吗
我想我错过了什么。有人能看看我的代码,给我一些如何修复它的指导吗?非常感谢你的帮助。非常感谢。你知道吗
import sys
import math
def s_prime(n):
is_prime=list(range(n+1))
for i in range(2, int(n**0.5)+1):
if is_prime[i]:
for j in range(i**2,n+1,i):
is_prime[j]=False
print 'Prime Value in Decimal: ', [x for x in is_prime[2:] if x]
x_list = [x for x in is_prime[2:] if x]
print x_list[n-1]
def main(argv):
input = int(sys.argv[1])
if input == 1:
print 2
elif input == 2:
print 3
else:
n = int(round(input*(math.log(input,2))))
s_prime(n)
if __name__ == "__main__":
main(sys.argv[1:])
这里的问题是,您生成的素数最多为n,并将它们存储在一个列表中。很明显,这个列表的项数少于
n
,所以当您试图找到nth
素数时,您会得到"index out of range error"
。你知道吗要解决这个问题,您可以在找到
nth
素数之前生成素数,也可以选择一个更大的上界来生成素数列表。您可以使用它来帮助您选择this上限。你知道吗当您在这里更改n的值时,
n = int(round(input*(math.log(input,2))))
。它现在比原来的n
更大。例如,当input = 5
,n
是12时,显然x_list
只包含5
项,因此您将得到IndexError
,因为索引11超出了范围。你知道吗您可以在此处使用负索引:
return x_list[-1]
获取最后一个元素。你知道吗或者将原始的
input
传递给素数函数:相关问题 更多 >
编程相关推荐