Python实训题目:学生成绩管理与分析系统

简介: 登记、整理和分析各年级学生多门课程的成绩

一、题目要求



二、Python代码实现


登记、整理和分析各年级学生多门课程的成绩,约定如下:

  • 每位学生所选课程总数为:6
  • 课程有:语文 英语 数学 物理 化学 生物 政治 历史 地理
  • 登记信息格式为:学号 姓名 班级 科目。。。
  • 登记成绩时,该学生没选这门课,按回车跳过即可,录入空值


导入 pandas 和初始化一个空列表


importpandasaspd# pandas的一些设置   打印DataFrame时格式好看一些pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
pd.set_option('display.width', 300)
students_list= []     # 初始化一个空列表   之后存放每位学生的信息字典


打印菜单选项界面


# 制作简洁美观的菜单页面print("================== 欢迎进入学生成绩系统 ==================")
print("=======            1.登记学生成绩              =========")
print("=======            2.删除学生成绩              =========")
print("=======            3.修改学生成绩              =========")
print("=======            4.显示学生成绩              ==========")
print("=======            5.学生成绩分析              ==========")
print("=======            6.退出系统                  ==========")
print("===========================================================")
# 输入要执行的功能choice=input("请输入你所要执行的功能:")


登记学生成绩


# 登记学生成绩ifchoice=='1':
while1:
print("================== 登记学生成绩 ================")
id_name=input("请输入学生的学号:")
name=input("请输入学生的姓名:")
classes=input("请输入学生所属班级:")
# 以下输入成绩  该学生没选这门课 按回车即可Chinese=input("请输入学生的语文成绩:")
Math=input("请输入学生的数学成绩:")
English=input("请输入学生的英语成绩:")
Physics=input("请输入学生的物理成绩:")
Chemistry=input("请输入学生的化学成绩:")
Biology=input("请输入学生的生物成绩:")
Politics=input("请输入学生的政治成绩:")
History=input("请输入学生的历史成绩:")
Geography=input("请输入学生的地理成绩:")
students_list.append(
                {"学号": id_name, "姓名": name, "班级": classes, "语文": Chinese, "数学": Math, "英语": English,
"物理": Physics, "化学": Chemistry, "生物": Biology, "政治": Politics, "历史": History, "地理":Geography                 })
print("=============================================")
print("========      1.继续添加学生成绩      ==========")
print("========      2.返回上一层            ==========")
print("==============================================")
pd_01=input("请输入序号:")
ifpd_01=="1":
continueelifpd_01=='2':
breakelse:
print("请输入正确的序号!")
continue


删除学生成绩


# 删除学生成绩elifchoice=='2':
whileTrue:
print("================= 删除学生成绩 ====================")
print("======       1.按姓名删除学生成绩     ========")
print("======       2.按学号删除学生成绩     ========")
print("======       3.返回上一层            =========")
print("==================================================")
pd_02=input("请输入选择:")
ifpd_02=='1':
name=input("请输入要删除的学生姓名:")
flag=0forscore_dictinstudents_list:
ifscore_dict["姓名"] ==name:
flag=1students_list.remove(score_dict)
print("删除成功!")
breakifflag==0:
print("没有找到这个学生的信息,无法删除!")
elifpd_02=='2':
name=input("请输入要删除的学生学号:")
flag=0forscore_dictinstudents_list:
ifscore_dict["姓名"] ==name:
flag=1students_list.remove(score_dict)
print("删除成功!")
breakifflag==0:
print("没有找到这个学生的信息,无法删除!")
elifpd_02=='3':
breakelse:
print("请重新选择!")
continue


修改学生成绩


