2016-08-02 107 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()Python的方式:

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

這對我的作品,但你可以通過搜索關於如何找到Python中的素數,在此網站的多個問題進行改進。 –

+0

@ KennyOstrom肯定,但這不是什麼OP問題;) –

1

不要試圖在一個函數中做的一切。我分開了其餘的邏輯,但我會離開isprime給你:

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

答案應該是這樣的。 [你應該嘗試這個代碼,在這個鏈接。 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

此代碼未通過測試用例sumprimes([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

歡迎來到Stack Overflow!雖然這段代碼片段是受歡迎的,並且可能會提供一些幫助,但如果它包含* how *和* why *的解釋](// meta.stackexchange.com/q/114762),它會[大大改進],這將解決問題。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –