输入5位学生参加3门课程的考试成绩,要求保存到列表,然后根据学生的3门课总成绩从高到低的顺序输出学生成绩表。输出的格式如下 s_id s_name score1 score2 score3 total_score 1003 Ma Yi 86 88 92 266 1005 He Tao 85 85 88 258 1001 Hu Yang 88 79 90 257 1002 Shi Min 80 78 86 244 1004 Qi Jun 76 80 82 238STUCOUNT = 5 # 学生人数 SCORECOUNT = 3 # 每个学生的成绩数 stu_table = [] # 学生成绩表 # 输入数据 for i in range(STUCOUNT): s_id = int(input()) # 省略提示"输入学生的学号:" s_name = input() # 省略提示"输入学生的姓名:" s_scores = list(eval(input())) # 省略提示"输入学生的3个成绩(用逗号隔开的3个整数成绩):" stu_table.append([s_id, s_name, s_scores]) # 往成绩表中添加学生记录 # 对学生成绩表按总分从高到低的顺序排序 ########## 开始补全代码 ########## stu_table = sorted(stu_table, key=lambda stu: sum(stu_table[2:5]), reverse=True) ########## 结束补全代码 ########## # 输出成绩表 print("s_id s_name score1 score2 score3 total_score") for stu in stu_table: print(f"{stu[0]:4d} {stu[1]:<8s} {stu[2][0]:6d} {stu[2][1]:6d} {stu[2][2]:6d} {stu[3]:6d}")
时间: 2024-02-16 10:02:45 浏览: 20
这段代码存在一些问题,需要进行修改:
1. `stu_table`中每个学生的成绩应该是一个列表,而不是一个整数列表。因此,`s_scores`应该是一个列表,而不是使用`list(eval(input()))`来将输入字符串转换成列表。
2. 在对学生成绩表进行排序时,应该使用`sum(stu[2])`来计算每个学生的总分,而不是`sum(stu_table[2:5])`。
3. 在输出成绩表时,应该使用`stu[2][i]`来输出每门课的成绩,而不是使用`stu_table[2:5]`。
修改后的代码如下:
```
STUCOUNT = 5 # 学生人数
SCORECOUNT = 3 # 每个学生的成绩数
stu_table = [] # 学生成绩表
# 输入数据
for i in range(STUCOUNT):
s_id = int(input("输入学生的学号:"))
s_name = input("输入学生的姓名:")
s_scores = []
for j in range(SCORECOUNT):
score = int(input(f"输入学生{s_id}的第{j+1}门成绩:"))
s_scores.append(score)
stu_table.append([s_id, s_name, s_scores])
# 对学生成绩表按总分从高到低的顺序排序
stu_table = sorted(stu_table, key=lambda stu: sum(stu[2]), reverse=True)
# 输出成绩表
print("s_id s_name score1 score2 score3 total_score")
for stu in stu_table:
print(f"{stu[0]:4d} {stu[1]:<8s} {stu[2][0]:6d} {stu[2][1]:6d} {stu[2][2]:6d} {sum(stu[2]):6d}")
```
这样,就能够按照要求输入学生成绩,并按照总分从高到低的顺序输出学生成绩表了。