随机生成学号和成绩并排序

发布于:2022-10-17 ⋅ 阅读:(544) ⋅ 点赞:(0)

一、题目描述

随机生成一批学生的学号(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 

二、题目分析

  1. 首先要随机生成学号和成绩,第一想法当然是random库,生成一个六位学号用random.randint(100000,999999),生成成绩用random.randint(0,100)。这是生成一个学生的,生成多个的话用for循环即可。
  2. 为了最后能统计出来学号和成绩,这里要用字典将随机生成的学号和他对应的成绩匹配上。字典就是最好的方法,以学号作为键,以成绩作为值。这样就能起到一一对应的功能,方面之后检索和统计。
  3. 再生成随机成绩后,每生成一个成绩就进行一次判断,把他放到对应的列表里面,之后用len()就可以多少人了,用"".join()+" "就可以把同一个列表里的学号打印处理啦!
  4. 升序排列用字典按值排序,dic_name_score_sort = sorted(dic_name_score.items(), key=lambda x: x[1])。
  5. 打印区间名单的时候,要加一个判断,当对应列表中没有元素,即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 后查看

网站公告

今日签到

点亮在社区的每一天
去签到