原文链接:https://cloud.tencent.com/developer/article/1908869
登记、整理和分析各年级学生多门课程的成绩,约定如下:
导入 pandas 和初始化一个空列表
import pandas as pd
# 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("请输入你所要执行的功能:")
登记学生成绩
# 登记学生成绩
if choice == '1':
while 1:
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("请输入序号:")
if pd_01 == "1":
continue
elif pd_01 == '2':
break
else:
print("请输入正确的序号!")
continue
删除学生成绩
# 删除学生成绩
elif choice == '2':
while True:
print("================= 删除学生成绩 ====================")
print("====== 1.按姓名删除学生成绩 ========")
print("====== 2.按学号删除学生成绩 ========")
print("====== 3.返回上一层 =========")
print("==================================================")
pd_02 = input("请输入选择:")
if pd_02 == '1':
name = input("请输入要删除的学生姓名:")
flag = 0
for score_dict in students_list:
if score_dict["姓名"] == name:
flag = 1
students_list.remove(score_dict)
print("删除成功!")
break
if flag == 0:
print("没有找到这个学生的信息,无法删除!")
elif pd_02 == '2':
name = input("请输入要删除的学生学号:")
flag = 0
for score_dict in students_list:
if score_dict["姓名"] == name:
flag = 1
students_list.remove(score_dict)
print("删除成功!")
break
if flag == 0:
print("没有找到这个学生的信息,无法删除!")
elif pd_02 == '3':
break
else:
print("请重新选择!")
continue
修改学生成绩
# 修改学生成绩
elif choice == '3':
while True:
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 = 0
i = 0
for score_dict in students_list:
i += 1
if score_dict["姓名"] == name:
flag = 1
if flag == 0:
print("没有找到这个学生的信息,无法修改!")
continue
info = students_list[i - 1]
pd_03 = input("请输入选择>>>")
if pd_03 == "1":
change_Math = int(input("请输入修改后成绩:"))
info["语文"] = change_Math
print("修改成功!")
break
elif pd_03 == "2":
change_Chinese = int(input("请输入修改后成绩:"))
info["数学"] = change_Chinese
print("修改成功!")
break
elif pd_03 == "3":
change_English = int(input("请输入修改后成绩:"))
info["英语"] = change_English
print("修改成功!")
break
elif pd_03 == "4":
change_English = int(input("请输入修改后成绩:"))
info["物理"] = change_English
print("修改成功!")
break
elif pd_03 == "5":
change_English = int(input("请输入修改后成绩:"))
info["化学"] = change_English
print("修改成功!")
break
elif pd_03 == "6":
change_English = int(input("请输入修改后成绩:"))
info["生物"] = change_English
print("修改成功!")
break
elif pd_03 == "7":
change_English = int(input("请输入修改后成绩:"))
info["政治"] = change_English
print("修改成功!")
break
elif pd_03 == "8":
change_English = int(input("请输入修改后成绩:"))
info["历史"] = change_English
print("修改成功!")
break
elif pd_03 == "9":
change_English = int(input("请输入修改后成绩:"))
info["地理"] = change_English
print("修改成功!")
break
elif pd_03 == "10":
break
else:
print("请重新选择!")
continue
显示学生成绩 并将数据保存到Excel
# 函数功能:显示登记了的成绩信息 并将信息保存到Excel
def show_scores(info_list):
# 生成DataFrame对象
data = pd.DataFrame(info_list)
print(data)
# 将DataFrame数据保存到Excel 当前目录下 不要自动索引
data.to_excel('学生成绩信息.xlsx', index=False)
# 显示学生成绩 并将数据保存到Excel
elif choice == "4":
print("================= 显示学生成绩 ==================")
show_scores(students_list)
分析学生成绩
# 函数功能:对各门成绩进⾏分析
# 得到每个班级的各⻔成绩平均分,每门课程的总平均分,选修不同课程的⼈数等
def analysis_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('------------------------ 选修不同课程的人数统计如下 ---------------------------')
# 选修不同课程的人数
for subject in ['语文', '数学', '英语', '物理', '化学', '生物', '政治', '历史', '地理']:
df3 = data[subject].dropna()
print(f'选修 {subject} 的人数为:{len(df3)}')
# 分析学生成绩
elif choice == '5':
print("================= 分析学生成绩 ==================")
analysis_score(students_list)
其他处理
# 退出系统
elif choice == "6":
print("========================== 退出系统! =============================")
exit()
# 输入指令有误 重新输入
else:
print("输入指令有误,请重新输入!")
continue
完整代码如下:
# -*- coding: UTF-8 -*-
"""
@File :实训题目.py
@Author :叶庭云
@CSDN :https://yetingyun.blog.csdn.net/
"""
import pandas as pd
# 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.每位学生所选课程总数为:6
2.课程有:语文 英语 数学 物理 化学 生物 政治 历史 地理
3.登记信息格式为:学号 姓名 班级 科目。。。
4.登记成绩时 该学生没选这门课 按回车跳过即可 录入空值
"""
students_list = [] # 初始化一个空列表 之后存放每位学生的信息字典
# 函数功能:显示登记了的成绩信息 并将信息保存到Excel
def show_scores(info_list):
# 生成DataFrame对象
data = pd.DataFrame(info_list)
print(data)
# 将DataFrame数据保存到Excel 当前目录下 不要自动索引
data.to_excel('学生成绩信息.xlsx', index=False)
# 函数功能:对各门成绩进⾏分析
# 得到每个班级的各⻔成绩平均分,每门课程的总平均分,选修不同课程的⼈数等
def analysis_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('------------------------ 选修不同课程的人数统计如下 ---------------------------')
# 选修不同课程的人数
for subject in ['语文', '数学', '英语', '物理', '化学', '生物', '政治', '历史', '地理']:
df3 = data[subject].dropna()
print(f'选修 {subject} 的人数为:{len(df3)}')
while True:
# 制作简洁美观的菜单页面
print("================== 欢迎进入学生成绩系统 ==================")
print("======= 1.登记学生成绩 =========")
print("======= 2.删除学生成绩 =========")
print("======= 3.修改学生成绩 =========")
print("======= 4.显示学生成绩 ==========")
print("======= 5.学生成绩分析 ==========")
print("======= 6.退出系统 ==========")
print("===========================================================")
# 输入要执行的功能
choice = input("请输入你所要执行的功能:")
# 登记学生成绩
if choice == '1':
while 1:
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("请输入序号:")
if pd_01 == "1":
continue
elif pd_01 == '2':
break
else:
print("请输入正确的序号!")
continue
# 删除学生成绩
elif choice == '2':
while True:
print("================= 删除学生成绩 ====================")
print("====== 1.按姓名删除学生成绩 ========")
print("====== 2.按学号删除学生成绩 ========")
print("====== 3.返回上一层 =========")
print("==================================================")
pd_02 = input("请输入选择:")
if pd_02 == '1':
name = input("请输入要删除的学生姓名:")
flag = 0
for score_dict in students_list:
if score_dict["姓名"] == name:
flag = 1
students_list.remove(score_dict)
print("删除成功!")
break
if flag == 0:
print("没有找到这个学生的信息,无法删除!")
elif pd_02 == '2':
name = input("请输入要删除的学生学号:")
flag = 0
for score_dict in students_list:
if score_dict["姓名"] == name:
flag = 1
students_list.remove(score_dict)
print("删除成功!")
break
if flag == 0:
print("没有找到这个学生的信息,无法删除!")
elif pd_02 == '3':
break
else:
print("请重新选择!")
continue
# 修改学生成绩
elif choice == '3':
while True:
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 = 0
i = 0
for score_dict in students_list:
i += 1
if score_dict["姓名"] == name:
flag = 1
if flag == 0:
print("没有找到这个学生的信息,无法修改!")
continue
info = students_list[i - 1]
pd_03 = input("请输入选择>>>")
if pd_03 == "1":
change_Math = int(input("请输入修改后成绩:"))
info["语文"] = change_Math
print("修改成功!")
break
elif pd_03 == "2":
change_Chinese = int(input("请输入修改后成绩:"))
info["数学"] = change_Chinese
print("修改成功!")
break
elif pd_03 == "3":
change_English = int(input("请输入修改后成绩:"))
info["英语"] = change_English
print("修改成功!")
break
elif pd_03 == "4":
change_English = int(input("请输入修改后成绩:"))
info["物理"] = change_English
print("修改成功!")
break
elif pd_03 == "5":
change_English = int(input("请输入修改后成绩:"))
info["化学"] = change_English
print("修改成功!")
break
elif pd_03 == "6":
change_English = int(input("请输入修改后成绩:"))
info["生物"] = change_English
print("修改成功!")
break
elif pd_03 == "7":
change_English = int(input("请输入修改后成绩:"))
info["政治"] = change_English
print("修改成功!")
break
elif pd_03 == "8":
change_English = int(input("请输入修改后成绩:"))
info["历史"] = change_English
print("修改成功!")
break
elif pd_03 == "9":
change_English = int(input("请输入修改后成绩:"))
info["地理"] = change_English
print("修改成功!")
break
elif pd_03 == "10":
break
else:
print("请重新选择!")
continue
# 显示学生成绩 并将数据保存到Excel
elif choice == "4":
print("================= 显示学生成绩 ==================")
show_scores(students_list)
# 分析学生成绩
elif choice == '5':
print("================= 分析学生成绩 ==================")
analysis_score(students_list)
# 退出系统
elif choice == "6":
print("========================== 退出系统! =============================")
exit()
# 输入指令有误 重新输入
else:
print("输入指令有误,请重新输入!")
continue
运行效果符合题目要求
作者:叶庭云