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

为什么我编写的简易素数校验器运行时报IndexError列表下标越界错误?

报错根因

你触发IndexError: list index out of range的直接原因是:首次执行print(primes[-1])时,primes是空列表,空列表不存在最后一位元素,直接取值就会抛出索引越界错误。

代码逻辑错误梳理

你的素数判断逻辑存在多处问题,才会走到空列表取值的报错场景:

  • 素数判断规则完全错误:你当前的逻辑是只要存在任意一个i不能整除number,就将number加入素数列表,这不符合素数定义。素数需要满足所有从2到自身开根号的整数都不能整除它,才可以判定为素数。
  • 非素数标记逻辑无效:你定义的not_primes变量没有起到标记作用,给i赋值为not_primes的操作不会对后续判断产生任何影响,也不会跳过后续的打印逻辑。
  • 变量自增位置错误:你将number += 1放在了for循环内部,每遍历一次i就修改一次number的取值,会导致for循环的遍历范围和当前待判断的数字完全不匹配,逻辑彻底混乱。
  • 无判断就直接打印素数列表元素:你没有判断当前数字是否为素数、是否已经被加入到primes列表,就直接调用primes[-1],遇到非素数场景primes没有新增元素,就会触发空列表取值错误。

修正后可运行代码

# 从最小的素数2开始判断
current_num = 2
primes = []
# 以获取前10个素数为终止条件,避免死循环
while len(primes) < 10:
    is_prime = True
    # 素数判断只需遍历到数字开根号即可,优化性能
    for i in range(2, int(current_num ** 0.5) + 1):
        if current_num % i == 0:
            is_prime = False
            break
    if is_prime:
        primes.append(current_num)
        print(primes[-1])
    current_num += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:39:02