2016-03-27 34 views
0

我設法在一個給定的範圍內創建質數列表使用此:如何在Python 3.5中找到給定範圍內的素數總和?

import numpy as np 

num = int(input("Enter a number: ")) 

for a in range(2,num+1):   
    maxInt=int(np.sqrt(a)) + 1 
    for i in range(2,maxInt): 
    if (a%i==0): 
     break 
    else: 
    print (a) 

我想現在發現的所有質數的範圍內的總和,所以我剛放下

print (sum(a)) 

但是,試圖做到這一點的時候,我得到以下回溯:

Traceback (most recent call last): 
    File "C:/Users/Jason/PycharmProjects/stackidiots/scipuy.py", line 11, in <module> 
    print(sum(a)) 
TypeError: 'int' object is not iterable 

回答

1

在你的情況,a是在循環使用的整型變量的存在, 不是一個迭代。

import numpy as np 

num = int(input("Enter a number: ")) 

primes = [] 

for a in range(2,num+1): 

    maxInt= int(np.sqrt(a)) + 1 

    for i in range(2,maxInt): 

    if (a%i==0): 
     break 

    else: 
    primes.append(a) 

print(sum(primes)) 

因此,如果我們只是把它們添加到列表中,我們去打印他們的相反,我們採取的名單primessum時,得到下面的輸出。

Enter a number: 43 
281 
-1

總和他們環路

import numpy as np 

num = int(input("Enter a number: ")) 

result=0 
for a in range(2,num+1):   
    maxInt=int(np.sqrt(a)) + 1 
    for i in range(2,maxInt): 
    if (a%i==0): 
     break 
    else: 
     print (a) 
     result+=a 

print(result) 
0

如果你想使用總和,你可以做一個發電機功能,在循環產生各a讓你有一個迭代調用內總和:

num = int(input("Enter a number: ")) 

def sum_range(num): 
    for a in range(2, num + 1): 
     maxInt = int(a **.5) + 1 
     for i in range(2, maxInt): 
      if a % i == 0: 
       break 
     else: 
      yield a 

print(sum(sum_range(num))) 
相關問題