Python代码计算结果异常求助:预期输出7却得到5
代码错误排查:数组拆分排序求和结果不符
问题背景
设定数组大小为5,输入数字依次为3、4、1、7、9,需求如下:
- 按索引奇偶将数组拆分为Odd(奇数索引元素)和Even(偶数索引元素)两个列表
- 分别对两个列表进行排序
- 取两个列表的倒数第二个元素相加,预期结果为7,但运行代码后得到5
错误代码
n = [] odd = [] even = [] nsize = 5 for i in range(0, nsize): num = int(input("Enter number: ")) n.append(num) if i % 2 == 0: even.append(n[i]) else: odd.append(n[i]) print("odd", sorted(odd)) print("even", sorted(even)) print(odd[-2] + even[-2])
错误分析与修正
核心错误:排序结果未实际赋值
代码中仅在print语句里调用了sorted()函数,但sorted()是返回新的排序列表,不会修改原列表。计算求和时使用的是未排序的原始odd和even列表:
- 原始
odd列表(奇数索引元素):[4,7],未排序时odd[-2] = 4 - 原始
even列表(偶数索引元素):[3,1,9],未排序时even[-2] = 1 - 4+1=5,这就是得到错误结果的原因
索引拆分逻辑验证
代码中索引判断逻辑是正确的:
- 索引
i%2==0对应偶数索引(0、2、4),元素为3、1、9,加入even列表 - 索引
i%2!=0对应奇数索引(1、3),元素为4、7,加入odd列表
修正后的代码
将排序后的结果重新赋值给变量,再进行求和:
n = [] odd = [] even = [] nsize = 5 for i in range(0, nsize): num = int(input("Enter number: ")) n.append(num) if i % 2 == 0: even.append(n[i]) else: odd.append(n[i]) # 排序并保存结果 odd_sorted = sorted(odd) even_sorted = sorted(even) print("odd", odd_sorted) print("even", even_sorted) # 取排序后列表的倒数第二个元素相加 print(odd_sorted[-2] + even_sorted[-2])
结果验证
- 排序后
odd_sorted = [4,7],倒数第二个元素为4 - 排序后
even_sorted = [1,3,9],倒数第二个元素为3 - 4+3=7,符合预期结果
内容的提问来源于stack exchange,提问作者Rony
相关产品推荐
相关产品推荐

