题目:
生成60个30-100之间的随机整数作为分数(score),统计其中各个分数出现的次数,按照出现次数的从高到低的顺序(不包括出现次数为0的分数)打印出来。
首先采用每行:分数 次数格式输出
其次每行: 次数:分数1、分数2… 的格式输出
代码:
import random
score_num = {} # key=score,value=num
for _ in range(60):
score = random.randint(30, 100) # 产生30-100的随机整数(包括30和100)
score_num[score] = score_num.get(score, 0) + 1 # 更新score的次数
num_scores = {} # key=num,value=list[score]
for score, num in sorted(score_num.items(), key=lambda x: (-x[1], x[0])):
print(f'{score}\t{num}')
if num in num_scores:
num_scores[num].append(str(score))
else:
num_scores[num] = [str(score)] # value以列表形式存放
print()
for num, scores in sorted(num_scores.items(), key=lambda x: (-x[0], x[1])):
print(f'次数 {num}: {", ".join(scores)}')
result:
69 4
43 3
47 3
59 3
75 3
42 2
51 2
56 2
62 2
63 2
74 2
76 2
79 2
90 2
95 2
31 1
33 1
35 1
40 1
46 1
50 1
52 1
53 1
58 1
61 1
65 1
67 1
68 1
70 1
71 1
72 1
80 1
81 1
85 1
88 1
89 1
96 1
99 1
100 1
次数 4: 69
次数 3: 43, 47, 59, 75
次数 2: 42, 51, 56, 62, 63, 74, 76, 79, 90, 95
次数 1: 31, 33, 35, 40, 46, 50, 52, 53, 58, 61, 65, 67, 68, 70, 71, 72, 80, 81, 85, 88, 89, 96, 99, 100