news 2026/3/19 9:09:46

python练习项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python练习项目

项目名称:简易学生成绩管理系统

功能要求:
  1. 主菜单:循环显示「1-添加成绩 2-查询成绩 3-统计分析 4-退出」;
  2. 添加成绩:输入姓名+成绩(校验0-100),追加写入student_grade.txt
  3. 查询成绩:输入姓名,读取文件返回对应成绩(无则提示);
  4. 统计分析:计算所有成绩的平均分、及格人数、优秀人数(≥90),打印结果;
  5. 退出:打印“退出系统”,终止程序;
  6. 要求:用函数封装各功能,处理输入异常(非数字、负数等)。

思路:
主菜单循环显示:while True
添加成绩:用两个列表,通过格式化字符串写文件
查询成绩:读出文件每行内容,在字符串中查找指定名字,返回整行内容
统计分析:读出文件每行内容,提取数字。提取数字可以拆分,也可以直接提取数字后组合。

我的答案:

#添加成绩到文件defscore_input(name,score):lst=[]ifscore==0:return0else:lst.append(name)lst.append(score)withopen("student_grade.txt",mode="a",encoding="utf-8")asf:f.write(f"姓名:{name},分数:{score}\n")return"已保存"#查询成绩deffind_score(name):withopen("student_grade.txt",mode="r",encoding="utf-8")asf:foriinf.readlines():ifnameini.strip():print(i)ifnotnameini.strip():print("姓名不存在")#统计成绩所有成绩的平均分、及格人数、优秀人数(≥90)defscore_info():good=0best=0withopen("student_grade.txt",mode="r",encoding="utf-8")asf:lst=f.readlines()scores=[]good=0best=0forsinlst:score=int("".join(cforcinsifc.isdigit()))ifscore>=60:good+=1ifscore>=90:best+=1scores.append(score)total=sum(scores)avg=total/len(scores)#平均分returnf"平均分:{avg:.2f},及格人数:{good}人,优秀人数:{best}人"whileTrue:func=input("「1-添加成绩 2-查询成绩 3-统计分析 4-退出」")iffunc=="4":breakeliffunc=="1":name=input("请输入姓名").strip()score=int(input("请输入成绩"))score_input(name,score)eliffunc=="2":name2=input("请输入姓名").strip()find_score(name2)eliffunc=="3":print(score_info())

错误分析:

问题类型具体表现影响
1. 输入校验缺失成绩未校验 0-100 范围、非数字输入直接报错、空姓名未过滤输入负数 / 101 / 字母会崩溃,空姓名写入文件导致统计错误
2. 统计逻辑漏洞提取成绩时若字符串无数字(如 “姓名:张三,分数:”)会报错;统计时未处理空行文件有异常行 / 空行时,int()转换失败,统计功能崩溃
3. 查询逻辑错误if not name in i.strip()仅判断最后一行,姓名不存在时提示不生效若查询的姓名不在最后一行,即使不存在也不会提示 “姓名不存在”
4. 冗余代码score_inputlst无实际作用;score_info中重复初始化good/best代码冗余,增加理解成本
5. 格式不统一写入格式为 “姓名:XX,分数:XX”,提取成绩依赖数字提取,易出错

参考答案:

