成绩排序(思路+代码详解)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默认是从小到大排所以,当分数相同时,姓名字母序小的在前。




 加油!!!

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值