智能成绩表
题目描述
小明来到学校当老师, 需要将学生按考试总分或单科分数进行排名, 你能帮帮他吗?
输入描述
- 第 1 行输入两个整数, 学生人数 n 和科目数量 m
- 0 < n < 100
- 0 < m < 10
- 第 2 行输入 m 个科目名称, 彼此之间用空格隔开
- 科目名称只由英文字母构成, 单个长度不超过10个字符
- 科目的出现顺序和后续输入的学生成绩一一对应
- 不会出现重复的科目名称
- 第 3 行开始的 n 行, 每行包含一个学生的姓名和该生 m 个科目的成绩 (空格隔开)
- 学生不会重名
- 学生姓名只由英文字母构成, 长度不超过10个字符
- 成绩是0~100的整数, 依次对应第2行种输入的科目
- 第n+2行, 输入用作排名的科目名称. 若科目不存在, 则按总分进行排序
输出描述
输出一行, 按成绩排序后的学生名字, 空格隔开. 成绩相同的按照学生姓名字典顺序排序.
示例1
输入:
3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 98
minmin 100 82
shuxue
输出:
xiaohua fangfang minmin
示例2
输入:
3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 95
minmin 90 95
zongfen
输出:
fangfang minmin xiaohua
题解
Python
def main():
# 读取输入
parts = input().split()
num_students = int(parts[0])
num_courses = int(parts[1])
course_list = list(input().split())
students = []
for i in range(num_students):
part = input().split()
name = part[0]
individual_scores = list(map(int, part[1:]))
assert len(individual_scores) == num_courses
# 计算该学生的总分
total_score = sum(individual_scores)
students.append((name, individual_scores, total_score))
sorted_by_course = input()
# 分数要按照降序的方式来排序
if sorted_by_course != "zongfen":
# 如果指定的科目, 先找到它在分数列表中的索引位置, 再依此排序
course_index = course_list.index(sorted_by_course)
students.sort(key = lambda student: student[1][course_index], reverse = True)
else:
# 如果没有指定排序的科目, 就依总分来排序
students.sort(key = lambda student: student[2], reverse = True)
# 最后打印学生的名字
print(" ".join(student[0] for student in students))
if __name__ == "__main__":
main()