Python作业报'int is not subscriptable'错误,课程分数排序代码如何修复?
问题排查与解决
报错原因
你的代码有两个核心错误直接触发该类型报错:
- 循环变量重名:内外两层for循环都使用了变量
i,内层循环运行时会覆盖外层i的取值,直接打乱外层循环的执行逻辑。 - 排序交换逻辑错误:原代码中
org_list = interim这行,直接把存储全部学生数据的嵌套列表替换成了单个学生的子列表,下一轮外层循环执行org_list[i][index]时,相当于对整数类型的成绩值取下标,自然会触发'int'对象不可取下标的报错。
修正后代码
org_list = [["Alan", 95, 87, 91], ["Turing", 92, 90, 83], ["Elon", 87, 92, 80], ["Musk", 85, 94, 90]] course = input('Enter Desired Course Name: ') # 匹配课程对应下标,增加非法输入处理 if course == 'CSE110': index = 1 elif course == 'PHY111': index = 2 elif course == 'MAT110': index = 3 else: print("输入的课程名称不存在") exit() # 选择排序逻辑修正 for i in range(len(org_list)): best = org_list[i][index] best_loc = i # 内层循环换用不同变量名避免冲突 for j in range(i+1, len(org_list)): if best < org_list[j][index]: best = org_list[j][index] best_loc = j # 正确交换两个元素的位置,不修改整个org_list org_list[i], org_list[best_loc] = org_list[best_loc], org_list[i] # 输出排序后的学生姓名 for item in org_list: print(item[0])
测试验证
输入MAT110时,输出顺序为:
Alan Musk Turing Elon
完全符合题目要求。
内容的提问来源于stack exchange,提问作者Irrelevant
相关产品推荐
相关产品推荐

