本次主要使用新学的列表和字典,结合定义函数等知识点,成功编写了一个简单的学生成绩管理系统。实现了在系统内使用学生的姓名或者学号,即可实现显示、添加、删除、修改、查找(增删改查)、成绩排序(从小到大或从大到小)的功能。


一、实现系统效果


二、代码部分

定义函数:

def menu():"""打印出整个菜单:return:"""print("~*" * 60)print("【三国成绩管理系统】".center(100))print("欢迎使用学生成绩管理系统!".center(100))print("请输入需要进行的操作编码:")print("【0】:退出管理系统".center(100))print("【1】:显示学生成绩".center(100))print("【2】:添加学生成绩".center(100))print("【3】:删除学生成绩".center(100))print("【4】:修改学生成绩".center(100))print("【5】:查找学生信息".center(100))print("【6】:学生成绩排序".center(100))print("~*" * 60)# 显示学生成绩
def user_choice():"""确保用户选择数字规范,在(0~6):return:返回合法的用户选择"""number = input("请选择(0~6):")while int(number) > 6 or int(number) < 0:number = input("请重新选择(0~6):")return numberdef display_records():"""显示学生信息表:return:"""print("所有学生信息:")for i in student_list:print("\t\t学号:%s\t\t\t姓名:%s\t\t\t成绩:%s\t\t\t" % (i["学号"], i["姓名"], i["成绩"],))# 增加学生
def add_student(new_student_list):"""增加学生信息:return:"""name = input("请输入学生姓名:")id_number = input("请输入学生学号:")grade = input("请输入新增学生成绩:")# 把这3个数据放入新增字典NewStudent中new_student = {"姓名": name, "学号": id_number, "成绩": grade}# 把它添加到列表student_list中new_student_list.append(new_student)print("已成功增加%s号学生%s信息,成绩为:%s" % (new_student["学号"], new_student["姓名"], new_student["成绩"]))def delete_student(student_list1):"""根据学生姓名学号,删除指定学生信息:param ::return:"""info = input("请输入学生姓名或学号:")while info == "":info = input("输入不能为空,请重新输入:")for s in student_list1:if s['姓名'] == info or s['学号'] == info:student_list1.remove(s)print("已成功删除%s信息,其原成绩为:%s" % (s["姓名"], s["成绩"]))def modify_student():"""根据姓名或学号,修改指定学生信息:param ::return:"""info = input("请输入学生学号或姓名:")while info == "":info = input("输入不能为空,请重新输入学生姓名:")# 遍历现有学生列表,查询内容for i in range(0, len(student_list)):if student_list[i]["学号"] == info or student_list[i]["姓名"] == info:name = input("请输入学修改后生姓名:")id_number = input("请输入修改后学生学号:")grade = input("请输入修改后学生成绩:")# 把这3个数据放入新增字典change_student中change_student = {"学号": id_number,"姓名": name,"成绩": grade}# 用student替换student_list中的第i个字典student_list[i] = change_studentprint("修改成功!")returnprint("修改失败,未查询到该学生。")def search_student():"""查找学生成绩:return:"""name = input("请输入学生姓名或学号:")while name == "":name = input("输入不能为空,请重新输入学生姓名:")for i in student_list:if i['姓名'] == name or i['学号'] == name:print("%s号学生%s成绩为:%s" % (i["学号"], i["姓名"], i["成绩"]))returnelse:print("没有找到该生,请重新输入!")def sort_student():"""按成绩将学生升序、降序排序:return:"""sort = input("请输入排序:(1)从大到小(2)从小到大")if sort == "1":student_list.sort(key=lambda item: item['成绩'])print("已将学生按成绩从小到大排列。")elif sort == "2":student_list.sort(key=lambda x: x['成绩'], reverse=True)print("已将学生按成绩从大到小排列。")

主函数:

