一、题目描述
随机生成一批学生的学号(6位整数)和成绩[0,100],完成以下需求:
- 按成绩升序排序;
- 统计各区间[0,60),[60,70),[70,80),[80,90),[90,100]的人数;
- 列出各区间的名单(按学号降序)。
- 参考结果如下页:
名单和成绩已生成完毕。
按成绩排序:
910861 1
612946 26
726686 32
520680 33
929453 38
507597 47
798982 60
136656 67
153103 84
425355 85
各个区间的人数:
0-60: 6 人
60-70: 2 人
70-80: 0 人
80-90: 2 人
90-100: 0 人
各个区间的名单:
0-60: 507597 726686 520680 929453 612946 910861
60-70: 798982 136656
80-90: 425355 153103
二、题目分析
- 首先要随机生成学号和成绩,第一想法当然是random库,生成一个六位学号用random.randint(100000,999999),生成成绩用random.randint(0,100)。这是生成一个学生的,生成多个的话用for循环即可。
- 为了最后能统计出来学号和成绩,这里要用字典将随机生成的学号和他对应的成绩匹配上。字典就是最好的方法,以学号作为键,以成绩作为值。这样就能起到一一对应的功能,方面之后检索和统计。
- 再生成随机成绩后,每生成一个成绩就进行一次判断,把他放到对应的列表里面,之后用len()就可以多少人了,用"".join()+" "就可以把同一个列表里的学号打印处理啦!
- 升序排列用字典按值排序,dic_name_score_sort = sorted(dic_name_score.items(), key=lambda x: x[1])。
- 打印区间名单的时候,要加一个判断,当对应列表中没有元素,即len(list) != 0时,打印相关信息,等于0时,就不打印了。
三、代码
直接将代码粘在在下面:
import random
dic_name_score = {}
zero_six = []
six_seven = []
seven_eight =[]
eight_nine = []
nine_full = []
zero_six_str = ''
six_seven_str = ''
seven_eight_str = ''
eight_nine_str = ''
nine_full_str = ""
for i in range(10):
student_num = random.randint(100000,999999)
student_score = random.randint(0,100)
dic_name_score[student_num] = student_score
if student_score <60:
zero_six.append(student_num)
elif 60<= student_score <70:
six_seven.append(student_num)
elif 70 <= student_score < 80:
seven_eight.append(student_num)
elif 80<= student_score < 90:
eight_nine.append(student_num)
else:
nine_full.append(student_num)
dic_name_score_sort = sorted(dic_name_score.items(), key=lambda x: x[1])
print("名单和成绩已生成完毕。")
print("按成绩排序:")
for i in dic_name_score_sort:
print(i[0]," ",i[1])
print("各个区间的人数:")
print("0-60:",len(zero_six),"人")
print("60-70:",len(six_seven),"人")
print("70-80:",len(seven_eight),"人")
print("80-90:",len(eight_nine),"人")
print("90-100:",len(nine_full),"人")
print("各个区间的名单:")
if len(zero_six) != 0:
for i in range(0,len(zero_six)):
zero_six_str += str(zero_six[i])+" "
print("0-60:",zero_six_str)
if len(six_seven) != 0:
for i in range(0,len(six_seven)):
six_seven_str += str(six_seven[i])+" "
print("60-70:",six_seven_str)
if len(seven_eight) != 0:
for i in range(0,len(seven_eight)):
seven_eight_str += str(seven_eight[i])+" "
print("70-80:",seven_eight_str)
if len(eight_nine) != 0:
for i in range(0,len(eight_nine)):
eight_nine_str += str(eight_nine[i])+" "
print("80-90:",eight_nine_str)
if len(nine_full) != 0:
for i in range(0,len(nine_full)):
nine_full_str += str(nine_full[i])+" "
print("90-100:",nine_full_str)
四、总结
这道题不难,总体思路比较清晰,重点在于字典的创建,排序。这题有以下知识点:
- 产生随机数。
- 字典创建与排序
- 列表相关处理与统计
- 代码逻辑及细节处理
本文含有隐藏内容,请 开通VIP 后查看