我最近开始编码并遇到了一些我在Codecademy上学习Python时没有完全理解的东西。
任务是创建一个函数来判断是否被调用,该数字是素数还是不是。
所以这是我的第一个解决方案:
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
print is_prime(5)
运行之后,它不断给出is_prime(3)给出False的消息,而不是给出True。 在搜索了Codecademy论坛后,我发现如果代码的最后一部分被改为:
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
return True
print is_prime(5)
它开始正常工作。 任何人都可以解释一下这种改变是如何导致代码工作的吗? 提前谢谢。
答案 0 :(得分:4)
第一个代码片段中发生的事情是循环几乎没有机会运行。其中的if
子句包含then和else
分支,因此其中任何一个都将始终执行。因为它们都在其中有return
,所以该函数将在循环首次执行时立即返回。
此外,在3
的特定测试用例中,循环甚至不会运行一次,因为range()
指定 exlusive 上限。 range(2, 2)
是一个空范围。函数在没有return
的情况下到达它的末尾,并且在Python中导致函数返回特殊值None
。
第二个代码片段被修改为只有在找到证明给定数字不是素数的反例时才退出该函数。在这种情况下,可以从函数中提前返回,因为如果找到一个除数,则该数字不可能是素数,并且不需要检查其余的。只有当循环结束而没有找到循环时,才会到达循环后的return True
。