choice = Nonewhile choice != "0":# 打印菜单menu()# 获取用户输入choice = user_choice()# 用条件分支去判定各种选择if choice == '1':# 显示数据display_records()elif choice == '2':# 添加一个学生数据add_student(student_list)elif choice == '3':# 删除数据delete_student(student_list)elif choice == '4':# 修改数据modify_student()elif choice == '5':# 查找信息search_student()elif choice == '6':# 成绩排序sort_student()elif choice == '0':# 退出程序print('已退出,欢迎下次登录本系统!')else:print('请重新输入')

三、遇见问题

1、PyCharm黄色警告“从外部范围隐藏名称”

在设置形参的时候总是爆弱黄色,后来查了下资料,有两种方法可以消除警告:

  • 可以重命名函数中使用的爆黄色参数,也就是说,可以选择不同的名称,例如answer,而不是给它相同的名称。

  • 另一种方法是在pycharm中设置,抑制此警告不显示。

使用方法一,解决问题。

2、Python的形参和实参使用方式

在定义函数时,突然一下想不清楚Python的形参和实参使用方式,查找资料,重新温习。

形参可以设置参数默认值,设置遵循从右至左原则
例如:fun(x=0,y=1),fun(x,y=1),但不可以是fun(x=1.y)
形参设置可以为数字字符串变量元组和字典等任意类型数据,元组形参是在变量名前加*字典形参是在变量名前加**

例如:fun(var),fun(*tuple),fun(*list),fun(**dict)
实参接受也可以是任意类型数据,当接收数据为元组列表或者字典时,同样是在数据变量前加*和**

例如:fun(x),fun(*seq),fun(*list),fun(**stu_info)

可以使用元组形参和字典形参接收冗余或意外数据

