在Python中,如何从整数列表中计算素数之和?

2024-05-14 13:50:10 发布

您现在位置: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)

Tags: 代码in列表forlenifdef测试用例
3条回答

不要试图在一个函数中做所有事情。我把其余的逻辑分开了,但我将把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'
def sumprimes(n):
    s=0
    f=[]
    for i in range (0,len(n)):
        num=n[i]
        if num>1:
            f=[]
            for j in range (1,num+1):
                if num%j==0:
                    f=f+[j]
                if f==[1,num]:
                    s=s+num
    return(s) 

这部分是错误的:

        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

或者以一种更像Python的方式使用all()

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

相关问题 更多 >

    热门问题