# 修改学生成绩elifchoice=='3':
whileTrue:
print("=================  修改学生成绩 ====================")
print("========            1.修改学生语文成绩      =========")
print("========            2.修改学生数学成绩      =========")
print("========            3.修改学生英语成绩      ==========")
print("========            4.修改学生物理成绩      ==========")
print("========            5.修改学生化学成绩      ==========")
print("========            6.修改学生生物成绩      ==========")
print("========            7.修改学生政治成绩      ==========")
print("========            8.修改学生历史成绩      ==========")
print("========            9.修改学生地理成绩      ==========")
print("========            10.返回上一层            ==========")
print("===================================================")
name=input("请输入要修改成绩的学生的姓名:")
flag=0i=0forscore_dictinstudents_list:
i+=1ifscore_dict["姓名"] ==name:
flag=1ifflag==0:
print("没有找到这个学生的信息,无法修改!")
continueinfo=students_list[i-1]
pd_03=input("请输入选择>>>")
ifpd_03=="1":
change_Math=int(input("请输入修改后成绩:"))
info["语文"] =change_Mathprint("修改成功!")
breakelifpd_03=="2":
change_Chinese=int(input("请输入修改后成绩:"))
info["数学"] =change_Chineseprint("修改成功!")
breakelifpd_03=="3":
change_English=int(input("请输入修改后成绩:"))
info["英语"] =change_Englishprint("修改成功!")
breakelifpd_03=="4":
change_English=int(input("请输入修改后成绩:"))
info["物理"] =change_Englishprint("修改成功!")
breakelifpd_03=="5":
change_English=int(input("请输入修改后成绩:"))
info["化学"] =change_Englishprint("修改成功!")
breakelifpd_03=="6":
change_English=int(input("请输入修改后成绩:"))
info["生物"] =change_Englishprint("修改成功!")
breakelifpd_03=="7":
change_English=int(input("请输入修改后成绩:"))
info["政治"] =change_Englishprint("修改成功!")
breakelifpd_03=="8":
change_English=int(input("请输入修改后成绩:"))
info["历史"] =change_Englishprint("修改成功!")
breakelifpd_03=="9":
change_English=int(input("请输入修改后成绩:"))
info["地理"] =change_Englishprint("修改成功!")
breakelifpd_03=="10":
breakelse:
print("请重新选择!")
continue


显示学生成绩 并将数据保存到Excel


# 函数功能:显示登记了的成绩信息  并将信息保存到Exceldefshow_scores(info_list):
# 生成DataFrame对象data=pd.DataFrame(info_list)
print(data)
# 将DataFrame数据保存到Excel 当前目录下  不要自动索引data.to_excel('学生成绩信息.xlsx', index=False)
# 显示学生成绩 并将数据保存到Excelelifchoice=="4":
print("=================  显示学生成绩 ==================")
show_scores(students_list)


分析学生成绩


# 函数功能:对各门成绩进⾏分析# 得到每个班级的各⻔成绩平均分,每门课程的总平均分,选修不同课程的⼈数等defanalysis_score(info_list):
# 生成DataFrame对象data=pd.DataFrame(info_list)
# 该函数将被应用于整个DataFrame,可以转换为数字类型的列将被转换# 而不能(例如,它们包含非数字字符串或日期)的列将被单独保留data=data.apply(pd.to_numeric, errors='ignore')
data['学号'] =data['学号'].apply(str)    # 学号的数据类型还是变为字符串# 每个班级各门成绩平均分print('--------------------- 每个班级各门成绩平均分如下 ---------------------------')
df1=data.groupby('班级').mean()
print(df1)
print('------------------------------------')
# 每门课程总的总平均分print('------------------------- 每门课程的总平均分如下 ----------------------------')
df2=data.iloc[::, 3:].mean()
print(df2)
print('------------------------------------')
print('------------------------ 选修不同课程的人数统计如下 ---------------------------')
# 选修不同课程的人数forsubjectin ['语文', '数学', '英语', '物理', '化学', '生物', '政治', '历史', '地理']:
df3=data[subject].dropna()
print(f'选修 {subject} 的人数为:{len(df3)}')
# 分析学生成绩elifchoice=='5':
print("=================  分析学生成绩 ==================")
analysis_score(students_list)


其他处理


# 退出系统elifchoice=="6":
print("========================== 退出系统! =============================")
exit()
# 输入指令有误  重新输入else:
print("输入指令有误,请重新输入!")
continue


完整代码如下:


