成绩排序(python)

您所在的位置:网站首页 怎样按照分数排序 成绩排序(python)

成绩排序(python)

2024-07-08 22:19| 来源: 网络整理| 查看: 265

查找和排序

题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。 示例: jack 70 peter 96 Tom 70 smith 67 从高到低 成绩 peter 96 jack 70 Tom 70 smith 67 从低到高 smith 67 jack 70 Tom 70 peter 96

输入描述:

输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开

输出描述:

按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

分析:

用到的知识: 1.sorted函数(这是一个稳定的排序方法) sorted( iterable, key, reverse) (1)iterable:是可迭代类型的数据; (2)key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;(一般用key=lambda x:x[i] ,lambda x:x[i] 是一个匿名函数,i为几就是第几个数字,如果是用的字典x[0]就是按照字典的key排序,x[1]就是按照字典的value排序 ) (3)reverse:排序规则. reverse = True 或者 reverse = False,有默认值,默认为升序排列False(即默认从小到大排序) 2.join()函数 'sep'.join(seq) 参数说明 sep:分隔符。可以为空 seq:要连接的元素序列、字符串、元组、字典 意思就是以sep作为分隔符,将seq所有的元素合并成一个新的字符串 比如 ’ '.join(new)就是以空格作为分隔符,将new里面的元素合并为一个新的字符串 正确代码

import math import os try: while True: n=int(input()) flag=int(input()) keys = [] for i in range(n): s=str(input()) value = s.split(' ',1) keys.append(value) if(flag==0): new=sorted(keys, key=lambda d: int(d[1]),reverse=True) for i in range(n): print(' '.join(new[i])) else: new=sorted(keys, key=lambda d: int(d[1]),reverse=False) for i in range(n): print(' '.join(new[i])) except: pass 错误写法分析:

看到题目第一想法就是写字典,然后运行发现,采用字典的话,如果有相同名字的人,那么会前一个人的成绩会被后一个人覆盖 错误写法(注意): ac40%

import math import collections try: while True: n=int(input()) flag=int(input()) dict1 = collections.OrderedDict() #这种写法可以避免字典乱序,避免每次编译之后字典种元素的位置不一样 key = [] for i in range(n): s=str(input()) value = s.split(' ',1)#利用空格将字符串分开放进字典 dict1[value[0]]=value[1] key.append(value[0]) if(flag==0): new=collections.OrderedDict(sorted(dict1.items(), key=lambda d: int(d[1]),reverse=True))#排序函数 for i in new.keys(): print(i,new[i]) else: new=collections.OrderedDict(sorted(dict1.items(), key=lambda d: int(d[1]),reverse=False)) for i in new.keys(): print(i,new[i]) except: pass


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3