'For'python中的迭代器没有返回正确的答案

时间:2015-06-27 10:20:22

标签: python for-loop iterator

我在python中写了这个来计算给定值下的素数。我执行代码时打印“0”。谁能告诉我为什么我的代码出错了?

def is_prime(x):
    if x<2:
        return False
    else:    
        for value in range(2, x):
            if x%value == 0:
                return False
        else: 
            return True

def primes_in(x):
    primes = [ ]
    for value in range(2, x+1):
        if is_prime(value):
            primes.append(1)
        elif not is_prime(value):
            primes.append(0)
        else: 
            primes.append(0)
    return sum(primes)

print primes_in(25)

3 个答案:

答案 0 :(得分:0)

请参阅range function range(start, stop[, step])

 for value in range(2, x+1):
            if x%value == 0:
                return False

这意味着价值从2x 包括。这意味着必然会有x%value == 0。所以你的函数总是返回False,然后primes是0的列表。

您应该使用for value in range(2, x)

答案 1 :(得分:0)

问题在于你的is_prime函数,你从2循环到x,包括两者,所以x%x总是0,因此它总是返回False。

你只需要循环到数字的sqrt。

示例代码 -

def is_prime(x):
    if x<2:
        return False
    else:    
        for value in range(2, int(x**(1/2))+1):
            if x%value == 0:
                return False
        else: 
            return True

另外,在另一个功能中你应该开始

答案 2 :(得分:0)

def is_prime(x):
    if x<2:
        return False
    else:
        if x == 2:
            return True
        for value in range(2, int(x**(0.5)) + 1):
            if x%value == 0:
                return False
        return True
def primes_in(x):
    primes = []
    for value in range(2, x+1):
        if is_prime(value) == True:
            primes.append(1)
        elif is_prime(value) == False:
            primes.append(0)
        else:
            primes.append(0)
    return sum(primes)
print primes_in(25)