# -*- coding: UTF-8 -*-"""@File    :实训题目.py@Author  :叶庭云@CSDN    :https://yetingyun.blog.csdn.net/"""importpandasaspd# pandas的一些设置   打印DataFrame时格式好看一些pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
pd.set_option('display.width', 300)
"""登记、整理和分析各年级学生多门课程的成绩约定如下:1.每位学生所选课程总数为:62.课程有:语文 英语 数学 物理 化学 生物 政治 历史 地理3.登记信息格式为:学号 姓名 班级  科目。。。4.登记成绩时  该学生没选这门课 按回车跳过即可  录入空值"""students_list= []     # 初始化一个空列表   之后存放每位学生的信息字典# 函数功能:显示登记了的成绩信息  并将信息保存到Exceldefshow_scores(info_list):
# 生成DataFrame对象data=pd.DataFrame(info_list)
print(data)
# 将DataFrame数据保存到Excel 当前目录下  不要自动索引data.to_excel('学生成绩信息.xlsx', index=False)
# 函数功能:对各门成绩进⾏分析# 得到每个班级的各⻔成绩平均分,每门课程的总平均分,选修不同课程的⼈数等defanalysis_score(info_list):
# 生成DataFrame对象data=pd.DataFrame(info_list)
# 该函数将被应用于整个DataFrame,可以转换为数字类型的列将被转换# 而不能(例如,它们包含非数字字符串或日期)的列将被单独保留data=data.apply(pd.to_numeric, errors='ignore')
data['学号'] =data['学号'].apply(str)    # 学号的数据类型还是变为字符串# 每个班级各门成绩平均分print('--------------------- 每个班级各门成绩平均分如下 ---------------------------')
df1=data.groupby('班级').mean()
print(df1)
print('------------------------------------')
# 每门课程总的总平均分print('------------------------- 每门课程的总平均分如下 ----------------------------')
df2=data.iloc[::, 3:].mean()
print(df2)
print('------------------------------------')
print('------------------------ 选修不同课程的人数统计如下 ---------------------------')
# 选修不同课程的人数forsubjectin ['语文', '数学', '英语', '物理', '化学', '生物', '政治', '历史', '地理']:
df3=data[subject].dropna()
print(f'选修 {subject} 的人数为:{len(df3)}')
whileTrue:
# 制作简洁美观的菜单页面print("================== 欢迎进入学生成绩系统 ==================")
print("=======            1.登记学生成绩              =========")
print("=======            2.删除学生成绩              =========")
print("=======            3.修改学生成绩              =========")
print("=======            4.显示学生成绩              ==========")
print("=======            5.学生成绩分析              ==========")
print("=======            6.退出系统                  ==========")
print("===========================================================")
# 输入要执行的功能choice=input("请输入你所要执行的功能:")
# 登记学生成绩ifchoice=='1':
while1:
print("================== 登记学生成绩 ================")
id_name=input("请输入学生的学号:")
name=input("请输入学生的姓名:")
classes=input("请输入学生所属班级:")
# 以下输入成绩  该学生没选这门课 按回车即可Chinese=input("请输入学生的语文成绩:")
Math=input("请输入学生的数学成绩:")
English=input("请输入学生的英语成绩:")
Physics=input("请输入学生的物理成绩:")
Chemistry=input("请输入学生的化学成绩:")
Biology=input("请输入学生的生物成绩:")
Politics=input("请输入学生的政治成绩:")
History=input("请输入学生的历史成绩:")
Geography=input("请输入学生的地理成绩:")
students_list.append(
                {"学号": id_name, "姓名": name, "班级": classes, "语文": Chinese, "数学": Math, "英语": English,
"物理": Physics, "化学": Chemistry, "生物": Biology, "政治": Politics, "历史": History, "地理":Geography                 })
print("=============================================")
print("========      1.继续添加学生成绩      ==========")
print("========      2.返回上一层            ==========")
print("==============================================")
pd_01=input("请输入序号:")
ifpd_01=="1":
continueelifpd_01=='2':
breakelse:
print("请输入正确的序号!")
continue# 删除学生成绩elifchoice=='2':
whileTrue:
print("================= 删除学生成绩 ====================")
print("======       1.按姓名删除学生成绩     ========")
print("======       2.按学号删除学生成绩     ========")
print("======       3.返回上一层            =========")
print("==================================================")
pd_02=input("请输入选择:")
ifpd_02=='1':
name=input("请输入要删除的学生姓名:")
flag=0forscore_dictinstudents_list:
ifscore_dict["姓名"] ==name:
flag=1students_list.remove(score_dict)
print("删除成功!")
breakifflag==0:
print("没有找到这个学生的信息,无法删除!")
elifpd_02=='2':
name=input("请输入要删除的学生学号:")
flag=0forscore_dictinstudents_list:
ifscore_dict["姓名"] ==name:
flag=1students_list.remove(score_dict)
print("删除成功!")
breakifflag==0:
print("没有找到这个学生的信息,无法删除!")
elifpd_02=='3':
breakelse:
print("请重新选择!")
continue# 修改学生成绩elifchoice=='3':
whileTrue:
print("=================  修改学生成绩 ====================")
print("========            1.修改学生语文成绩      =========")
print("========            2.修改学生数学成绩      =========")
print("========            3.修改学生英语成绩      ==========")
print("========            4.修改学生物理成绩      ==========")
print("========            5.修改学生化学成绩      ==========")
print("========            6.修改学生生物成绩      ==========")
print("========            7.修改学生政治成绩      ==========")
print("========            8.修改学生历史成绩      ==========")
print("========            9.修改学生地理成绩      ==========")
print("========            10.返回上一层            ==========")
print("===================================================")
name=input("请输入要修改成绩的学生的姓名:")
flag=0i=0forscore_dictinstudents_list:
i+=1ifscore_dict["姓名"] ==name:
flag=1ifflag==0:
print("没有找到这个学生的信息,无法修改!")
continueinfo=students_list[i-1]
pd_03=input("请输入选择>>>")
ifpd_03=="1":
change_Math=int(input("请输入修改后成绩:"))
info["语文"] =change_Mathprint("修改成功!")
breakelifpd_03=="2":
change_Chinese=int(input("请输入修改后成绩:"))
info["数学"] =change_Chineseprint("修改成功!")
breakelifpd_03=="3":
change_English=int(input("请输入修改后成绩:"))
info["英语"] =change_Englishprint("修改成功!")
breakelifpd_03=="4":
change_English=int(input("请输入修改后成绩:"))
info["物理"] =change_Englishprint("修改成功!")
breakelifpd_03=="5":
change_English=int(input("请输入修改后成绩:"))
info["化学"] =change_Englishprint("修改成功!")
breakelifpd_03=="6":
change_English=int(input("请输入修改后成绩:"))
info["生物"] =change_Englishprint("修改成功!")
breakelifpd_03=="7":
change_English=int(input("请输入修改后成绩:"))
info["政治"] =change_Englishprint("修改成功!")
breakelifpd_03=="8":
change_English=int(input("请输入修改后成绩:"))
info["历史"] =change_Englishprint("修改成功!")
breakelifpd_03=="9":
change_English=int(input("请输入修改后成绩:"))
info["地理"] =change_Englishprint("修改成功!")
breakelifpd_03=="10":
breakelse:
print("请重新选择!")
continue# 显示学生成绩 并将数据保存到Excelelifchoice=="4":
print("=================  显示学生成绩 ==================")
show_scores(students_list)
# 分析学生成绩elifchoice=='5':
print("=================  分析学生成绩 ==================")
analysis_score(students_list)
# 退出系统elifchoice=="6":
print("========================== 退出系统! =============================")
exit()
# 输入指令有误  重新输入else:
print("输入指令有误,请重新输入!")
continue

运行效果符合题目要求

目录
相关文章
|
4月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
4月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
5月前
|
缓存 监控 算法
唯品会item_search - 按关键字搜索 VIP 商品接口深度分析及 Python 实现
唯品会item_search接口支持通过关键词、分类、价格等条件检索商品,广泛应用于电商数据分析、竞品监控与市场调研。结合Python可实现搜索、分析、可视化及数据导出,助力精准决策。
|
4月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。
|
4月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。

推荐镜像

更多