自定义列表求最大最小值函数异常排查:部分场景运行错误
问题分析与修复方案
你的代码存在三个核心问题,直接导致了结果错误:
1. 未初始化最大/最小值变量
myMax和myMin没有初始值,若列表长度为1时会直接抛出NameError;即使列表长度大于1,初始的比较逻辑也会依赖错误的元素。
2. 循环起始位置与比较逻辑错误
循环从i=0开始,此时i-1 = -1,对应列表的最后一个元素,这完全违背了遍历找最值的逻辑。而且你每次是将当前元素与前一个元素比较,而非与当前记录的最大/最小值比较,这会导致最值被后续的相邻元素覆盖——比如错误案例中最后myMin被78覆盖,就是因为78比前一个元素134小,但它并不是整个列表的最小值。
3. 缺乏空列表边界处理
如果用户输入列表长度为0,程序会直接崩溃,没有做容错处理。
修复后的代码
# 查找整数列表中的最大和最小值 def find_max_min(my_list): # 处理空列表情况 if not my_list: return None, None # 初始化最大最小值为列表第一个元素 my_max = my_min = my_list[0] # 从第二个元素开始遍历比较 for num in my_list[1:]: if num > my_max: my_max = num if num < my_min: my_min = num return my_max, my_min # 输入列表 my_list = [] length = int(input("列表长度: ")) for _ in range(length): num = int(input()) my_list.append(num) max_val, min_val = find_max_min(my_list) print(f"最大值: {max_val}, 最小值: {min_val}")
修复说明
- 初始化
my_max和my_min为列表第一个元素,确保后续比较有正确基准 - 直接遍历列表元素(而非通过索引),逻辑更清晰,避免索引越界问题
- 增加空列表判断,提升代码健壮性
- 变量名采用PEP8规范,可读性更强
内容的提问来源于stack exchange,提问作者Lý Minh Phúc
相关产品推荐
相关产品推荐

