智能成绩表

题目
小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗?
输入描述
第1行输入两个整数,学生人数n和科目数量 m。
0<n<100
0<m<10
第 2 行输入 m 个科目名称,彼此之间用空格隔开。
科目名称只由英文字母构成,单个长度不超过10个字符。
科目的出现顺序和后续输入的学生成绩--对应。
不会出现 重复的科目名称。
第 3行开始的 n行,每行包含一个学生的姓名和该生 m 个科目的成绩(空格隔开)
学生不会重名。
学生姓名只由英文字母构成,长度不超过10个字符。
成绩是0~100的整数,依次对应第2行种输入的科目。
第n+2行,输入用作排名的科目名称。若科目不存在,则按总分进行排序。
输出描述
输出一行,按成绩排序后的学生名字,空格隔开。成绩相同的按照学生姓名字典顺序排序。
用例
输入
3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 95
minmin 100 82
shuxue
输出
xiaohua fangfang minmin
说明 按shuxue成绩排名,依次是xiaohua、fangfang、minmin
 

def rank_students(n, m, subjects, students, rank_subject):
    # 如果排名科目存在,则按该科目成绩排序
    if rank_subject in subjects:
        sorted_students = sorted(students, key=lambda x: (-students[x][rank_subject], x))
    else:
        # 如果排名科目不存在,则按总分排序
        sorted_students = sorted(students, key=lambda x: (-sum(students[x].values()), x))
    return ' '.join(sorted_students)

# 读取输入
n, m = map(int, input().split())
subjects = input().split()
students = {}

for _ in range(n):
    data = input().split()
    name = data[0]
    scores = list(map(int, data[1:]))
    students[name] = dict(zip(subjects, scores))
rank_subject = input()

# 输出结果
print(rank_students(n, m, subjects, students, rank_subject))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值