# 1. 添加成绩(优化:输入校验+格式统一)defscore_input(name,score):# 输入校验:姓名非空、成绩0-100整数ifnotname.strip():return"错误:姓名不能为空!"try:score=int(score)ifnot(0<=score<=100):return"错误:成绩需在0-100之间!"exceptValueError:return"错误:成绩必须是整数!"# 统一格式:姓名 成绩(空格分隔,便于后续拆分)withopen("student_grade.txt",mode="a",encoding="utf-8")asf:f.write(f"{name.strip()}{score}\n")return"✅ 成绩添加成功!"# 2. 查询成绩(优化:遍历所有行+明确提示)deffind_score(name):ifnotname.strip():return"错误:姓名不能为空!"# 标记是否找到found=Falsewithopen("student_grade.txt",mode="r",encoding="utf-8")asf:forlineinf:line=line.strip()ifnotline:# 跳过空行continue# 按空格拆分姓名和成绩(兼容统一格式)if" "inline:stu_name,stu_score=line.split(maxsplit=1)ifstu_name==name.strip():print(f"🔍 找到成绩:{stu_name}{stu_score}分")found=Trueifnotfound:print(f"❌ 未找到姓名为「{name}」的成绩记录")# 3. 统计分析(优化:容错提取成绩+处理空文件)defscore_info():scores=[]pass_count=0# 及格人数(≥60)excellent_count=0# 优秀人数(≥90)# 处理文件不存在/空文件try:withopen("student_grade.txt",mode="r",encoding="utf-8")asf:lines=[line.strip()forlineinfifline.strip()]# 过滤空行exceptFileNotFoundError:return"❌ 暂无成绩记录(文件不存在)"ifnotlines:return"❌ 暂无成绩记录(文件为空)"# 遍历提取成绩(容错处理)forlineinlines:try:# 按空格拆分,提取成绩(兼容统一格式)_,score_str=line.split(maxsplit=1)score=int(score_str)scores.append(score)# 统计及格/优秀ifscore>=60:pass_count+=1ifscore>=90:excellent_count+=1except(ValueError,IndexError):# 跳过格式错误的行print(f"⚠️ 忽略无效行:{line}")continueifnotscores:return"❌ 无有效成绩记录"# 计算平均分avg_score=sum(scores)/len(scores)return(f"📊 成绩统计结果:\n"f"平均分:{avg_score:.2f}分\n"f"及格人数:{pass_count}人\n"f"优秀人数(≥90):{excellent_count}人")# 4. 主循环(优化:交互提示+异常处理)defmain():print("===== 学生成绩管理系统 =====")whileTrue:func=input("\n请选择操作:「1-添加成绩 2-查询成绩 3-统计分析 4-退出」\n").strip()iffunc=="4":print("👋 退出系统,感谢使用!")breakeliffunc=="1":name=input("请输入学生姓名:")score=input("请输入成绩(0-100):")result=score_input(name,score)print(result)eliffunc=="2":name2=input("请输入要查询的学生姓名:")find_score(name2)eliffunc=="3":print(score_info())else:print("❌ 输入错误,请选择1-4!")# 启动系统if__name__=="__main__":main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/15 12:05:20

电动汽车负荷随机性下的蓄电池容量优化配置:MATLAB实现与探索

MATLAB代码&#xff1a;考虑电动汽车负荷随机性的蓄电池容量优化配置 关键词&#xff1a;蓄电池容量优化配置 储能优化配置 中长期配置 并网波动性 参考文档&#xff1a;《不确定环境下并网型光储微电网的容量规划》《考虑电动汽车有序充电的光储充电站储能容量优化策略_李景…

作者头像 李华
网站建设 2026/3/17 4:06:53

让YOLO飞起来:从CPU到GPU的配置指南

最近在配置YOLO&#xff08;You Only Look Once&#xff09;进行物体检测和图像分割任务时&#xff0c;发现默认安装的情况下&#xff0c;YOLO使用的是CPU进行计算。这对于需要处理大量图像或实时检测的任务来说&#xff0c;效率明显不足。本文将详细介绍如何将YOLO从CPU模式切…

作者头像 李华
网站建设 2026/3/15 20:25:30

磁链观测器:从仿真到闭环代码实现

磁链观测器(仿真&#xff0b;闭环代码参考文档&#xff09; 1.仿真采用simulink搭建&#xff0c;2018b版本 2.代码采用Keil软件编译&#xff0c;思路参考vesc中使用的方法&#xff0c;自己编写的代码能够实现0速闭环启动&#xff0c;并且标注有大量注释&#xff0c;方便学习。 …

作者头像 李华
网站建设 2026/3/15 11:49:48

单机版RS485集中抄表软件:探索电表数据采集的奥秘

单机版RS485集中抄表软件&#xff0c;集中抄读645-2007协议的智能电表&#xff0c;645-1997的没有测试过&#xff0c;不清楚能不能抄&#xff0c;本地485有线集中抄表&#xff0c;配合485转网络可实现远程抄表在电力数据采集领域&#xff0c;单机版RS485集中抄表软件发挥着至关…

作者头像 李华
网站建设 2026/3/14 14:41:45

探索EKF算法在机器人轨迹定位中的神奇魅力

EKF算法做机器人轨迹定位/跟踪的程序&#xff0c;与里程计算法进行对比&#xff0c;结果显示EKF算法定位/跟踪精度更高。 纯里程计的误差为 error_Odom_average 1.0283 Ekf定位的误差为 error_Ekf_average 0.071629在机器人领域&#xff0c;轨迹定位和跟踪可是至关重要的任务…

作者头像 李华
网站建设 2026/3/15 10:04:51

echarts4升级为echarts5的常见问题

[ECharts] DEPRECATED: textStyle hierarchy in label has been removed since 4.0. All textStyle properties are configured in label directly now.[ECharts]已弃用&#xff1a;标签中的textStyle层次结构自4.0以来已被删除。现在&#xff0c;所有textStyle属性都直接在标签…

作者头像 李华