0

私は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:])
4

2 に答える 2

1

ここで n の値を変更すると、n = int(round(input*(math.log(input,2)))). 元のサイズよりも大きくなっていnます。たとえばinput = 5nが 12 で、明らかにアイテムx_listのみが含まれている場合、インデックス 11 が範囲外であるため、取得することになります。5IndexError

ここで負のインデックスを使用できます。

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
于 2013-07-05T15:42:17.490 に答える
0

ここでの問題は、n までの素数を生成し、それらをリストに格納することです。明らかに、このリストには項目よりも少ないので、素数nを見つけようとすると、 .nth"index out of range error"

これを修正するには、素数が見つかるまで素数を生成するか、nth素数のリストを生成するためにより大きな上限を選択します。これを使用して、この上限を選択できます。

于 2013-07-05T15:36:55.873 に答える