前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实训题目:学生成绩管理与分析系统

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

作者头像
叶庭云
发布2021-12-01 15:54:43
2.1K0
发布2021-12-01 15:54:43
举报
文章被收录于专栏:Python进阶之路

文章目录

原文链接:https://cloud.tencent.com/developer/article/1908869

一、题目要求

二、Python代码实现

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

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

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

代码语言:javascript
复制
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 = []     # 初始化一个空列表   之后存放每位学生的信息字典

打印菜单选项界面

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

登记学生成绩

代码语言:javascript
复制
# 登记学生成绩
    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

删除学生成绩

代码语言:javascript
复制
# 删除学生成绩
    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

修改学生成绩

代码语言:javascript
复制
# 修改学生成绩
    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

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

分析学生成绩

代码语言:javascript
复制
# 函数功能:对各门成绩进⾏分析
# 得到每个班级的各⻔成绩平均分,每门课程的总平均分,选修不同课程的⼈数等
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)}')
代码语言:javascript
复制
# 分析学生成绩
    elif choice == '5':
        print("=================  分析学生成绩 ==================")
        analysis_score(students_list)

其他处理

代码语言:javascript
复制
# 退出系统
    elif choice == "6":
        print("========================== 退出系统! =============================")
        exit()
    # 输入指令有误  重新输入
    else:
        print("输入指令有误,请重新输入!")
        continue

完整代码如下:

代码语言:javascript
复制
# -*- 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

运行效果符合题目要求

作者:叶庭云

CSDN:https://yetingyun.blog.csdn.net/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、题目要求
  • 二、Python代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档