【问题标题】:Python error in function [Beginner]函数中的 Python 错误 [初学者]
【发布时间】:2016-04-25 06:10:07
【问题描述】:

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

它开始正常工作。 谁能解释一下这种改变是如何导致代码工作的? 提前致谢。

【问题讨论】:

  • 想想你的第一个版本何时返回 true。用纸和铅笔做一个例子。那么错误是什么应该很明显(尽管在计算素数时您绝不是第一个犯这个错误的人,即使今天只是在做 Python SO 问题,所以不用担心)。
  • 我看不到is_prime(3) 将如何返回第一个版本的TrueFalse,因为range(2, 3-1) 是空的,因此代码永远没有机会返回任何其他内容比默认的None
  • @TigerhawkT3 我猜评分员将None 视为假-y
  • @jonrsharpe - 是的,这是我不喜欢那些自动评分机的原因之一。 =\

标签: python function


【解决方案1】:

在第一个代码 sn-p 中发生的情况是循环几乎没有机会运行。其中的if 子句同时具有 then 和 else 分支,因此它们中的任何一个都将始终执行。因为它们里面都有一个return,所以一旦第一次执行循环,函数就会返回。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多