函数中的Python错误[初学者]

函数中的Python错误[初学者],python,function,Python,Function,我最近开始编码,在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

我最近开始编码,在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)
def为素数(x):
如果x<2:
返回错误
elif x==2:
返回真值
其他:
对于范围(2,x-1)内的n:
如果x%n==0:
返回错误
其他:
返回真值
打印为素数(5)
在运行它之后,它不断给出消息,即_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)
def为素数(x):
如果x<2:
返回错误
elif x==2:
返回真值
其他:
对于范围(2,x-1)内的n:
如果x%n==0:
返回错误
返回真值
打印为素数(5)
它开始正常工作。 有人能解释一下这个改动是如何导致代码工作的吗?
提前感谢。

在第一个代码片段中,循环几乎没有机会运行。它内部的
if
子句既有一个then分支,也有一个
else
分支,因此它们中的任何一个都将始终执行。因为它们都有一个
返回
,函数将在循环第一次执行时返回

此外,在
3
的特定测试用例中,循环甚至不会运行一次,因为
range()
指定了一个唯一的上限<代码>范围(2,2)为空范围。函数结束时不返回
,在Python中,该函数返回一个特殊值
None


第二个代码段被修改为只有在发现反例证明给定的数字不是素数时才退出函数。在这种情况下,可以从函数中提前返回,因为如果找到一个除数,则该数字不可能是素数,并且不需要检查其余的除数。只有当循环完成而没有找到一个时,才会到达循环后的
返回True

请思考您的第一个版本何时返回True。用纸和铅笔做一个例子。那么错误是什么应该是非常明显的(虽然你不是第一个在计算素数时犯这个错误的人,即使只是在Python上,所以今天有问题,所以不要担心)。我不知道对于第一个版本,
is_prime(3)
将如何返回
True
False
,因为
range(2,3-1)
是空的,因此代码除了默认的
None
@TigerhawkT3之外,没有机会返回任何内容。我猜评分员认为
None
为假-y@jonrsharpe-是的,我不喜欢那些自动分级机的原因之一=\