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

输入负数时while循环未终止且空列表pop触发IndexError问题排查

问题分析与解决方案

错误原因

  • 重复调用函数导致二次输入
    你的调用代码中连续执行了两次positive_statistics():

    positive_statistics()
    print(f"{positive_statistics()}")
    

    第一次调用函数时,你输入正数后输入-1已经退出了循环,但紧接着第二次调用函数,程序会再次要求输入;当你再次输入-1时,函数内的列表a是空的,执行a.pop()就触发了IndexError。

  • 未处理空列表边界场景
    当用户未输入任何正数就直接输入负数时,列表a为空,此时执行a.sort()后依然是空列表,调用pop()和pop(0)自然会报错。

修正方案

步骤1:修复重复调用问题

只调用一次函数,将结果保存到变量后再打印:

from functions import positive_statistics
result = positive_statistics()
print(result)

步骤2:增加空列表判断逻辑

在函数中添加判断,当没有输入任何正数时,给出友好提示或返回合理值,避免报错:

def positive_statistics():
    total = 0
    count = 0
    a = []
    while True:
        number = float(input("Input a positive Number:"))
        if number < 0:
            break
        a.append(number)
        total = total + number
        count = count + 1
    
    # 处理未输入任何正数的情况
    if not a:
        print("未输入任何正数,无法计算统计值")
        return None, None, None, None
    
    a.sort()
    maximum = a.pop()
    minimum = a.pop(0)
    average = total / count
    return minimum, maximum, total, average

可选优化:用内置函数简化最值计算

不需要用sort()和pop()来获取最值,直接用Python内置的min()和max()函数更简洁高效,还能避免修改原列表:

def positive_statistics():
    total = 0
    count = 0
    a = []
    while True:
        number = float(input("Input a positive Number:"))
        if number < 0:
            break
        a.append(number)
        total += number
        count += 1
    
    if not a:
        print("未输入任何正数,无法计算统计值")
        return None, None, None, None
    
    minimum = min(a)
    maximum = max(a)
    average = total / count
    return minimum, maximum, total, average

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:23:26