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

Python中找出列表内所有质数的代码问题排查

问题原因及解决办法

原因分析

你的代码只输出1 is not prime.,核心问题有三个:

  1. 内层循环范围错误:
    处理2时,int(2/2)+1 = 2,range(2,2)是空序列,内层循环直接跳过,没有执行任何print语句;
    处理3时,int(3/2)+1 = 2,同样range(2,2)为空,内层循环不执行,自然没有输出。
  2. 质数判断逻辑错误:
    你在内层循环里每一次取余判断都直接输出结果,既会导致一个数被多次输出,也没遵循「遍历完所有可能因数都没找到才是质数」的核心逻辑。
  3. 缩进不规范:
    原代码中else块的缩进和对应的if arr[i] > 1不匹配,虽当前未直接报错,但会导致代码逻辑混乱,属于Python语法的隐患。

解决办法

修正后的代码优化了循环范围、判断逻辑,同时规范了缩进:

arr = [1,2,3]

for num in arr:
    if num <= 1:
        print(num, "is not prime")
        continue
    # 先假设当前数是质数
    is_prime = True
    # 循环范围优化到num的平方根,提升判断效率
    for j in range(2, int(num**0.5) + 1):
        if num % j == 0:
            is_prime = False
            break  # 找到因数就跳出循环,无需继续判断
    print(num, "is prime" if is_prime else "is not prime")

关键优化点:

  • 直接遍历列表元素而非通过索引,避免range(len())带来的冗余索引操作,代码更简洁易读;
  • 采用「先假设为质数,找到因数再标记为非质数」的逻辑,遍历结束后统一输出,逻辑更清晰;
  • 将内层循环范围改为range(2, int(num**0.5)+1),因为一个数若有因数,其中一个必然小于等于它的平方根,大幅提升判断效率;
  • 用continue跳过小于等于1的数的后续判断,代码结构更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:31:10