尝试将 return True/False 值定义为 python 中的定义时出错

Error when trying to return True/False values to a definition in python

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 课程中得到的,我得到一个提示,告诉我当 9 被传递给参数时,函数 returns 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: 分支,并且 returns True.

只有当整个循环是 运行 和 none 的数字除以 9 时,您才应该 return True.

此外,在 return ... 之后 break 是无用的 - 该函数已经 returned,因此永远不会到达 break 语句。

这也是你最后一个问题的答案——当return执行时,这个函数结束。不再执行任何其他操作,程序继续(returns 到)它调用函数时所在的位置。

第一个版本不起作用,因为,当 if 条件为假时,它 returns True.Thus,当 x==9 和 i==2 时,9%2!= 0,因此 return 为真。此外,无需使用 break 语句作为 return 语句 returns 函数和循环的值在 return 之后不会继续。

正确代码如下

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
return True