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

求问:我的Python质数查找函数为何返回空列表?

问题分析与修正

原代码的核心错误

  • 内层循环起始值错误:内层循环从1开始,任何整数除以1的余数都是0,所以每次进入内层循环都会直接触发break,else分支永远不会执行,自然不会往列表里添加任何元素,最终返回空列表。
  • 质数判断逻辑错误:原代码的逻辑是只要一次不能整除就添加数字,但质数的定义是大于1的自然数,除了1和自身外没有其他正因数,正确的逻辑应该是:遍历2到data的平方根之间的数,如果都不能整除data,才判定为质数。

修正后的代码

def prime():
    a = int(input("enter the first number"))
    b = int(input('enter the second number'))
    prime_list = []
    
    for data in range(a, b + 1):
        # 小于2的数不是质数,直接跳过
        if data < 2:
            continue
        # 假设当前数是质数
        is_prime = True
        # 内层循环从2开始,到data的平方根(优化性能)
        for num in range(2, int(data ** 0.5) + 1):
            if data % num == 0:
                # 能被整除,说明不是质数
                is_prime = False
                break
        if is_prime:
            prime_list.append(data)
    
    return prime_list

print(prime())

修正说明

  1. 跳过小于2的数:质数的定义是大于1的自然数,所以直接排除小于2的数。
  2. 调整内层循环范围:从2开始到data的平方根(int(data**0.5)+1),因为如果data有一个大于其平方根的因数,必然对应一个小于平方根的因数,这样可以减少循环次数,提升效率。
  3. 正确的质数判定逻辑:先假设数是质数,只要找到一个能整除的数就标记为非质数并跳出循环,遍历结束后如果仍为质数,再添加到列表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:45:12