如何从列表中打印?

时间:2013-07-05 15:32:54

标签: python list operating-system

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

2 个答案:

答案 0 :(得分:1)

在此处更改了n的值n = int(round(input*(math.log(input,2))))。它现在比原始n更大。例如,当input = 5时,n为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

答案 1 :(得分:0)

这里的问题是你生成的素数最多为n并将它们存储在列表中。显然,此列表的项目少于n,因此当您尝试查找nth素数时,您会获得"index out of range error"

要解决此问题,您可以随时生成素数,直到找到nth素数,或者您可以选择更大的上限来生成素数列表。您可以使用它来帮助您选择this上限。