news 2026/6/10 14:37:03

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/6/9 21:32:44

探索逆合成孔径雷达稀疏成像:短孔径与压缩感知的奇妙融合

逆合成孔径雷达稀疏成像&#xff0c;短孔径成像&#xff0c;压缩感知在雷达成像领域&#xff0c;逆合成孔径雷达&#xff08;ISAR&#xff09;成像技术一直是研究热点。特别是在一些特殊应用场景下&#xff0c;比如对快速目标成像或者在有限空间内进行成像时&#xff0c;传统的…

作者头像 李华
网站建设 2026/6/9 5:39:50

锁的进化史:从偏向锁到重量级锁的奇幻之旅

文章目录为什么需要这么多锁&#xff1f;锁的“状态机”&#xff1a;四种锁状态偏向锁&#xff1a;专一的锁为什么需要偏向锁&#xff1f;偏向锁的工作原理偏向锁的撤销轻量级锁&#xff1a;温和的竞争为什么需要轻量级锁&#xff1f;轻量级锁的工作原理自旋优化&#xff1a;耐…

作者头像 李华
网站建设 2026/6/10 2:21:03

探索三相PWM整流器双闭环仿真模型

三相PWM整流器双闭环仿真模型 模型中包含&#xff1a;主电路&#xff0c;坐标变换&#xff0c;电压电流双环PI控制器&#xff0c;SVPWM控制 1.功率因数1&#xff0c;THD仅1.2% 2.模型闭环输出电压200VDC 3.输出功率调节输出电阻阻值计算功率 4.三相六开关七段式SVPWM仿真&#…

作者头像 李华
网站建设 2026/6/7 14:38:15

【征文计划】从一个小模板开始,深入Rokid AR生态

当我第一次看到项目里那个简单的 main.xsml 文件时&#xff0c;我并没有意识到它背后隐藏着一个多么庞大的AR生态系统。今天&#xff0c;让我带你一起揭开Rokid AR世界的神秘面纱。 故事要从一副49克的眼镜说起 还记得科幻电影里那些炫酷的AR眼镜吗&#xff1f;现在&#xff…

作者头像 李华
网站建设 2026/6/8 14:18:21

孟加拉语视频Clickbait检测数据集分析报告

孟加拉语视频Clickbait检测数据集分析报告 引言与背景 随着数字媒体的快速发展&#xff0c;互联网上的内容呈现爆炸式增长&#xff0c;其中不乏大量为吸引注意力而设计的误导性内容&#xff0c;即Clickbait。Clickbait通常通过夸张、误导性或悬念性的标题吸引用户点击&#xff…

作者头像 李华
网站建设 2026/6/9 14:05:57

LabVIEW打造超实用数据回放软件:功能大揭秘

labview编写的数据回放软件&#xff0c;支持多曲线回放&#xff0c;支持曲线缩放&#xff0c;支持曲线打标签&#xff0c;支持曲线勾选可见不可见&#xff0c;支持点击曲线加粗显示&#xff0c;支持点击曲线显示当前曲线Y标尺&#xff0c;支持曲线配置&#xff0c;支持红蓝标尺…

作者头像 李华