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

Python 3生成0到num质数列表代码报错求助(返回空列表)

质数生成代码问题排查与修复

我来帮你梳理下原代码里的核心问题,以及对应的修复思路:

  • 初始条件判断错误:原代码中num < 3就返回空列表,但2是最小的质数,正确的边界应该是num < 2才返回空列表
  • 偶数处理逻辑无效:if not i & 1(判断偶数)后执行lst = lst,这完全是无意义的操作——除了2之外,所有偶数都不是质数,这里应该直接跳过这类数
  • 质数判断逻辑完全颠倒:原代码里只要i % n != 0就把i加入列表,这是错误的。正确逻辑是:只有当所有n都不能整除i时,i才是质数;而且你在循环里第一次满足条件就执行return lst,导致循环还没走完就提前返回了
  • 循环范围遗漏边界值:range(3, num)不会包含num本身,比如调用task(5)时,根本不会检查5这个数
  • 遗漏了质数2:原代码完全没处理2这个特殊的质数

你的修改后的代码已经修复了绝大多数问题,这里帮你格式化并补充一点小优化(变量名更语义化):

def task(num):
    num = int(num)
    lst = []
    if num < 2:
        return lst
    if num >= 2:
        lst.append(2)
    for i in range(3, num + 1):
        if i % 2 == 1:  # 只检查奇数,跳过偶数提升效率
            is_prime = True
            # 检查到平方根即可,步长2只遍历奇数除数
            for n in range(3, int(i ** 0.5) + 1, 2):
                if i % n == 0:
                    is_prime = False
                    break
            if is_prime:
                lst.append(i)
    return lst

测试task(5)会返回[2,3,5],完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:29:25