作为一个信息技术老师,为了迎接浙江19年的新教材,得从零开始学Python了,所以准备写一点我遇到的问题或者一些学习的轨迹,方便以后查阅,或者有可能也帮助一些新学习Python的人。
对于编程我并不是初学者了,因为大学学过C,JAVA,html,as3.0,C#,以及在教学过程中学习的VB,但是都坚持的不长,略懂一些简单的算法,在教学中也够用了。
日前参加了一个Python的初级培训班,在练习基础的Python题目时,遇到了一个困扰我一天的问题,问题如下:
成绩排序
题目描述:
给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
输入格式:
第一行为n (0 < n < 20),表示班里的学生数目;
接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。
输出格式:
把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格。
样例输入:
4
Kitty 80
Hanmeimei 90
Joey 92
Tim 28
样例输出:
Joey 92
Hanmeimei 90
Kitty 80
Tim 28
起初拿到题目,觉得很简单,用字典存,然后排序不就好了么?后来发现,我连字典排序都不会,好吧,那我用列表存吧。
读取数据部分比较简单,因为之前写过好多次了,终于记住了:
n = eval(input())
info=[]
for i in range(n):
info.append(input().split())
只会sort()或者sort(reverse=True),发现解决不了,于是上网找了好多资料,由于理解能力有限,一直不能AC,直找到并使用了高级sort:
info.sort(key=lambda x:(x[0]))
info.sort(key=lambda x:(x[1]),reverse=True)
发现能有4个能AC,6个不能,又开始各种修改,以为语句不对。到后来才发现,原来是数值类型错了,成绩读取的时候是字符串类型,样例给的数据,排序没问题,但是遇到10分和9分的时候就会出错,于是改成:
info.sort(key=lambda x:(x[0]))
info.sort(key=lambda x:(int(x[1])),reverse=True)
终于AC,后来询问老师的时候得到了更简单的写法:
info.sort(key=lambda x:(-int(x[1]),x[0]))
这个困扰一天的问题终于解决了,学会了sort(key=)的用法,对数字进行排序的时候要格外注意类型,对lambda函数有了一个概念。