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
| ''' 随机生成一批学生的学号(6位整数)和成绩[0,100],完成: 按成绩升序排列; 统计各区间[0,60),[60,70),[70,80),[80,90),[90,100]的人数; 列出各区间的名单(按学号降序)。
参考结果如下页:
名单和成绩已生成完毕。
按成绩排序: 79017128 34497263 38093966 89848868 60695168 60591873 43285580 29561281 27561393 459370100
各个区间的人数: 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))}
print('名单和成绩已生成完毕。')
print('\n按成绩排序:') sl = sorted(students.items(),key = lambda x:x[1]) print(*[f'{sId}{scores}' for sId,scores in sl], sep='\n')
gs = list(range(60, 100, 10)) dgs = [f'{start}-{end}' for start,end in zip([0]+gs, gs+[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')
|