做网站跟客人怎么沟通,网站后台使用说明,蓝牙app制作教程,互联网做什么比较赚钱项目名称#xff1a;简易学生成绩管理系统
功能要求#xff1a;
主菜单#xff1a;循环显示「1-添加成绩 2-查询成绩 3-统计分析 4-退出」#xff1b;添加成绩#xff1a;输入姓名成绩#xff08;校验0-100#xff09;#xff0c;追加写入student_grade.txt#xff…项目名称简易学生成绩管理系统功能要求主菜单循环显示「1-添加成绩 2-查询成绩 3-统计分析 4-退出」添加成绩输入姓名成绩校验0-100追加写入student_grade.txt查询成绩输入姓名读取文件返回对应成绩无则提示统计分析计算所有成绩的平均分、及格人数、优秀人数≥90打印结果退出打印“退出系统”终止程序要求用函数封装各功能处理输入异常非数字、负数等。思路主菜单循环显示while True添加成绩用两个列表通过格式化字符串写文件查询成绩读出文件每行内容在字符串中查找指定名字返回整行内容统计分析读出文件每行内容提取数字。提取数字可以拆分也可以直接提取数字后组合。我的答案#添加成绩到文件defscore_input(name,score):lst[]ifscore0:return0else:lst.append(name)lst.append(score)withopen(student_grade.txt,modea,encodingutf-8)asf:f.write(f姓名{name}分数{score}\n)return已保存#查询成绩deffind_score(name):withopen(student_grade.txt,moder,encodingutf-8)asf:foriinf.readlines():ifnameini.strip():print(i)ifnotnameini.strip():print(姓名不存在)#统计成绩所有成绩的平均分、及格人数、优秀人数≥90defscore_info():good0best0withopen(student_grade.txt,moder,encodingutf-8)asf:lstf.readlines()scores[]good0best0forsinlst:scoreint(.join(cforcinsifc.isdigit()))ifscore60:good1ifscore90:best1scores.append(score)totalsum(scores)avgtotal/len(scores)#平均分returnf平均分{avg:.2f}及格人数{good}人优秀人数{best}人whileTrue:funcinput(「1-添加成绩 2-查询成绩 3-统计分析 4-退出」)iffunc4:breakeliffunc1:nameinput(请输入姓名).strip()scoreint(input(请输入成绩))score_input(name,score)eliffunc2:name2input(请输入姓名).strip()find_score(name2)eliffunc3:print(score_info())错误分析问题类型具体表现影响1. 输入校验缺失成绩未校验 0-100 范围、非数字输入直接报错、空姓名未过滤输入负数 / 101 / 字母会崩溃空姓名写入文件导致统计错误2. 统计逻辑漏洞提取成绩时若字符串无数字如 “姓名张三分数”会报错统计时未处理空行文件有异常行 / 空行时int()转换失败统计功能崩溃3. 查询逻辑错误if not name in i.strip()仅判断最后一行姓名不存在时提示不生效若查询的姓名不在最后一行即使不存在也不会提示 “姓名不存在”4. 冗余代码score_input中lst无实际作用score_info中重复初始化good/best代码冗余增加理解成本5. 格式不统一写入格式为 “姓名XX分数XX”提取成绩依赖数字提取易出错参考答案# 1. 添加成绩优化输入校验格式统一defscore_input(name,score):# 输入校验姓名非空、成绩0-100整数ifnotname.strip():return错误姓名不能为空try:scoreint(score)ifnot(0score100):return错误成绩需在0-100之间exceptValueError:return错误成绩必须是整数# 统一格式姓名 成绩空格分隔便于后续拆分withopen(student_grade.txt,modea,encodingutf-8)asf:f.write(f{name.strip()}{score}\n)return✅ 成绩添加成功# 2. 查询成绩优化遍历所有行明确提示deffind_score(name):ifnotname.strip():return错误姓名不能为空# 标记是否找到foundFalsewithopen(student_grade.txt,moder,encodingutf-8)asf:forlineinf:lineline.strip()ifnotline:# 跳过空行continue# 按空格拆分姓名和成绩兼容统一格式if inline:stu_name,stu_scoreline.split(maxsplit1)ifstu_namename.strip():print(f 找到成绩{stu_name}{stu_score}分)foundTrueifnotfound:print(f❌ 未找到姓名为「{name}」的成绩记录)# 3. 统计分析优化容错提取成绩处理空文件defscore_info():scores[]pass_count0# 及格人数≥60excellent_count0# 优秀人数≥90# 处理文件不存在/空文件try:withopen(student_grade.txt,moder,encodingutf-8)asf:lines[line.strip()forlineinfifline.strip()]# 过滤空行exceptFileNotFoundError:return❌ 暂无成绩记录文件不存在ifnotlines:return❌ 暂无成绩记录文件为空# 遍历提取成绩容错处理forlineinlines:try:# 按空格拆分提取成绩兼容统一格式_,score_strline.split(maxsplit1)scoreint(score_str)scores.append(score)# 统计及格/优秀ifscore60:pass_count1ifscore90:excellent_count1except(ValueError,IndexError):# 跳过格式错误的行print(f⚠️ 忽略无效行{line})continueifnotscores:return❌ 无有效成绩记录# 计算平均分avg_scoresum(scores)/len(scores)return(f 成绩统计结果\nf平均分{avg_score:.2f}分\nf及格人数{pass_count}人\nf优秀人数≥90{excellent_count}人)# 4. 主循环优化交互提示异常处理defmain():print( 学生成绩管理系统 )whileTrue:funcinput(\n请选择操作「1-添加成绩 2-查询成绩 3-统计分析 4-退出」\n).strip()iffunc4:print( 退出系统感谢使用)breakeliffunc1:nameinput(请输入学生姓名)scoreinput(请输入成绩0-100)resultscore_input(name,score)print(result)eliffunc2:name2input(请输入要查询的学生姓名)find_score(name2)eliffunc3:print(score_info())else:print(❌ 输入错误请选择1-4)# 启动系统if__name____main__:main()