例如:fun(var,*t_args, *dic_args)
但传参时,数字和字符串形参必须传值,元组和字典形参可不传,因为元组和字典数据可以是空元组或空字典,此特性正好适应处理冗余数据
形参参数名若和生产数据中字典键名相同,将大大提高编程效率和生产效率
例如:有字典dic={'name:csdn,age:10top1},

有函数fun(name=nameage=0,top=0),

则函数可以方便的获取字典数据 fun(**dic)

3、函数的返回值return

        return可以将函数运行的结果反馈给函数,在外部调用函数的时候,使用一个变量接收即可将函数运行的结果输出;

但如果函数内部没有返回值,也没有打印的动作,在外部调用该函数的时候,你在控制台上看不到任何输出,也无法获取函数运行的结果(无返回值将默认返回None,也就是隐性返回值)。

4、判断输入是不是数字

尝试用 str.isdigit()判断,但未成功。改用简单条件判断方式,但在选择程序(0~6)时,遇见字符串会直接退出程序。需后续改进。


全部函数:

# 结合列表和字典,编写一个简单的学生成绩管理系统。
student_list = [{"姓名": "曹操","成绩": 73,"学号": "12"},{"姓名": "司马懿","成绩": 88,"学号": "9"},{"姓名": "刘备","成绩": 88,"学号": "5"},{"姓名": "张飞","成绩": 47,"学号": "1"},{"姓名": "诸葛亮","成绩": 92,"学号": "3"}
]def menu():"""打印出整个菜单:return:"""print("~*" * 60)print("【三国成绩管理系统】".center(100))print("欢迎使用学生成绩管理系统!".center(100))print("请输入需要进行的操作编码:")print("【0】:退出管理系统".center(100))print("【1】:显示学生成绩".center(100))print("【2】:添加学生成绩".center(100))print("【3】:删除学生成绩".center(100))print("【4】:修改学生成绩".center(100))print("【5】:查找学生信息".center(100))print("【6】:学生成绩排序".center(100))print("~*" * 60)# 显示学生成绩
def user_choice():"""确保用户选择数字规范,在(0~6):return:返回合法的用户选择"""number = input("请选择(0~6):")while int(number) > 6 or int(number) < 0:number = input("请重新选择(0~6):")return numberdef display_records():"""显示学生信息表:return:"""print("所有学生信息:")for i in student_list:print("\t\t学号:%s\t\t\t姓名:%s\t\t\t成绩:%s\t\t\t" % (i["学号"], i["姓名"], i["成绩"],))# 增加学生
def add_student(new_student_list):"""增加学生信息:return:"""name = input("请输入学生姓名:")id_number = input("请输入学生学号:")grade = input("请输入新增学生成绩:")# 把这3个数据放入新增字典NewStudent中new_student = {"姓名": name, "学号": id_number, "成绩": grade}# 把它添加到列表student_list中new_student_list.append(new_student)print("已成功增加%s号学生%s信息,成绩为:%s" % (new_student["学号"], new_student["姓名"], new_student["成绩"]))def delete_student(student_list1):"""根据学生姓名学号,删除指定学生信息:param ::return:"""info = input("请输入学生姓名或学号:")while info == "":info = input("输入不能为空,请重新输入:")for s in student_list1:if s['姓名'] == info or s['学号'] == info:student_list1.remove(s)print("已成功删除%s信息,其原成绩为:%s" % (s["姓名"], s["成绩"]))def modify_student():"""根据姓名或学号,修改指定学生信息:param ::return:"""info = input("请输入学生学号或姓名:")while info == "":info = input("输入不能为空,请重新输入学生姓名:")# 遍历现有学生列表,查询内容for i in range(0, len(student_list)):if student_list[i]["学号"] == info or student_list[i]["姓名"] == info:name = input("请输入学修改后生姓名:")id_number = input("请输入修改后学生学号:")grade = input("请输入修改后学生成绩:")# 把这3个数据放入新增字典change_student中change_student = {"学号": id_number,"姓名": name,"成绩": grade}# 用student替换student_list中的第i个字典student_list[i] = change_studentprint("修改成功!")returnprint("修改失败,未查询到该学生。")def search_student():"""查找学生成绩:return:"""name = input("请输入学生姓名或学号:")while name == "":name = input("输入不能为空,请重新输入学生姓名:")for i in student_list:if i['姓名'] == name or i['学号'] == name:print("%s号学生%s成绩为:%s" % (i["学号"], i["姓名"], i["成绩"]))returnelse:print("没有找到该生,请重新输入!")def sort_student():"""按成绩将学生升序、降序排序:return:"""sort = input("请输入排序:(1)从大到小(2)从小到大")if sort == "1":student_list.sort(key=lambda item: item['成绩'])print("已将学生按成绩从小到大排列。")elif sort == "2":student_list.sort(key=lambda x: x['成绩'], reverse=True)print("已将学生按成绩从大到小排列。")choice = Nonewhile choice != "0":# 打印菜单menu()# 获取用户输入choice = user_choice()# 用条件分支去判定各种选择if choice == '1':# 显示数据display_records()elif choice == '2':# 添加一个学生数据add_student(student_list)elif choice == '3':# 删除数据delete_student(student_list)elif choice == '4':# 修改数据modify_student()elif choice == '5':# 查找信息search_student()elif choice == '6':# 成绩排序sort_student()elif choice == '0':# 退出程序print('已退出,欢迎下次登录本系统!')else:print('请重新输入')

Python:结合列表和字典,编写一个简单的学生成绩管理系统相关推荐

  1. 【C语言】编写一个简单的学生成绩管理系统

    版本:C99 IDE:CLion 编译器:MinGW #include <stdio.h> #include <stdlib.h> #include <string.h& ...

  2. C语言期末课设:从头开始设计一个简单的学生成绩管理系统

    整个可以运行的源代码在文章最后!!! 首先我们先创建一个结构体,用来抽象一个学生的信息,包含该学生的学号,姓名,成绩(这里我们为了程序简单,只包含了一个成绩.也可以自行添加,其他成绩信息,以及性别,年 ...

  3. C实现的一个简单的学生成绩管理系统

    /*学生成绩管理系统 */ //#include "StdAfx.h" #include "stdio.h"   /*标准输入输出函数库*/ #include ...

  4. JSP设计一个简单的学生成绩管理系统

    数据库 sqlserver Create database student go use student go create table class(bjbh char(9) primary key, ...

  5. 用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...

    一个简单的学生信息管理系统基于python和tkinter 1.需求分析1.大学生信息管理系统使用tkinter接口创建一个窗口.使界面更漂亮.2. 实现与数据库的连接,教师和学生的信息可以保存或读取 ...

  6. 一个简单的学生成绩管理软件(ODBC开发)

    一个简单的学生成绩管理软件(ODBC开发) 下载本文所附源代码 程序运行效果截图: 前面我写过一篇<一个完善的ODBC数据库程序>,大家可能看到过,有鼓励,也有批评,但是所有这一切只有一个 ...

  7. 用计算机怎么做成绩表,利用Excel制作一个简单的学生成绩表.doc

    利用Excel制作一个简单的学生成绩表 教学设计表 学科 信息技术 授课年级 八年级 学校 教师姓名 章节名称初中信息技术八年级上册第7课(第1节)计划学时1学时学习内容分析学习Excel的基础知识, ...

  8. JSP+Mysql 做一个简单的学生成绩查询web系统

    IDEA基于JSP+Mysql 做一个简单的学生成绩查询web系统 目录 一.相关软件的下载和配置环境 Java环境的下载和配置 (1)IDEA的下载和安装 ​ (2)JdK的安装 Tomcat的下载 ...

  9. Java语言写一个简单的学生信息管理系统,通过JDBC连接数据库对学生信息进行增删改查,采用三层思想和DBUtils第三方框架。

    我把源代码和sql文件放GitHub上了,你们可以自行下载:https://github.com/fenglily1/student. 有问题可以留言或私信,我看到就会回. 进阶版加上页面的管理系统在 ...

最新文章

  1. 【跃迁之路】【707天】程序员高效学习方法论探索系列(实验阶段464-2019.1.28)...
  2. 函数、返回-Sql Server常用函数之统计、算数、字符串函数-by小雨
  3. IT从业者都应关注的软件行业的变化
  4. Django中的shell,和数据增删查改
  5. SpringMVC容器和Spring容器
  6. Java 实现常见排序算法
  7. spark mysql 交互_Spark - 直接操作数据源 MySQL
  8. 【Windows 命令行】CMD 在资源管理器中打开当前路径
  9. js webpack 解决跨域问题_详解webpack-dev-server使用http-proxy解决跨域问题
  10. 一分钟搭建Spring Boot
  11. 三菱5uplc伺服电机指令_?2020/9/12三菱PLC触摸屏控制POWSD-伺服电机
  12. 经典查找算法 --- R树
  13. cpu发热测试软件,如何检测CPU的温度?这些软件少不了
  14. OSPF的区域划分与路由计算概述
  15. 一篇文章基础HTML总结
  16. Java多线程不会的看这里,阿里第三版核心技术手册PDF全彩版
  17. 什么是父子流程,与分合流有什么不同
  18. 不容错过的华为5G十二大DEMO
  19. Java Swing编程中对图片的编辑
  20. chrome谷歌浏览器执行js脚本步骤

热门文章

  1. Kindle for PC 无法放大图片的困扰:使用 Windows 自带的放大镜工具
  2. 天猫精灵智能设备对接(7) OAuth2.0
  3. 面向桌面的linux_面向儿童的四个Linux发行版
  4. 2020湖南大学计算机考研分数,湖南大学2020考研分数线_湖南大学2020考研复试分数线 - 考研营...
  5. MCSE中文认证考试原版介绍
  6. 点击按钮背景变灰色,松开恢复原来色
  7. 中国互联网十五年的22个创新模式
  8. 为什么人工智能还远不能取代人类?语言理解能力仍然欠缺
  9. 一级计算机windows考试试题,全国计算机等级考试一级笔试试题Windows(附答案).doc...
  10. 软件测试工程师自我介绍范文_软件测试工程师面试如何做好自我介绍?