Python Day9 :一个小练习

来源:互联网 发布:淘宝管制刀具的定义为 编辑:程序博客网 时间:2024/05/29 09:21

要求:先输入组数n,再输入n组姓名与分数,将姓名与分数按照姓名首字母排序,然后按相同的分数组输出,再输出分数组内的排名到底是几到几。具体要求如下图所示

源代码:
# -*- coding: utf-8 -*-"""Created on Fri Sep 22 08:43:56 2017@author: fengt"""a=eval(input(''))c=[]d={}g={}k=0for i in range(a):     b=input()    c.append(b.split(' '))    d[c[i][0]]=c[i][1]e=sorted(d.items(), key=lambda item:item[0])#以item[0],即d字典的key值作排序for i in range(a):    if e[i][1] in g.keys():#创建一个字典f,以e列表中的分数作为key值,以相同分数的名字作为value        f=[]        f.append(g[e[i][1]])        f.append(e[i][0])#不能直接在value后append,否则会报错        g[e[i][1]]=f    else:        g[e[i][1]]=e[i][0]h=sorted(g.items(), key=lambda item:int(item[0]))#需要将分数转化为int型,否则52将排在123后面,但按照要求其实可以忽略for i in range(len(h)):    if isinstance(h[i][1],list):       for j in range(len(h[i][1])):           print(h[i][1][j],end=' ')           k=k+1       if j==0:           print(k, k)       else:           print(k-j,k)#在这个地方耗费了太多时间,应该好好学学数据结构
输入:
7Abandond 132JulyKate 234DaveCage 132Lois 155Vera 170JohnnyCash 210JasonMraz 155

输出:
Abandond DaveCage 1 2JasonMraz Lois 3 4Vera 5 5JohnnyCash 6 6JulyKate 7 7

这是大概最简单的那道题,花了2个多小时才不停的修正改好,说不出的滋味,国庆节的假期消磨人心,
也充分认识到了自己的不足。
原创粉丝点击