鱼C论坛

 找回密码
 立即注册
查看: 6896|回复: 50

[技术交流] Python:每日一题 94(答题领鱼币)

[复制链接]
发表于 2017-9-7 19:12:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
要给班上同学的成绩排名次,规则如下:
成绩从高往低排,如果有成绩相同的名次相同,但后续的名次要算前面的总人数。
比如,两个100分的都是第一名,紧接着的99分的是第三名,而不是第二名。

给出一个列表,是全班的成绩:
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]

要求最后打印出如下的结果:三列分别是名次,姓名和成绩
1 T 100
2 S 96
3 J 94
3 K 94
3 P 94
3 W 94
7 C 92
7 Z 92
9 H 89
9 Y 89
11 E 88
11 I 88
11 O 88
14 D 87
15 B 86
15 G 86
17 F 85
18 R 84
19 M 83
20 Q 82
20 U 82
22 V 81
22 X 81
24 A 80
24 L 80
24 N 80

我的解法:
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-7 20:27:00 | 显示全部楼层
本帖最后由 Noregret 于 2017-9-7 21:07 编辑

score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]

a = sorted(score, key=lambda x:x[1])
a.reverse()

b = []
for each in a:
    tuple1 = [each[0], each[1]]
    b.append(tuple1)

print(b)
for each in range(1, 27):
    b[each - 1].insert(0, each)

for c in range(1, 27):
    if b[c - 1][2] == b[c - 2][2]:
        b[c - 1][0] = b[c - 2][0]
        
    print(b[c - 1][0], b[c - 1][1], b[c - 1][2])

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 最后一行要缩进

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-9-7 20:53:17 | 显示全部楼层
def score():
    score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]
    score.sort(key=lambda k: k[1], reverse=True)
    flag = 1
    score[0] = score[0] + (flag,)
    for i in range(1,len(score)):
        if score[i][1] == score[i-1][1]:
            score[i] = score[i] + (score[i-1][2],)
            flag += 1
        else:
            flag += 1
            score[i] = score[i] + (flag,)
            
    return score

if __name__ == '__main__':
    score = score()
    for i in range(len(score)):
        print(score[i][2],score[i][0],score[i][1])

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-7 21:07:48 | 显示全部楼层
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
('Y', 89), ('Z', 92)]
score.sort(key=lambda d:d[1],reverse=True)
index0 = 1
print('1',score[0][0],score[0][1])
for i in range(1,len(score)):
    if(score[i][1]==score[i-1][1]):
           print(index0,score[i][0],score[i][1])
    else:
           index0 = i+1
           print(i+1,score[i][0],score[i][1])
运行结果:
1 T 100
2 S 96
3 J 94
3 K 94
3 P 94
3 W 94
7 C 92
7 Z 92
9 H 89
9 Y 89
11 E 88
11 I 88
11 O 88
14 D 87
15 B 86
15 G 86
17 F 85
18 R 84
19 M 83
20 Q 82
20 U 82
22 V 81
22 X 81
24 A 80
24 L 80
24 N 80

请按任意键继续. . .

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-7 21:13:36 | 显示全部楼层
本帖最后由 左手十字 于 2017-9-7 22:47 编辑
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]
def score_sorted(list_sc):
        new_list = sorted(zip(dict(list_sc).values(),dict(list_sc).keys()),reverse= True)
        number = 1
        flog =1
        list1=[new_list[0][0]]
        
        for score,name in new_list:
              if score in list1:
                    print(number,name,score)
                    flog+=1
                    
              else:
                    number = flog
                    print(number,name,score)
                    list1.append(score)
                    flog+=1
              
                        

score_sorted(score)

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-7 21:19:26 | 显示全部楼层
本帖最后由 ChrisYang 于 2017-9-7 21:43 编辑
e = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]
scores=[]#该列表只有成绩
for i in e:
    score=i[1]
    scores.append(score)
names=[]#该列表只有名字
for i in e:
    name=i[0]
    names.append(name)

score=list(zip(scores,names))
score.sort(reverse=True)#(成绩,名字)正序


    

lis=[]#(名次,名字,成绩)里面是元组形式

for i in range(1,len(e)+1):
    lis.append([i,score[i-1][1],score[i-1][0]])

for i in range(1,len(e)):
    if lis[i][2]==lis[i-1][2]:
        lis[i][0]=lis[i-1][0]

for each in lis:
    print(each[0],each[1],each[2])
————————————————————————————
运行结果
===================== RESTART: D:\Python36-32\caogao.py =====================
1 T 100
2 S 96
3 W 94
3 P 94
3 K 94
3 J 94
7 Z 92
7 C 92
9 Y 89
9 H 89
11 O 88
11 I 88
11 E 88
14 D 87
15 G 86
15 B 86
17 F 85
18 R 84
19 M 83
20 U 82
20 Q 82
22 X 81
22 V 81
24 N 80
24 L 80
24 A 80
>>> 

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-7 21:44:17 | 显示全部楼层

