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
相关产品推荐
相关产品推荐

