首页 > 解决方案 > 如何修复此 int 在我的代码中不可下标

问题描述

这是我的作业的一个问题。它按降序打印具有最高数字的名称。我像老师在课堂上展示的那样做。但我一直在第 15 行得到 int is not subscriptable。我做错了什么?

供参考的问题:

假设一个列表包含每个学生在嵌套列表形式中连续在 CSE110、PHY111 和 MAT110 课程中获得的分数。您的任务是将课程名称作为用户的输入,并根据在该课程中获得的分数对列表进行排序,以便最终按分数的降序打印学生的姓名,即从获得最高分数的学生那里给收入最低的学生。

例如,列表可能看起来像 lst = [ ["Alan", 95, 87, 91], ["Turing", 92, 90, 83], ["Elon", 87, 92, 80], ["Musk ", 85, 94, 90] ] 其中对于每个嵌套列表,第一个索引包含学生的姓名,第二个索引是 CSE110 课程中获得的总分,第三个索引是 PHY111 分数,第四个索引是 MAT110 分数。

==================================================== ===

Sample Input :
MAT110
Sample Output :
Alan
Musk
Turing
Elon

错误 :

Enter Desired Course Name: PHY111

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-18-b99751889edb> in <module>()
     13 
     14 for i in range(0, len(org_list)):
---> 15     best = org_list[i][index]
     16     best_loc = i
     17     mod_list = org_list[i]

TypeError: 'int' object is not subscriptable
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

for i in range(0, len(org_list)):
    best = org_list[i][index]
    best_loc = i
    mod_list = org_list[i]

    for i in range(i+1, len(org_list)):
        if best < org_list[i][index]:
            best = org_list[i][index]
            best_loc = i

    interim = mod_list
    org_list[best_loc] = org_list[i]
    org_list = interim

for count in range(0, len(org_list)):
    print(org_list[count][0])

标签: pythonpython-3.x

解决方案


我不确定这个程序应该做什么,但问题出在以下几行:

interim = mod_list
...
org_list = mod_list

您之前从 中提取了一个子列表org_list,即mod_list不是嵌套列表,而是["Alan", 95, 87, 91]用于第一次循环执行。

现在,您用其中一个子列表覆盖org_list。但是,在下一个循环执行中,您无法使用org_list[i][index].


推荐阅读