解题思路:
1.数据输入:
通过input()函数获取输入的整数N,表示学生人数。
使用for循环迭代N次,每次输入一个学生的信息,包括学号(num)、姓名(name)、语文成绩(score_Chi)、数学成绩(score_Math)、英语成绩(score_Eng)。
2.数据存储:
将每个学生的信息存储为字典,并添加到名为data的列表中。
3.计算平均分:
使用列表推导式和sum()函数计算语文、数学、英语的平均分,并将结果转为整数。
存储在score_Chi_Ave、score_Math_Ave和score_Eng_Ave中。
4.计算最高分:
使用列表推导式和max()函数计算每个学生的总分,找到最高分并存储在score_Max中。
5.找到最高分学生:
使用enumerate()函数获取每个学生总分的索引和值。
使用max()函数和key参数找到最高分的学生的索引。
6.输出结果:
打印平均分和最高分学生的学号、姓名、语文、数学、英语成绩。
注意事项:
数据输入时,确保输入的数字N和每个学生的信息格式正确,否则可能导致程序错误。
确保数据存储的格式正确,以便后续的计算和输出。
考虑异常情况,例如除数为零的情况。如果N为零,可能导致除法错误。
可以考虑对代码进行函数化,使其更易读和维护。例如,将计算平均分和最高分的部分封装成函数。
参考代码:
data = [] N = int(input()) for i in range(N): num, name, score_Chi, score_Math, score_Eng = input().split() data.append({ "num": num, "name": name, "score_Chi": int(score_Chi), "score_Math": int(score_Math), "score_Eng": int(score_Eng) }) score_Chi_Ave = int(sum([d["score_Chi"] for d in data]) / N) score_Math_Ave = int(sum([d["score_Math"] for d in data]) / N) score_Eng_Ave = int(sum([d["score_Eng"] for d in data]) / N) score_Max = max([d["score_Chi"] + d["score_Math"] + d["score_Eng"] for d in data]) Topstudent_index, _ = max(enumerate([d["score_Chi"] + d["score_Math"] + d["score_Eng"] for d in data]), key=lambda x: x[1]) print(score_Chi_Ave, score_Math_Ave, score_Eng_Ave) print(data[Topstudent_index]["num"], data[Topstudent_index]["name"], data[Topstudent_index]["score_Chi"], data[Topstudent_index]["score_Math"], data[Topstudent_index]["score_Eng"])
0.0分
1 人评分