Python Day9 :一个小练习

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

Python Day9 :一个小练习_第1张图片
源代码:
# -*- coding: utf-8 -*-
"""
Created on Fri Sep 22 08:43:56 2017

@author: fengt
"""
a=eval(input(''))
c=[]
d={}
g={}
k=0
for 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)#在这个地方耗费了太多时间,应该好好学学数据结构
输入:
7

Abandond 132

JulyKate 234

DaveCage 132

Lois 155

Vera 170

JohnnyCash 210

JasonMraz 155

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

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

你可能感兴趣的:(python)