鱼C论坛

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

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

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

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

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

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

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


要求最后打印出如下的结果:三列分别是名次,姓名和成绩
  1. 1 T 100
  2. 2 S 96
  3. 3 J 94
  4. 3 K 94
  5. 3 P 94
  6. 3 W 94
  7. 7 C 92
  8. 7 Z 92
  9. 9 H 89
  10. 9 Y 89
  11. 11 E 88
  12. 11 I 88
  13. 11 O 88
  14. 14 D 87
  15. 15 B 86
  16. 15 G 86
  17. 17 F 85
  18. 18 R 84
  19. 19 M 83
  20. 20 Q 82
  21. 20 U 82
  22. 22 V 81
  23. 22 X 81
  24. 24 A 80
  25. 24 L 80
  26. 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 | 显示全部楼层
  1. def score():
  2.     score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
  3.          ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
  4.          ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
  5.          ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
  6.          ('Y', 89), ('Z', 92)]
  7.     score.sort(key=lambda k: k[1], reverse=True)
  8.     flag = 1
  9.     score[0] = score[0] + (flag,)
  10.     for i in range(1,len(score)):
  11.         if score[i][1] == score[i-1][1]:
  12.             score[i] = score[i] + (score[i-1][2],)
  13.             flag += 1
  14.         else:
  15.             flag += 1
  16.             score[i] = score[i] + (flag,)
  17.             
  18.     return score

  19. if __name__ == '__main__':
  20.     score = score()
  21.     for i in range(len(score)):
  22.         print(score[i][2],score[i][0],score[i][1])
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-9-7 21:07:48 | 显示全部楼层
  1. score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
  2. ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
  3. ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
  4. ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
  5. ('Y', 89), ('Z', 92)]
  6. score.sort(key=lambda d:d[1],reverse=True)
  7. index0 = 1
  8. print('1',score[0][0],score[0][1])
  9. for i in range(1,len(score)):
  10.     if(score[i][1]==score[i-1][1]):
  11.            print(index0,score[i][0],score[i][1])
  12.     else:
  13.            index0 = i+1
  14.            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 编辑
  1. score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
  2.          ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
  3.          ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
  4.          ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
  5.          ('Y', 89), ('Z', 92)]
  6. def score_sorted(list_sc):
  7.         new_list = sorted(zip(dict(list_sc).values(),dict(list_sc).keys()),reverse= True)
  8.         number = 1
  9.         flog =1
  10.         list1=[new_list[0][0]]
  11.         
  12.         for score,name in new_list:
  13.               if score in list1:
  14.                     print(number,name,score)
  15.                     flog+=1
  16.                     
  17.               else:
  18.                     number = flog
  19.                     print(number,name,score)
  20.                     list1.append(score)
  21.                     flog+=1
  22.               
  23.                         

  24. score_sorted(score)
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

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


  16.    

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

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

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

  23. for each in lis:
  24.     print(each[0],each[1],each[2])
  25. ————————————————————————————
  26. 运行结果
  27. ===================== RESTART: D:\Python36-32\caogao.py =====================
  28. 1 T 100
  29. 2 S 96
  30. 3 W 94
  31. 3 P 94
  32. 3 K 94
  33. 3 J 94
  34. 7 Z 92
  35. 7 C 92
  36. 9 Y 89
  37. 9 H 89
  38. 11 O 88
  39. 11 I 88
  40. 11 E 88
  41. 14 D 87
  42. 15 G 86
  43. 15 B 86
  44. 17 F 85
  45. 18 R 84
  46. 19 M 83
  47. 20 U 82
  48. 20 Q 82
  49. 22 X 81
  50. 22 V 81
  51. 24 N 80
  52. 24 L 80
  53. 24 A 80
  54. >>>
复制代码

评分

