当前位置:首页>python>跟我学Python-组合数据-综合举例(十一)

跟我学Python-组合数据-综合举例(十一)

  • 2026-08-23 06:26:30
跟我学Python-组合数据-综合举例(十一)

前2节我们介绍了组合数据类型中的字符串和列表,通过例子详细说明了这2个对象的使用,本小节通过一个实例综合说明其应用。

例4-10 设计一个学生成绩管理子系统。含学生个人信息、成绩的输入;学生成绩的查询和统计。

编程分析:

假设学生的成绩信息含有学号,姓名,性别,课程,成绩等项。

到目前为止,我们的程序设计只处于流程设计阶段,没有介绍过与界面设计有关的代码设计,因此只能使用最普通的功能菜单方式实现题意要求:

1-输入学生成绩

2-学生成绩查询-按学号

3-学生成绩查询-按课程

4-学生成绩排序-按课程

0-退出

选择其中的一项,完成对应的功能。进入功能菜单前,创建一个空的列表li_stu,用来存放学生的课程成绩信息。其元素是又一个列表,含有学号,姓名,性别,课程,成绩等项,在程序中通过选择功能1输入。

1、输入学生成绩

设计时,以循环方式完成输入,每次输入一行line,行内含有一个学生的课程成绩信息,中间以“,”分隔。当输入为空行时,结束输入。否则将linek上的信息按“,”分解(split),分解后将成绩数字串转换成整数。然后使用遍历的方式,从li_stu列表中检索输入的学生课程成绩是否存在于li_stu中,如果存在则替换原成绩,否则在li_stu中添加一个学生的课程成绩信息。

相关代码如下:

print('请输入学生成绩信息:学号,姓名,性别,课程,成绩:')line = input() # 输入学生课程成绩whilelen(line)!=0# 空行结束  li_info = line.split(','# 分解  #['202202318801''陈杜甜''女''Python''71']  if li_info[4].isdigit():    li_info[4] = int(li_info[4])  # 转换成整数    for i inrange(len(li_stu)):      if li_stu[i][0]==li_info[0] and li_stu[i][3]==li_info[3]: #是否存在学生的课程成绩        li_stu[i] = li_info        break    else:        li_stu.append(li_info) #不存在,则添加  else:    print(f'{li_info}中成绩:{li_info[4]} 表示不正确!')    continue  line = input()   # 输入下个学生的课程成绩

2、学生成绩查询-按学号

先输入一个学号stu_id,然后通过for语句遍历li_stu,当查询到是学号为stu_id时,则输出该学生的成绩信息,相关代码如下:

stu_id = input('请输入学生的学号:')for stu in li_stu:  # stu为学生的课程成绩信息  ifstu[0]==stu_id:# 查到,则输出该学生的课程成绩信息    forstu_xin stu:      print(stu_x, end='\t')  # 按'\t'分隔显示相关数据    print() # 一个课程成绩信息显示一行

3、学生成绩查询-按课程

先输入一门课程名stu_course,然后通过一个for语句遍历li_stu,当查询到是课程名为stu_course时,则输出该学生的成绩信息,相关代码如下:

stu_course = input('请输入查询的课程:')for stu in li_stu:  # stu为学生的课程成绩信息  ifstu[3]==stu_course:# 是否为查询的课程    forstu_xin stu:      print(stu_x, end='\t')    print()

4、学生成绩排序-按课程

先输入一门课程名stu_course,然后使用带条件的列表推导式将li_stu中课程名为stu_course的成绩信息,则输出该学生的成绩信息推送到列表li_target中,最后对li_target列表按成绩降序(reverse=True)排序后,输出排序结果。

但在对li_target排序时,需要注意,因li_targetg列表中的每个元素又是一个含有学号,姓名,性别,课程,成绩的列表,因此不能简单地使用sort()方法进行排序,而是需要使用sort()方法中的key参数,告诉要按哪个子元素进行排序,此时就需要使用到一个名为lambda的匿名函数,格式如下:

lambda 参数 : 表达式

