这是我的作业问题。它按降序打印数字最大的名字。我像老师在课堂上展示的那样做了。但是在第15行我一直得到int不可下标。我做错了什么?
参考问题:
假设一个列表以嵌套列表的形式包含每个学生在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])
我不确定这个程序应该做什么,但问题在这几行:
interim = mod_list
...
org_list = mod_list
您之前从org_list
中提取了一个子列表,即mod_list
不是嵌套列表,而是["Alan", 95, 87, 91]
,用于第一次循环执行。
现在,用其中一个子列表覆盖org_list
。但是,在下一次循环执行中,您无法使用org_list[i][index]
访问嵌套列表。
好的,正如有人提到的,我在最后一行犯了错误。
应该是:
org_list[i] = interim
:
org_list = interim
谢谢大家。