这是一个代码,用于确定输入是否为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
为什么会这样?
答案 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))