即根据参数的值返回表达式的值。这里我们不是要返回表达式的值,而是按什么排序。li_targetgk中的元素为列表,即将元素传入,再按元素的第4项进行排序,因此lambda函数为:

lambda k:k[4]

相关代码设计如下:

stu_course = input('请输入排序的课程:')li_target = [stu for stu in li_stu if stu[3]==stu_course] # 带条件的列表推导式# 注意:li_target列表中的每个元素又是一个列表,成绩位于第4项li_target.sort(key=lambda k:k[4], reverse=True# 按成绩降序排列for stu in li_target:  # stu为学生的课程成绩信息  forstu_xin stu:      print(stu_x, end='\t')  print()

将以上代码使用一个菜单结构连接后,整个学生成绩管理子系统就完成了,完整代码设计如下:

''''''li_stu = [] # 存放学生所有信息的列表whileTrue:  print('1-输入学生成绩')  print('2-学生成绩查询-按学号')  print('3-学生成绩查询-按课程')  print('4-学生成绩排序-按课程')  print('0-退出')  sele = input('请选择1-4:').strip() # 去除前后空格  if sele == '1'# 选择第1项    print('请输入学生成绩信息:学号,姓名,性别,课程,成绩:')    line = input() # 输入学生课程成绩    whilelen(line)!=0# 空行结束      li_info = line.split(','# 分解      #['202202318801''陈杜甜''女''Python''71']      if li_info[4].isdigit():        li_info[4] = int(li_info[4])  # 转换成整数        for i inrange(len(li_stu)):          if li_stu[i][0]==li_info[0] and li_stu[i][3]==li_info[3]: #是否存在学生的课程成绩            li_stu[i] = li_info            break        else:            li_stu.append(li_info) #不存在,则添加      else:        print(f'{li_info}中成绩:{li_info[4]} 表示不正确!')        continue      line = input()   # 输入下个学生的课程成绩  elif sele == '2'# 成绩查询-按学号    stu_id = input('请输入学生的学号:')    for stu in li_stu:  # stu为学生的课程成绩信息      ifstu[0]==stu_id:# 查到,则输出该学生的课程成绩信息        forstu_xin stu:          print(stu_x, end='\t')  # 按'\t'分隔显示相关数据        print() # 一个课程成绩信息显示一行  elif sele == '3'# 成绩查询-按课程    stu_course = input('请输入查询的课程:')    for stu in li_stu:  # stu为学生的课程成绩信息      ifstu[3]==stu_course:# 是否为查询的课程        forstu_xin stu:          print(stu_x, end='\t')        print()  elif sele == '4'# 成绩排序-按课程    stu_course = input('请输入排序的课程:')    li_target = [stu for stu in li_stu if stu[3]==stu_course] # 带条件的列表推导式    # 注意:li_target列表中的每个元素又是一个列表,成绩位于第4项    li_target.sort(key=lambda k:k[4], reverse=True# 按成绩降序排列    for stu in li_target:  # stu为学生的课程成绩信息      forstu_xin stu:          print(stu_x, end='\t')      print()  elif sele == '0':    break

程序的执行过程如下:

1-输入学生成绩

2-学生成绩查询-按学号

3-学生成绩查询-按课程

4-学生成绩排序-按课程

0-退出

请选择1-4:1

请输入学生成绩信息:学号,姓名,性别,课程,成绩:

202202318801,陈杜甜,女,Python,71

202202318802,陈静玉,女,Python,79

202202318803,顾玲艳,女,Python,72

202202318805,胡琬瑶,女,Python,77

202202318808,贾论浩,男,Python,78

202202318809,金晓杰,男,Python,72

202202318812,李雨文,男,Python,85

202202318815,刘威,男,Python,74

202202318816,陆庭健,男,Python,87

202202318818,孙泽南,男,Python,76

202202318801,陈杜甜,女,大学英语,69

202202318802,陈静玉,女,大学英语,87

202202318803,顾玲艳,女,大学英语,84

202202318805,胡琬瑶,女,大学英语,92

