繁体   English   中英

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

[英]Python error in function [Beginner]

我最近开始编写代码并在尝试在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)

它开始正常工作。 任何人都可以解释一下这种改变是如何导致代码工作的吗? 提前致谢。

第一个代码片段中发生的事情是循环几乎没有机会运行。 其中的if子句同时包含then和else分支,因此其中任何一个都将始终执行。 因为它们都在其中有一个return ,所以该函数将在第一次执行循环时立即返回。

此外,在您的特定测试用例3 ,循环甚至不会运行一次,因为range()指定了一个exlusive上限。 range(2, 2)是一个空范围。 函数在没有return情况下到达它的末尾,并且在Python中导致函数返回特殊值None

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM