2016-08-02 7 views
1

私はこれに助けが必要です。 与えられた整数のリストから素数の和を求めたいと思います。同じテストケースがいくつかあります。Pythonで整数のリストから素数の合計を計算するには?

n([3,3,1,13]) 

19 

n([2,4,6,9,11]) 

13 

n([-3,0,1,6]) 

0 

次のように私が書いたコードがあるが、それは上記のテストケースで失敗..

def sumprimes(n): 
    sum1 = 0 
    for i in range(0,len(n)): 
     num = n[i] 
     if num > 1: 
      for j in range(2, int(num**0.5)+1): 
       if num%j != 0: 
        sum1 = sum1 + num 
     else: 
      sum1 = 0 
    return(sum1) 

答えて

5

この部分が間違っている:

 for j in range(2, int(num**0.5)+1): 
      if num%j != 0: 
       sum1 = sum1 + num 

あなたがのためにnumを加算しています分割しなかった範囲の各数値。 すべてが分割されていない場合は、合計する必要があります。これを行うには

簡単な方法は次のとおりです。

 prime = True 
     for j in range(2, int(num**0.5)+1): 
      if num%j == 0: 
       prime = False 
       break 
     if prime: 
      sum1 = sum1 + num 

またはall()を使用して、より神託のように:

 if all(num%j != 0 for j in range(2, int(num**0.5)+1)): 
      sum1 = sum1 + num 
+0

。 –

+0

@KennyOstrom確かに、それはOPの質問ではありません;) –

1

1つの関数に全力を尽くすしようとしないでください。私はロジックの残りの部分を分けましたが、私はあなたに任せます:

def isprime(x): 
    # Replace this with your code 
    # separate function so it can have its own tests 
    return x in [3, 13, 11, 2] 

def sum_prime_numbers_in_list(l): 
    return sum([x for x in l if isprime(x)]) 

if 19 != sum_prime_numbers_in_list([3, 3, 1, 13]): 
    raise ValueError 
else: 
    print 'pass' 

if 13 != sum_prime_numbers_in_list([2, 4, 6, 9, 11]): 
    raise ValueError 
else: 
    print 'pass' 

if 0 != sum_prime_numbers_in_list([-3, 0, 1, 6]): 
    raise ValueError 
else: 
    print 'pass' 
0

回答はこれでなければなりません。 [このコードでこのコードを試してください。私のために動作しますが、あなたは、このサイト上で、Pythonで素数を見つける方法について複数の質問を検索することによって、それを改善することができますGist]

def sumprimes(n): 
sum1 = 0 
for i in range(0,len(n)): 
    num = n[i] 
    if num > 1: 
     prime = True 
     for j in range(2, int(num**0.5)+1): 
      if num%j == 0: 
       prime = False 
       break 
     if prime: 
      sum1 = sum1 + num 
     #else: 
     # sum1 = 0 
return(sum1) 
+0

このコードは、テストケースが失敗しました([3,3,1,13]) –

+0

https://gist.github.com/Jayhalani/aa7ddf085bea9d1057644a93753f8813このリンクの完全なコード – user4575112

0
> def sumprimes(n): 
    sum=0 
    fact=[] 
    for i in range (0,len(n)): 
     num=n[i] 
     if num>1: 
      fact=[] 
      for j in range (1,num+1): 
       if num%j==0: 
        fact=fact+[j] 
     if fact==[1,num]: 
      sum=sum+num 


    return(sum) 
+1

ようこそスタックオーバーフロー!このコードスニペットは歓迎されていますが、いくつかの助けを与えるかもしれませんが、* how *と* Why *がこの問題を解決するのは、説明があれば大幅に改善されます(// meta.stackexchange.com/q/114762) 。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –

関連する問題