华为od统一考试B卷【选修课】python 实现

在这里插入图片描述
在这里插入图片描述

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(";")
  • 从用户输入中读取两个字符串,并使用 ; 进行分割,分别存储在 course1course2 中。
3. 创建 course1 的学生成绩字典
course1_grade = {}
for student in course1:
    ID, grade = student.split(",")
    course1_grade[ID] = int(grade)
  • 创建一个字典 course1_grade 来存储每个学生的 ID 和对应的成绩。通过 split(",") 将每个学生字符串分为 IDgrade,然后将 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,按照总分排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值