def is_prime(x):
if x < 2:
return False
elif x == 2:
return True
for i in range(2,x):
if x % i == 0:
return False
break
else:
return True
上面的代码来自 codecademy 的 python 类(class),我得到一个提示,告诉我当 9 传递给参数时,函数返回 True 而不是 False。我可以通过以下方式解决此问题:
for i in range(2,x):
if x % i == 0:
return False
break
return True
我不明白为什么第二段代码有效,而第一段却不行。事实上,我会认为代码的第二位不起作用:如果参数为 9,则当 i == 3, x % i == 0 时。所以函数得到一个返回值 False,然后循环中断。但是,由于“return True”不在 for 循环内,因此在退出 for 循环后,“return True”无论如何都会执行,因此无论输入如何,函数都会返回一个 True 值,因为这是最后一个要在函数内执行的代码行?
按照这一推理,我相信我的初始代码可以工作,因为如果“return True”在 for 循环内,那么 break 命令将被执行(假设输入为 9),在函数被执行之后返回值 False。并且由于“return True”行在 for 循环内,并且由于 break 命令将退出 for 循环,那么最后给函数的值应该是 False,这是正确的吗?
如果我(很可能)滥用了某些术语,或者在我对代码的工作或执行方式的理解上存在一些缺陷,我提前道歉。我似乎无法理解为什么第二段代码有效,但第一段却不行。
干杯!
请您参考如下方法:
for 循环以 i == 2 开始。 9 % 2 == 1,所以它进入 else: 分支,并返回 True。
只有在运行整个循环并且没有任何数字被 9 整除时,您才应该返回 True。
此外,在 break 之后的 return ... 之后是无用的 - 函数已经返回,因此永远不会到达 break 语句。
这也是您最后一个问题的答案——当执行 return 时,此函数结束。不再执行任何其他操作,程序继续(返回)调用该函数时所在的位置。
