You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义质数检查函数问题:错误输出、None原因及return用法

质数判断Python代码的问题分析与修正

原始代码

num=int(input("enter the no: "))
def Prime(num):

    """Check whether a no is prime or not"""
    for i in range(2,num):

        if num%i==0:
            print(num," is not prime no")
            break
        else:
            print(num,"is prime no")
            break

print(Prime(num))

输入45后的运行输出

enter the no: 45
45 is prime no
None

问题解答

1. 代码的核心问题

  • 循环逻辑错误:函数里的for循环只执行第一次迭代(i=2)就直接break退出了。比如判断45时,45除以2余1,直接进入else分支打印“是质数”并终止循环,根本没检查后续能整除45的数(比如3)。正确的质数判断逻辑是:只有当所有小于num的数(优化后可到平方根)都不能整除它时,才判定为质数,而非第一次不整除就直接下结论。
  • 函数职责混乱:函数内部直接打印结果,把“判断逻辑”和“输出逻辑”混在一起,既不利于函数复用,也导致后续调用时出现额外的None输出。

2. 末尾出现None的原因

Python中,如果函数没有显式写return语句返回值,默认会返回None。你调用print(Prime(num))时,相当于把函数执行过程中的打印内容(比如“45 is prime no”)和函数返回的None一起打印了,所以末尾会多出None。

3. 正确使用return的修正代码

我们应该让函数专注于判断逻辑,返回布尔值或结果标识,再由外部处理输出:

num = int(input("enter the no: "))

def is_prime(num):
    """检查一个数是否为质数"""
    # 边界处理:小于2的数不是质数
    if num <= 1:
        return False
    # 优化:只需要检查到num的平方根(若有因数,必有一个<=平方根)
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            return False
    # 所有可能的因数都检查完,没有能整除的,返回True
    return True

# 根据函数返回值输出结果
if is_prime(num):
    print(f"{num} 是质数")
else:
    print(f"{num} 不是质数")

代码说明:

  • 函数is_prime仅负责判断逻辑,返回True或False,职责清晰,可复用性强
  • 补充了num<=1的边界情况,避免对1、0或负数的错误判断
  • 循环到num的平方根,减少迭代次数,提升效率
  • 外部通过判断函数返回值来打印结果,不会出现None的额外输出

内容的提问来源于stack exchange,提问作者Biswajit Patnaik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:01:03