202202318808,贾论浩,男,大学英语,80

202202318809,金晓杰,男,大学英语,69

202202318812,李雨文,男,大学英语,53

202202318815,刘威,男,大学英语,60

202202318816,陆庭健,男,大学英语,94

202202318818,孙泽南,男,大学英语,50

202202318801,陈杜甜,女,马克思基本原理,63

202202318802,陈静玉,女,马克思基本原理,74

202202318803,顾玲艳,女,马克思基本原理,83

202202318805,胡琬瑶,女,马克思基本原理,73

202202318808,贾论浩,男,马克思基本原理,72

202202318809,金晓杰,男,马克思基本原理,93

202202318812,李雨文,男,马克思基本原理,88

202202318815,刘威,男,马克思基本原理,55

202202318816,陆庭健,男,马克思基本原理,60

202202318818,孙泽南,男,马克思基本原理,60

202202318801,陈杜甜,女,财务管理,90

202202318802,陈静玉,女,财务管理,60

202202318803,顾玲艳,女,财务管理,65

202202318805,胡琬瑶,女,财务管理,67

202202318808,贾论浩,男,财务管理,63

202202318809,金晓杰,男,财务管理,60

202202318812,李雨文,男,财务管理,71

202202318815,刘威,男,财务管理,67

202202318816,陆庭健,男,财务管理,66

202202318818,孙泽南,男,财务管理,83

1-输入学生成绩

2-学生成绩查询-按学号

3-学生成绩查询-按课程

4-学生成绩排序-按课程

0-退出

请选择1-4:2

请输入学生的学号:202202318803

202202318803 顾玲艳 女 Python 72

202202318803 顾玲艳 女 大学英语 84

202202318803 顾玲艳 女 马克思基本原理 83

202202318803 顾玲艳 女 财务管理 65

1-输入学生成绩

2-学生成绩查询-按学号

3-学生成绩查询-按课程

4-学生成绩排序-按课程

0-退出

请选择1-4:1

请输入学生成绩信息:学号,姓名,性别,课程,成绩:

202202318803,顾玲艳,女,财务管理,88

1-输入学生成绩

2-学生成绩查询-按学号

3-学生成绩查询-按课程

4-学生成绩排序-按课程

0-退出

请选择1-4:2

请输入学生的学号:202202318803

202202318803 顾玲艳 女 Python 72

202202318803 顾玲艳 女 大学英语 84

202202318803 顾玲艳 女 马克思基本原理 83

202202318803 顾玲艳 女 财务管理 88

1-输入学生成绩

2-学生成绩查询-按学号

3-学生成绩查询-按课程

4-学生成绩排序-按课程

0-退出

请选择1-4:3

请输入查询的课程:大学英语

202202318801 陈杜甜 女 大学英语 69

202202318802 陈静玉 女 大学英语 87

202202318803 顾玲艳 女 大学英语 84

202202318805 胡琬瑶 女 大学英语 92

202202318808 贾论浩 男 大学英语 80

202202318809 金晓杰 男 大学英语 69

202202318812 李雨文 男 大学英语 53

202202318815 刘威 男 大学英语 60

202202318816 陆庭健 男 大学英语 94

202202318818 孙泽南 男 大学英语 50

1-输入学生成绩

2-学生成绩查询-按学号

3-学生成绩查询-按课程

4-学生成绩排序-按课程

0-退出

请选择1-4:4

请输入排序的课程:大学英语

202202318816 陆庭健 男 大学英语 94

202202318805 胡琬瑶 女 大学英语 92

202202318802 陈静玉 女 大学英语 87

202202318803 顾玲艳 女 大学英语 84

202202318808 贾论浩 男 大学英语 80

202202318801 陈杜甜 女 大学英语 69

202202318809 金晓杰 男 大学英语 69

202202318815 刘威 男 大学英语 60

202202318812 李雨文 男 大学英语 53

202202318818 孙泽南 男 大学英语 50

到此,大功告成,来一杯香槟庆祝一下!

最新文章

随机文章