改过来了,刚刚发错了版本
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-7 22:21:42 | 显示全部楼层
改过来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 00:16:44 | 显示全部楼层
本帖最后由 醉挽丶南风 于 2017-9-8 00:17 编辑
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]

score.sort(key=lambda item:item[1],reverse=True)
for i in range(len(score)):
    if i>0:
        if score[i][1]!=score[i-1][1]:
            now=i+1
    else:
        now=i+1
    print(now,score[i][0],score[i][1])            

    

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 06:38:24 | 显示全部楼层
score.sort(key=lambda n: n[1], reverse=True)
for m,n in enumerate(score):
        c = m+1 if n[1]!=score[m-1][1] else c
        print(c,n[0],n[1])

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 08:28:51 | 显示全部楼层
how happy to this
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 11:11:58 | 显示全部楼层
这个真不会 偷窥下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 16:23:00 | 显示全部楼层
本帖最后由 schweinfan 于 2017-9-8 16:25 编辑
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]

rank = sorted(score, key = lambda e: e[1], reverse = True)
rank[0] = (1,) + rank[0]
temp = rank[0][2]
print(rank[0][0], rank[0][1], rank[0][2])
for i in range(1,len(rank)):
    if rank[i][1] != temp:
        rank[i] = (i + 1,) + rank[i]
        temp = rank[i][2]
    else:
        rank[i] = (rank[i-1][0],) + rank[i]
        temp = rank[i][2]
    print(rank[i][0], rank[i][1], rank[i][2])
输出:
1 T 100
2 S 96
3 J 94
3 K 94
3 P 94
3 W 94
7 C 92
7 Z 92
9 H 89
9 Y 89
11 E 88
11 I 88
11 O 88
14 D 87
15 B 86
15 G 86
17 F 85
18 R 84
19 M 83
20 Q 82
20 U 82
22 V 81
22 X 81
24 A 80
24 L 80
24 N 80

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 18:24:51 | 显示全部楼层
先生成索引,再用字典把相同的分数的排名变成同一个
def fun(a):
    lst = list(enumerate(sorted(a, key=lambda x: x[1],reverse=True), 1))
    dic = {j[1]:i for i,j in lst[::-1]}
    for _,k in lst:
        print(dic[k[1]],*k)

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 19:50:01 | 显示全部楼层
有鱼币吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-8 22:48:17 | 显示全部楼层
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]

#冒泡法排序
for i in range(len(score)):
    for j in range(i+1,len(score)):
        if score[i][1] < score[j][1]:
            score[i], score[j] = score[j], score[i]

#处理序号
for i in range(len(score)):
    if score[i][1] != score[i-1][1]:
        print(i+1,score[i][0],score[i][1])
        n = i+1
    else:
        print(n,score[i][0],score[i][1])

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
冬雪雪冬 + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-11 16:24:07 | 显示全部楼层
本帖最后由 zyq940 于 2017-9-11 16:36 编辑
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]

score = sorted(score, key=lambda x:x[1])
score.reverse()

rank1 = 1
rank2 = 1

for i in range(0,25):
        if score[i][1] !=  score[i+1][1] and score[i][1] != score[i-1][1]:
                print(rank1,score[i][0],score[i][1])
                rank1 += 1
                rank2 += 1

        elif score[i][1] == score[i+1][1]:
                print(rank1,score[i][0],score[i][1])
                rank2 += 1

        elif score[i][1] !=  score[i+1][1] and score[i][1] ==  score[i-1][1]:
                print(rank1,score[i][0],score[i][1])
                rank2 += 1                
                rank1 = rank2

print(rank1,score[i+1][0],score[i+1][1])
                
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-11 23:24:47 | 显示全部楼层
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]

sort = sorted(score, key=lambda student: student[1], reverse=True)
out = []
temp = {}
for index, student in enumerate(sort):
    rank = temp.get(student[1], index + 1)
    out.append((rank, *student))
    temp[student[1]] = rank
print('\n'.join('%s %s %s' % (n[0], n[1], n[2]) for n in out))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-12 15:33:03 | 显示全部楼层
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
         ('Y', 89), ('Z', 92)]
score.sort(key = lambda a : a[1],reverse = True)
index = 1
print(str(index),score[0][0],score[0][1])
for i in range(len(score)):
    if score[i][1] == score[i+1][1]:
        print(index+1,score[i+1][0],score[i+1][1])
    else:
        index = i + 1
        print(index+1,score[i+1][0],score[i+1][1])
print(score)
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-13 10:32:38 | 显示全部楼层
score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),

         ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),

         ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),

         ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),

         ('Y', 89), ('Z', 92)]
score.sort(key=lambda s:s[1],reverse=True)
i=0
n=0
for each in score:   
    if score[i][1]>score[i+1][1]:
        print(i+1,score[i][0],score[i][1])
        i=i+1
    else:
        n=i
        print(n,score[i][0],score[i][1])
        i=i+1
        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 01:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表