如何从列表打印?

2024-04-23 18:54:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始学习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:])

Tags: in列表forinputifismainsys
2条回答

这里的问题是,您生成的素数最多为n,并将它们存储在一个列表中。很明显,这个列表的项数少于n,所以当您试图找到nth素数时,您会得到"index out of range error"。你知道吗

要解决这个问题,您可以在找到nth素数之前生成素数,也可以选择一个更大的上界来生成素数列表。您可以使用它来帮助您选择this上限。你知道吗

当您在这里更改n的值时,n = int(round(input*(math.log(input,2))))。它现在比原来的n更大。例如,当input = 5n是12时,显然x_list只包含5项,因此您将得到IndexError,因为索引11超出了范围。你知道吗

您可以在此处使用负索引:

return x_list[-1]获取最后一个元素。你知道吗

或者将原始的input传递给素数函数:

def s_prime(n, inp):
    print n
    #you code here....
    print x_list[inp-1] 

def main(argv):
     #your code
        n = int(round(input*(math.log(input,2))))
        s_prime(n, input) #pass input here

相关问题 更多 >