-
Notifications
You must be signed in to change notification settings - Fork 0
/
work6.py
62 lines (48 loc) · 1.68 KB
/
work6.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
'''
随机生成一批学生的学号(6位整数)和成绩[0,100],完成:
按成绩升序排列;
统计各区间[0,60),[60,70),[70,80),[80,90),[90,100]的人数;
列出各区间的名单(按学号降序)。
参考结果如下页:
名单和成绩已生成完毕。
按成绩排序:
790171 28
344972 63
380939 66
898488 68
606951 68
605918 73
432855 80
295612 81
275613 93
459370 100
各个区间的人数:
0-60:1人
60-70:4人
70-80:1人
80-90:2人
90-100:2人
各个区间的名单:
0-60:790171
60-70:898488 606951 380939 344972
70-80:605918
80-90:432855 295612
90-100:459370 275613
'''
from random import randint
from itertools import groupby
students = {randint(100000,999999):randint(0,100) for i in range(randint(10,20))}
#生成[10,20]个学生及其成绩,字典可以防止sId重复,因此学生数可能少于10
print('名单和成绩已生成完毕。')
print('\n按成绩排序:')
sl = sorted(students.items(),key = lambda x:x[1])#按成绩排序(sorted list)
print(*[f'{sId} {scores}' for sId,scores in sl], sep='\n')
gs = list(range(60, 100, 10))#分组标准 (grouping standards)
dgs = [f'{start}-{end}' for start,end in zip([0]+gs, gs+[100])]
#生成分组标准的描述 (description of grouping standards ) = ['0-60', '60-70', '70-80', '80-90', '90-100']
g = [(dgs[i],list(v)) for i,v in groupby(sl, lambda x: sum(x[1] >= st for st in gs))]
assert sum(len(sg) for d,sg in g) == len(students)#调试用
print('\n各个区间的人数:')
print(*[f'{d}:{len(sg)}人' for d,sg in g], sep='\n')
print('\n各个区间的名单:')
print(*[f'{d}:{" ".join(str(s[0]) for s in sg)}' for d,sg in g], sep='\n')