一、题目要求
二、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
运行效果符合题目要求