def main():
course1 = input().strip().split(";")
course2 = input().strip().split(";")
course1_grade = {}
for student in course1:
ID,grade = student.split(",")
course1_grade[ID] = int(grade)
total_grade = {}
for student in course2:
ID,grade = student.split(",")
if ID in course1_grade:
class_num = ID[:5]
sum_grade = int(grade) + course1_grade[ID]
if class_num not in total_grade:
total_grade[class_num] = {}
total_grade[class_num][ID] = sum_grade
if not total_grade:
print("Null")
else:
for i in sorted(total_grade.keys()):
students = total_grade[i]
print(i)
sorted_students = sorted(students.items(),key = lambda x:(-x[1],x[0]))
res = ";".join(student[0] for student in sorted_students)
print(res)
if __name__ == "__main__":
main()
这段代码的主要功能是处理学生成绩,具体来说是将来自两个课程的学生成绩合并并按班级及总成绩排序。以下是对代码的逐行解释:
代码解释
1. 定义 main
函数
def main():
- 定义一个名为
main
的主函数,这通常是一个程序的入口点。
2. 输入处理
course1 = input().strip().split(";")
course2 = input().strip().split(";")
- 从用户输入中读取两个字符串,并使用
;
进行分割,分别存储在course1
和course2
中。
3. 创建 course1
的学生成绩字典
course1_grade = {}
for student in course1:
ID, grade = student.split(",")
course1_grade[ID] = int(grade)
- 创建一个字典
course1_grade
来存储每个学生的 ID 和对应的成绩。通过split(",")
将每个学生字符串分为ID
和grade
,然后将grade
转换为整数。
4. 创建 total_grade
字典以存储总成绩
total_grade = {}
for student in course2:
ID, grade = student.split(",")
if ID in course1_grade:
class_num = ID[:5]
sum_grade = int(grade) + course1_grade[ID]
if class_num not in total_grade:
total_grade[class_num] = {}
total_grade[class_num][ID] = sum_grade
total_grade
用于存储所有学生的总成绩。- 遍历
course2
中的每个学生:- 如果
ID
存在于course1_grade
,则将其成绩与course1
的成绩相加。 - 使用
ID[:5]
来获取班级编号(假设班级编号是前五个字符)。 - 如果班级不在
total_grade
中,则创建新的字典。 - 将学生的 ID 和总成绩存入
total_grade
。
- 如果
5. 检查总成绩是否为空
if not total_grade:
print("Null")
- 如果没有任何班级数据,则打印
"Null"
。
6. 打印结果
else:
for i in sorted(total_grade.keys()):
students = total_grade[i]
print(i)
sorted_students = sorted(students.items(), key=lambda x: (-x[1], x[0]))
res = ";".join(student[0] for student in sorted_students)
print(res)
- 如果有班级数据,首先按班级名称排序。
- 对每个班级,打印班级编号。
- 使用
sorted
函数对学生进行排序,按总成绩降序排列,若成绩相同则按 ID 升序排列。 - 生成一个以
;
分隔的学生 ID 列表并打印。
示例输入和输出
输入:
01202021,75;01201033,95;01202008,80;01203006,90;01203088,100
01202008,70;01203088,85;01202111,80;01202021,75;01201100,88
输出:
01202
01202008;01202021
01203
01203088
总结
该程序通过从两个不同课程的数据合并,输出每个班级的学生 ID,按照总分排序