Python:结合列表和字典,编写一个简单的学生成绩管理系统
本次主要使用新学的列表和字典,结合定义函数等知识点,成功编写了一个简单的学生成绩管理系统。实现了在系统内使用学生的姓名或者学号,即可实现显示、添加、删除、修改、查找(增删改查)、成绩排序(从小到大或从大到小)的功能。
一、实现系统效果
二、代码部分
定义函数:
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:结合列表和字典,编写一个简单的学生成绩管理系统相关推荐
- 【C语言】编写一个简单的学生成绩管理系统
版本:C99 IDE:CLion 编译器:MinGW #include <stdio.h> #include <stdlib.h> #include <string.h& ...
- C语言期末课设:从头开始设计一个简单的学生成绩管理系统
整个可以运行的源代码在文章最后!!! 首先我们先创建一个结构体,用来抽象一个学生的信息,包含该学生的学号,姓名,成绩(这里我们为了程序简单,只包含了一个成绩.也可以自行添加,其他成绩信息,以及性别,年 ...
- C实现的一个简单的学生成绩管理系统
/*学生成绩管理系统 */ //#include "StdAfx.h" #include "stdio.h" /*标准输入输出函数库*/ #include ...
- JSP设计一个简单的学生成绩管理系统
数据库 sqlserver Create database student go use student go create table class(bjbh char(9) primary key, ...
- 用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...
一个简单的学生信息管理系统基于python和tkinter 1.需求分析1.大学生信息管理系统使用tkinter接口创建一个窗口.使界面更漂亮.2. 实现与数据库的连接,教师和学生的信息可以保存或读取 ...
- 一个简单的学生成绩管理软件(ODBC开发)
一个简单的学生成绩管理软件(ODBC开发) 下载本文所附源代码 程序运行效果截图: 前面我写过一篇<一个完善的ODBC数据库程序>,大家可能看到过,有鼓励,也有批评,但是所有这一切只有一个 ...
- 用计算机怎么做成绩表,利用Excel制作一个简单的学生成绩表.doc
利用Excel制作一个简单的学生成绩表 教学设计表 学科 信息技术 授课年级 八年级 学校 教师姓名 章节名称初中信息技术八年级上册第7课(第1节)计划学时1学时学习内容分析学习Excel的基础知识, ...
- JSP+Mysql 做一个简单的学生成绩查询web系统
IDEA基于JSP+Mysql 做一个简单的学生成绩查询web系统 目录 一.相关软件的下载和配置环境 Java环境的下载和配置 (1)IDEA的下载和安装 (2)JdK的安装 Tomcat的下载 ...
- Java语言写一个简单的学生信息管理系统,通过JDBC连接数据库对学生信息进行增删改查,采用三层思想和DBUtils第三方框架。
我把源代码和sql文件放GitHub上了,你们可以自行下载:https://github.com/fenglily1/student. 有问题可以留言或私信,我看到就会回. 进阶版加上页面的管理系统在 ...
最新文章
- 【跃迁之路】【707天】程序员高效学习方法论探索系列(实验阶段464-2019.1.28)...
- 函数、返回-Sql Server常用函数之统计、算数、字符串函数-by小雨
- IT从业者都应关注的软件行业的变化
- Django中的shell,和数据增删查改
- SpringMVC容器和Spring容器
- Java 实现常见排序算法
- spark mysql 交互_Spark - 直接操作数据源 MySQL
- 【Windows 命令行】CMD 在资源管理器中打开当前路径
- js webpack 解决跨域问题_详解webpack-dev-server使用http-proxy解决跨域问题
- 一分钟搭建Spring Boot
- 三菱5uplc伺服电机指令_?2020/9/12三菱PLC触摸屏控制POWSD-伺服电机
- 经典查找算法 --- R树
- cpu发热测试软件,如何检测CPU的温度?这些软件少不了
- OSPF的区域划分与路由计算概述
- 一篇文章基础HTML总结
- Java多线程不会的看这里,阿里第三版核心技术手册PDF全彩版
- 什么是父子流程,与分合流有什么不同
- 不容错过的华为5G十二大DEMO
- Java Swing编程中对图片的编辑
- chrome谷歌浏览器执行js脚本步骤
热门文章
- Kindle for PC 无法放大图片的困扰:使用 Windows 自带的放大镜工具
- 天猫精灵智能设备对接(7) OAuth2.0
- 面向桌面的linux_面向儿童的四个Linux发行版
- 2020湖南大学计算机考研分数,湖南大学2020考研分数线_湖南大学2020考研复试分数线 - 考研营...
- MCSE中文认证考试原版介绍
- 点击按钮背景变灰色,松开恢复原来色
- 中国互联网十五年的22个创新模式
- 为什么人工智能还远不能取代人类?语言理解能力仍然欠缺
- 一级计算机windows考试试题,全国计算机等级考试一级笔试试题Windows(附答案).doc...
- 软件测试工程师自我介绍范文_软件测试工程师面试如何做好自我介绍?