参与人数 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 编辑
  1. score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
  2.          ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
  3.          ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
  4.          ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
  5.          ('Y', 89), ('Z', 92)]

  6. score.sort(key=lambda item:item[1],reverse=True)
  7. for i in range(len(score)):
  8.     if i>0:
  9.         if score[i][1]!=score[i-1][1]:
  10.             now=i+1
  11.     else:
  12.         now=i+1
  13.     print(now,score[i][0],score[i][1])            

  14.    
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-9-8 06:38:24 | 显示全部楼层
  1. score.sort(key=lambda n: n[1], reverse=True)
  2. for m,n in enumerate(score):
  3.         c = m+1 if n[1]!=score[m-1][1] else c
  4.         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 编辑
  1. score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
  2.          ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
  3.          ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
  4.          ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
  5.          ('Y', 89), ('Z', 92)]

  6. rank = sorted(score, key = lambda e: e[1], reverse = True)
  7. rank[0] = (1,) + rank[0]
  8. temp = rank[0][2]
  9. print(rank[0][0], rank[0][1], rank[0][2])
  10. for i in range(1,len(rank)):
  11.     if rank[i][1] != temp:
  12.         rank[i] = (i + 1,) + rank[i]
  13.         temp = rank[i][2]
  14.     else:
  15.         rank[i] = (rank[i-1][0],) + rank[i]
  16.         temp = rank[i][2]
  17.     print(rank[i][0], rank[i][1], rank[i][2])
复制代码

输出:
  1. 1 T 100
  2. 2 S 96
  3. 3 J 94
  4. 3 K 94
  5. 3 P 94
  6. 3 W 94
  7. 7 C 92
  8. 7 Z 92
  9. 9 H 89
  10. 9 Y 89
  11. 11 E 88
  12. 11 I 88
  13. 11 O 88
  14. 14 D 87
  15. 15 B 86
  16. 15 G 86
  17. 17 F 85
  18. 18 R 84
  19. 19 M 83
  20. 20 Q 82
  21. 20 U 82
  22. 22 V 81
  23. 22 X 81
  24. 24 A 80
  25. 24 L 80
  26. 24 N 80
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-9-8 18:24:51 | 显示全部楼层
先生成索引,再用字典把相同的分数的排名变成同一个
  1. def fun(a):
  2.     lst = list(enumerate(sorted(a, key=lambda x: x[1],reverse=True), 1))
  3.     dic = {j[1]:i for i,j in lst[::-1]}
  4.     for _,k in lst:
  5.         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 | 显示全部楼层
  1. score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
  2.          ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
  3.          ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
  4.          ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
  5.          ('Y', 89), ('Z', 92)]

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

  11. #处理序号
  12. for i in range(len(score)):
  13.     if score[i][1] != score[i-1][1]:
  14.         print(i+1,score[i][0],score[i][1])
  15.         n = i+1
  16.     else:
  17.         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 编辑
  1. score = [('A', 80), ('B', 86), ('C', 92), ('D', 87), ('E', 88), ('F', 85),
  2.          ('G', 86), ('H', 89), ('I', 88), ('J', 94), ('K', 94), ('L', 80),
  3.          ('M', 83), ('N', 80), ('O', 88), ('P', 94), ('Q', 82), ('R', 84),
  4.          ('S', 96), ('T', 100), ('U', 82), ('V', 81), ('W', 94), ('X', 81),
  5.          ('Y', 89), ('Z', 92)]

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

  8. rank1 = 1
  9. rank2 = 1

  10. for i in range(0,25):
  11.         if score[i][1] !=  score[i+1][1] and score[i][1] != score[i-1][1]:
  12.                 print(rank1,score[i][0],score[i][1])
  13.                 rank1 += 1
  14.                 rank2 += 1

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

  18.         elif score[i][1] !=  score[i+1][1] and score[i][1] ==  score[i-1][1]:
  19.                 print(rank1,score[i][0],score[i][1])
  20.                 rank2 += 1               
  21.                 rank1 = rank2

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

使用道具 举报

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

  6. sort = sorted(score, key=lambda student: student[1], reverse=True)
  7. out = []
  8. temp = {}
  9. for index, student in enumerate(sort):
  10.     rank = temp.get(student[1], index + 1)
  11.     out.append((rank, *student))
  12.     temp[student[1]] = rank
  13. 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-4-19 17:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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