'如果'条件行为不端

时间:2014-05-04 13:12:08

标签: python if-statement conditional-statements

这是一个代码,用于确定输入是否为PRIME编号。

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

if循环中的for条件并未按预期工作。如果x < 2,则应返回false。所以is_prime(1)应该返回false,因为1小于2.但程序返回True,这是不期望的。另一方面,如果你把if放在for循环之外就像这样,IT工作:

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

为什么会这样?

2 个答案:

答案 0 :(得分:2)

在这里,

for n in range(2, x - 1):

如果x == 1,for循环永远不会运行,那么,你实际上是在说:

for n in range(2, 0):

这不可能发生,所以它只是从else语句中返回True。

你的第二个函数有效,因为正如你所说,if语句不在for循环

答案 1 :(得分:0)

def is_prime(x):
    if x < 9:
        return x in {2, 3, 5, 7}
    elif not (x % 2):
        # even
        return False
    else:
        upto = int(x ** 0.5)  # test to sqrt(x)
        # test divisibility by odd numbers
        return all(x % div for div in range(3, upto+1, 2))