我是编程新手,在尝试编写程序时查找素数时遇到了问题。这是我的代码:
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;
有人可以解释一下这段代码中的缺陷吗?
谢谢!
答案 0 :(得分:3)
range()
有一个exclusive upper bound,所以它试图得到2到2(3 - 1)之间的范围,这不是元素。由于你不能迭代,for循环永远不会运行,所以返回None
(如果没有指定函数,这是函数的默认返回类型。)
您当前问题的解决方案是使用range(2, x)
而不是range(2, x - 1)
。你会发现x&gt;你会遇到问题3但是因为@khelwood说,你在检查第一个值后立即返回True
或False
。相反,只有在检查范围内的所有值后才返回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