成绩排序(思路+代码详解)Python实现

目录


题目描述

给出n个学生的姓名和成绩,将学生成绩从高到低排序,成绩相同的学生,按照姓名拼音从小到大排序

输入

输入包括多行,第一行是一个整数n(0<n<10),接下来有n行,每一行有学生姓名和两门课的成绩

输出

输出排序后的结果:排序原则:将学生成绩从高到低排序,成绩相同的学生,按照姓名拼音从小到大排序。

样例输入

3
tom 80 90
jack  80 78
lucy   81 77

样例输出

tom 80 90
jack 80 78
lucy 81 77

题目分析:注意两点

1.降序排序

2.成绩相同时,字典序小的名字在前

思路分析:

1.用字典:姓名作为键,成绩作为键值

2.用sorted进行排序

代码详解:

n=int(input())
dt={}
for  i in range(n):
    s=input().split()
    dt[s[0]]=(int(s[1]),int(s[2]))#将姓名作为键,将两科成绩放在一个元组里边作为键值
l=sorted(dt.items(),key=lambda x:(-(x[1][0]+x[1][1]),x[0]))#排序过程有详解
for x in l:
    print(x[0],x[1][0],x[1][1])#最后输出

排序过程详解:首先通过上边的循环构造了一个姓名作为键,两科成绩放在一个元组里面作为键值的字典,用dt.items()取所有的键和值放在一个列表里边,未经排序的dt.items()为[(tom,(80,90)),(jack,(80,78)),(lucy,(81,77))],通过sorted的另一个参数key来控制排序方法。
  先考虑成绩不同时的过程:因为sorted默认是从小到大排,所以取两门成绩之和的相反数-(x[1][0]+x[1][1]),(x[1][0]+x[1][1])越大则其相反数就越小,所以成绩中最高的就在前边,
  接下来考虑成绩相同的情况:因为最后返回的是一个元组(-(x[1][0]+x[1][1]),x[0]),元组比较大小是逐个比较的当第一个参数元素相同时即比较第二个,因为sorted默认是从小到大排所以,当分数相同时,姓名字母序小的在前。




 加油!!!

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年11月14日
下一篇 2023年11月14日

相关推荐

此站出售,如需请站内私信或者邮箱!