Python实战:手把手带你撸一个成绩管理系统(附源码+详细注释)

📅 2026/7/11 7:03:35
Python实战:手把手带你撸一个成绩管理系统(附源码+详细注释)
Python实战手把手带你撸一个成绩管理系统附源码详细注释更多Python知识Python基础入门我的主页AOwhisky这里有更多运维系统性知识整理和其他有趣内容欢迎与我一起探讨学习~— Compiled and Authored by Whisky — July 10 th, 2026前言对于刚接触 Python 的朋友来说写一个命令行交互的小工具是很好的练手项目。本文我将以一道经典的“成绩管理系统”题目为例从需求分析、代码实现、到知识点拆解一步步带你完成这个项目。全文附完整源码和详细注释方便新手理解和直接运行。一、题目需求设计一个成绩管理系统功能包括成绩录入输入姓名、语文、数学、英语成绩若姓名重复则不允许录入。成绩查询支持查看全部成绩或根据姓名查询个人成绩。成绩修改根据姓名定位选择要修改的学科并输入新成绩。成绩删除根据姓名删除该学生的全部成绩。退出系统。程序启动时菜单如下1成绩录入 2成绩查询 3成绩修改 4成绩删除 5退出系统初始系统内已存在两条测试数据刘备、张飞。二、完整源码含注释下面给出完整代码关键步骤都有详细注释建议先通读一遍然后结合后面的解析理解。# 系统菜单menu 1成绩录入 2成绩查询 3成绩修改 4成绩删除 5退出系统 # 全部学生信息清单每个元素为一个列表[姓名, 语文, 数学, 英语]info[[刘备,90,88,95],[张飞,70,75,80]]whileTrue:print(menu)select_0int(input(请输入管理选项))# ---------- 1. 成绩录入 ----------ifselect_01:person_info[]# 临时存放一个学生的信息nameinput(请输入姓名)doingTrue# 开关变量标记是否允许录入foriininfo:# 检查是否重名ifi[0]name:doingFalseifdoing:person_info.append(name)person_info.append(int(input(请输入语文成绩)))person_info.append(int(input(请输入数学成绩)))person_info.append(int(input(请输入英语成绩)))info.append(person_info)# 将新学生列表加入总清单print(f{name}成绩录入成功)else:print(姓名已存在请重新录入)print(info)# 临时展示方便调试# ---------- 2. 成绩查询 ----------elifselect_02:print(1查询全部成绩2查询个人成绩)select_2input(请选择功能项)ifselect_21:# 查询全部print(姓名 语文 数学 英语)foriininfo:# 遍历每一个学生forjini:# 输出该学生的每个字段print(j,end )print()# 换行elifselect_22:# 查询个人nameinput(请输入姓名)print(姓名 语文 数学 英语)foriininfo:ifi[0]name:# 找到对应学生forjini:print(j,end )print()break# 姓名唯一找到后跳出循环else:print(选项有误请重新选择)# ---------- 3. 成绩修改 ----------elifselect_03:# 先展示全部成绩便于用户查看print(姓名 语文 数学 英语)foriininfo:forjini:print(j,end )print()nameinput(请输入姓名)print(1语文2数学3英语)indexint(input(请输入修改学科编号))scoreint(input(请输入修改成绩))foriininfo:ifi[0]name:i[index]score# 直接利用索引修改成绩print(成绩修改成功)# ---------- 4. 成绩删除 ----------elifselect_04:print(姓名 语文 数学 英语)foriininfo:forjini:print(j,end )print()nameinput(请输入姓名)foriininfo:ifi[0]name:info.remove(i)# 删除整个子列表print(删除成功)# ---------- 5. 退出系统 ----------elifselect_05:print(退出系统欢迎再次使用)break# 跳出 while 循环程序结束三、核心功能实现解析1. 数据结构info [[刘备, 90, 88, 95], [张飞, 70, 75, 80]]采用嵌套列表存储所有学生信息。外层列表的每个元素都是内层列表内层列表的格式为[姓名, 语文成绩, 数学成绩, 英语成绩]。这种结构简单直观适合初学者。2. 主循环与菜单whileTrue:print(menu)select_0int(input(请输入管理选项))...while True使程序持续运行直到用户选择 5 执行break才退出。用户输入数字后由if-elif分支转发到对应的功能模块。3. 成绩录入——防重名设计doingTrueforiininfo:ifi[0]name:doingFalseifdoing:# 执行录入...先假设可以录入doing True然后遍历已有学生一旦发现姓名相同就把标记置为False。最后根据标记决定是否真正添加。这是一种非常实用的开关变量技巧可以避免在循环中使用break后还需要判断的麻烦。4. 成绩查询——双重循环输出表格foriininfo:forjini:print(j,end )print()外层for遍历每个学生内层for遍历该学生的各项数据。end 让数据之间用空格分隔每个学生打印完后执行一个空print()实现换行形成简单的表格效果。5. 成绩修改——索引的妙用print(1语文2数学3英语)indexint(input(请输入修改学科编号))scoreint(input(请输入修改成绩))foriininfo:ifi[0]name:i[index]score注意这里的index直接充当列表索引。子列表结构为[姓名, 语文, 数学, 英语]索引 1、2、3 恰好对应三门学科。因此直接赋值即可完成修改。6. 成绩删除——列表的 remove 方法foriininfo:ifi[0]name:info.remove(i)remove()会删除列表中第一个匹配的元素。因为姓名唯一所以可以正确删除该学生的全部信息。四、知识点总结知识点应用位置说明嵌套列表info用二维列表组织数据行列关系清晰while 循环与 break主程序框架实现菜单循环直到选择退出for 循环遍历查重、打印成绩等多次用于遍历学生信息和输出if-elif-else菜单路由、子功能选择多分支条件判断input() 与类型转换用户输入int(input(...))将字符串转为整数开关变量doing控制程序流程常用于标记状态列表方法append()、remove()动态添加、删除列表元素五、解题思路与设计思考拿到这个题目后可以按照“自顶向下逐步细化”的思路来写确定总体架构用while循环 菜单项实现交互定义好每个数字对应的功能。设计数据存储选择嵌套列表因为每个学生的信息项是固定的且需要频繁通过姓名来查找。逐个功能击破录入核心是重名检查利用遍历和开关变量。查询全部查询用双重循环个人查询在遍历中加入if判断。修改通过用户给出的学科编号1/2/3直接作为索引。删除找到学生后remove整个子列表。调试与展示每个功能块中临时print(info)或打印结果方便验证逻辑。这种分而治之的方法能让你在写代码时思路清晰不易出错。六、程序优化与扩展方向上述代码实现了基本需求但要成为一个更健壮、更完善的项目还可以从以下方面改进1. 健壮性增强异常处理用户输入选项或成绩时可能输入字母、小数等应使用try...except捕获异常。索引边界检查修改功能中若用户输入 0 或 4会破坏姓名或导致越界需限制在 1~3 之间。未找到提示查询、修改、删除时若姓名不存在应给出提示而不是静默跳过。2. 数据结构升级使用字典{刘备: [90,88,95], 张飞:[70,75,80]}或更精细的{刘备: {语文:90,...}}会让姓名查询更快、代码更直观。面向对象定义Student类将成绩和行为封装在一起代码会更优雅。3. 功能扩展数据持久化引入json或csv模块程序退出时保存数据启动时加载。排序与统计按总分排名、计算平均分、最高分等。模糊搜索允许输入部分姓名进行查询。GUI 界面使用tkinter或PyQt做成窗口程序。4. 代码结构优化函数封装将录入、查询、修改、删除各自封装成函数让主程序简洁明了。常量定义将学科列表SUBJECTS [语文,数学,英语]定义为常量方便维护。七、总结本文通过一个完整的成绩管理系统案例覆盖了 Python 的列表操作、循环、分支、输入输出等基础核心语法。如果你能亲手把代码敲一遍并尝试动手添加一两个扩展功能比如异常处理或文件保存那么你对 Python 的掌握一定会更上一层楼。源码已全部给出可以直接复制运行。如果在学习过程中遇到任何问题欢迎在评论区交流讨论— Compiled and Authored by Whisky — July 10 th, 2026