1

素数のリストを取得するために、pop および remove 関数を使用してリストから 2 から 100 までの数字を削除しようとしています。主な問題は、k が常にエラーを引き起こすことです。また、 の後に print 関数を配置すると、k偶数のみが表示されますが、なぜそれが起こっているのかわかりません。

x=[] 
for i in range(2,100): 
    x.append(i)

primes=[]

count=0

while count < 99:
    k = x[count]
    print(k)
    primes.append(k)
    """for j in range(2,100):
        if k % j ==0:
            x.remove(j)"""
    x.pop(count)
    count = count + 1

print(x)
4

3 に答える 3

2

反復処理中にリストから要素を削除しているため、エラーが発生する可能性があります。

リスト[x, y, z]を考えてみましょう。位置 0 にいます。位置 0 の要素を削除することにした場合、Python はループの次の反復で位置 1 のチェックに進みます。ただし、位置は要素を参照しますz(リスト内の位置 1[y, z]zではなく であるためy)。

于 2013-11-12T15:45:56.523 に答える
2

範囲外:

xlenは 98 で、whileループは 48 回カウントされます....

そのように簡単に修正できます(While条件を に修正しただけですcount < 48):

    x=[]
    for i in range(2,100):
        x.append(i)

    primes=[]

    print len(x)

    count=0

    while count < 48:
        k = x[count]
        print(k)
        primes.append(k)
        """for j in range(2,100):
            if k % j ==0:
                x.remove(j)"""
        x.pop(count)
        count = count + 1

    print(x)
于 2013-11-12T15:45:59.600 に答える
0

素数をまったくテストしていません。奇数をすべて削除しているため、偶数のみを取得しています。論理的には、不要な要素をさらに削除するためにリストを事前に入力する必要はありません。

探しているものは次のとおりです。

def is_prime(n):
    if n < 2 or (n % 2) == 0:
        return n == 2

    f = 3

    while (f * f) <= n:
        if (n % f) == 0:
            return False

        f += 2

    return True

primes = [n for n in range(2, 100) if is_prime(n)]
print(primes)
于 2013-11-12T15:50:45.013 に答える