2017-09-25 5 views
0

私はこのコードで素数である数の要素を返そうとしています。たとえば、誰かがn = 100に入ると、彼らは2と5に戻ります。私は最初の部分が正しいかどうかをチェックしていると思いますが、どういうわけか、チェックの第2部分で何が欠けているのか分かりません素数の場合因数である素数を見つける

誰かお手伝いできますか?

ありがとうございました。

l = [] 

def factor(n): 

    print 'These are the factors:' 
    for num in range(2,n): 
     if n%num == 0: #checks that it is a factor 
      print num #These are the factors 
      l.append(num)  

    for i in l: 
     if i%2 == 0 and i > 2: #checks for even numbers 
      l.remove(i) 

     else: 
      for x in range(3,i,2): #checks for odd numbers 
       if i%x == 0: 
        l.remove(i) 


    print l 
+0

私は100で試してみましたが、[2,5,20,50]を返しました。 20と50はなぜ取り除かれないのですか? また、90で試してみましたが、 "list.remove(x):xがリストにない"というエラーが表示されます。 理由を十分に理解できないのですか?誰かが説明できますか? – paulnsn

答えて

2

問題は、ループしている間にリストから削除されてしまうことです。背後では、基本的にiカウンターでforループを実行しています。したがって、index = 1(この場合値は4)になっていると、それを削除してインデックスを増やします。その結果、値5は、4の前の位置に移動され、インデックスがインクリメントされます。これにより値5は決してチェックされません。あなたの値が2050の場合も同様です。彼らは決してチェックされていないので、削除されません。

+0

ありがとうございます。どのように私がこれを実装することができるかについてのアイデア – paulnsn

+0

私はそれを行う方法は、最後にループし、単にあなたが望むものを選び、新しいリストを構築することであると思います。おそらく、ラムダ関数を使ってPythonを実行する方法がありますが、それはもう少し進んでいます。 –

関連する問題