一、题目描述
随机生成一批学生的学号(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时,就不打印了。
三、代码
直接将代码粘在在下面:
1. import random 2. dic_name_score = {} 3. zero_six = [] 4. six_seven = [] 5. seven_eight =[] 6. eight_nine = [] 7. nine_full = [] 8. zero_six_str = '' 9. six_seven_str = '' 10. seven_eight_str = '' 11. eight_nine_str = '' 12. nine_full_str = "" 13. for i in range(10): 14. student_num = random.randint(100000,999999) 15. student_score = random.randint(0,100) 16. dic_name_score[student_num] = student_score 17. if student_score <60: 18. zero_six.append(student_num) 19. elif 60<= student_score <70: 20. six_seven.append(student_num) 21. elif 70 <= student_score < 80: 22. seven_eight.append(student_num) 23. elif 80<= student_score < 90: 24. eight_nine.append(student_num) 25. else: 26. nine_full.append(student_num) 27. dic_name_score_sort = sorted(dic_name_score.items(), key=lambda x: x[1]) 28. print("名单和成绩已生成完毕。") 29. print("按成绩排序:") 30. for i in dic_name_score_sort: 31. print(i[0]," ",i[1]) 32. print("各个区间的人数:") 33. print("0-60:",len(zero_six),"人") 34. print("60-70:",len(six_seven),"人") 35. print("70-80:",len(seven_eight),"人") 36. print("80-90:",len(eight_nine),"人") 37. print("90-100:",len(nine_full),"人") 38. print("各个区间的名单:") 39. if len(zero_six) != 0: 40. for i in range(0,len(zero_six)): 41. zero_six_str += str(zero_six[i])+" " 42. print("0-60:",zero_six_str) 43. if len(six_seven) != 0: 44. for i in range(0,len(six_seven)): 45. six_seven_str += str(six_seven[i])+" " 46. print("60-70:",six_seven_str) 47. if len(seven_eight) != 0: 48. for i in range(0,len(seven_eight)): 49. seven_eight_str += str(seven_eight[i])+" " 50. print("70-80:",seven_eight_str) 51. if len(eight_nine) != 0: 52. for i in range(0,len(eight_nine)): 53. eight_nine_str += str(eight_nine[i])+" " 54. print("80-90:",eight_nine_str) 55. if len(nine_full) != 0: 56. for i in range(0,len(nine_full)): 57. nine_full_str += str(nine_full[i])+" " 58. print("90-100:",nine_full_str)
四、总结
这道题不难,总体思路比较清晰,重点在于字典的创建,排序。这题有以下知识点:
- 产生随机数。
- 字典创建与排序
- 列表相关处理与统计
- 代码逻辑及细节处理