为什么我的素数函数不起作用?

时间:2016-08-02 09:22:07

标签: python if-statement for-loop primes prime-factoring

我是编程新手,在尝试编写程序时查找素数时遇到了问题。这是我的代码:

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

我收到错误声明&#34;您的功能在is_prime(3)上失败。当它应该返回True时返回None。&#34;

有人可以解释一下这段代码中的缺陷吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

range()有一个exclusive upper bound,所以它试图得到2到2(3 - 1)之间的范围,这不是元素。由于你不能迭代,for循环永远不会运行,所以返回None(如果没有指定函数,这是函数的默认返回类型。)

您当前问题的解决方案是使用range(2, x)而不是range(2, x - 1)。你会发现x&gt;你会遇到问题3但是因为@khelwood说,你在检查第一个值后立即返回TrueFalse。相反,只有在检查范围内的所有值后才返回True

答案 1 :(得分:0)

def is_prime(x):
    if x < 2:
        return False
    elif x == 2:
        return True
    else:
        for n in range (2,x): # range function will iterate till x-1
            if x % n == 0:
                return False
        # return true only at the end after making sure it is not divisible by any number in the middle
        return True