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

Python函数返回None问题排查:因数/质数判断程序优化

分析与修复你的Python因数/质数判定程序

我来帮你拆解这段代码里的问题,以及给出对应的修复方案:

先说说你遇到的核心问题:为什么总是返回None?

Python里的函数如果没有写return语句,执行完后默认会返回None。你现在用print(mys(x))去调用函数,相当于把函数的返回值(也就是None)打印出来了,这就是因数输出后总是跟着None的原因。

代码里还有几个其他问题,会导致程序运行报错或者功能异常:

  • 参数没用+类型错误:函数mys定义了参数x,但完全没用到,反而在内部用input重新赋值了x,而且input得到的是字符串,直接拿来做x % i取模运算会直接报错,因为字符串不能和整数做算术操作。
  • 未定义变量:你调用mys(x)的时候,外部的x根本没定义,程序运行第一步就会报NameError。
  • 因数范围不全:range(2, x)是左闭右开区间,会漏掉数字本身这个因数(如果需要的话),也没处理1这个基础因数。

修复后的完整代码(支持因数输出+质数判定)

我把输入逻辑和计算逻辑分开,让代码更清晰,同时解决所有问题:

def get_all_factors(n):
    """返回输入数字的所有因数列表"""
    factors = []
    for i in range(1, n + 1):
        if n % i == 0:
            factors.append(i)
    return factors

def check_prime(n):
    """判定输入数字是否为质数,返回布尔值"""
    if n <= 1:
        return False
    # 遍历到平方根即可,提升效率
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

# 主程序逻辑
try:
    num = int(input("Enter a number: "))
    factors = get_all_factors(num)
    print(f"All factors of {num}: {factors}")
    
    if check_prime(num):
        print(f"{num} is a prime number.")
    else:
        print(f"{num} is not a prime number.")
except ValueError:
    print("Please enter a valid integer!")

如果你只想做最小修改(保留原逻辑,解决None问题)

如果只是想让原代码正常运行,不输出None,可以这么改:

def mys():
    x = int(input("Enter a number: "))
    print("Factors (excluding 1 and itself):")
    for i in range(2, x):
        if x % i == 0:
            print(i)

# 直接调用函数,不要用print包裹
mys()

这里的关键是不要用print()去调用没有返回值的函数,直接执行函数即可,这样就不会输出None了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:23:37