输入负数时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
相关产品推荐
相关产品推荐

