Python 综合大作业

大作业:班级成绩数据管理系统

**背景**:假设你是数学老师,需要管理班级学生的多门数学相关成绩(如单元测验、期中、期末成绩,均为整数)。本作业要求实现成绩的录入、查询、修改、删除及统计分析

一、核心数据结构

用**字典列表**存储学生信息,所有数据均为整数(无字符串),初始预设3-5条数据,示例:

```python

学生数据格式:id为唯一整数标识,scores为整数列表(存储多门成绩)

students = [

{"id": 1, "scores": [85, 90, 88]}, # id=1的学生,3门成绩分别为85、90、88

{"id": 2, "scores": [79, 82, 91]},

{"id": 3, "scores": [95, 89, 92]}

]

```

二、必做功能需求(共7项)

  1. 菜单交互框架

程序启动后,通过`print`显示固定菜单(菜单文字为字符串常量,不涉及字符串方法),用户输入1-6的整数选择功能,执行后返回菜单(选6则退出)。菜单格式:

```

班级成绩管理系统

  1. 查看所有学生成绩

  2. 添加新学生

  3. 修改学生成绩

  4. 删除学生

  5. 成绩统计分析

  6. 退出系统

请输入功能编号(1-6):

```

  1. 查看所有学生成绩

遍历`students`列表,按固定格式打印每个学生的id和成绩(用`print`直接输出整数和列表,不拼接字符串)。示例输出:

```

所有学生成绩:

id: 1 成绩: [85, 90, 88]

id: 2 成绩: [79, 82, 91]

id: 3 成绩: [95, 89, 92]

```

  1. 添加新学生

步骤(全程用整数输入,不处理字符串):

  1. 提示用户输入"新学生id(整数)";

  2. 遍历`students`列表,检查该id是否已存在(对比字典的`"id"`键值):

  • 若存在:打印"id已存在,添加失败";

  • 若不存在:提示用户输入"成绩数量(整数,至少1)",再逐个输入对应数量的成绩(每个成绩为整数),组成`scores`列表,最后创建新字典`{"id": 输入id, "scores": 成绩列表}`并添加到`students`,打印"添加成功"。

  1. 修改学生成绩

步骤:

  1. 提示用户输入"要修改的学生id(整数)";

  2. 遍历`students`列表,检查id是否存在:

  • 若不存在:打印"未找到该学生,修改失败";

  • 若存在:提示用户输入"新的成绩数量(整数)",再逐个输入新成绩(整数),替换该学生字典的`"scores"`值,打印"修改成功"。

  1. 删除学生

步骤:

  1. 提示用户输入"要删除的学生id(整数)";

  2. 遍历`students`列表,检查id是否存在:

  • 若不存在:打印"未找到该学生,删除失败";

  • 若存在:用`remove()`方法从`students`中删除该学生字典,打印"删除成功"。

  1. 成绩统计分析

计算并打印4项结果(均为数值运算,无字符串处理):

  1. **班级总人数**:直接用`len(students)`获取;

  2. **平均总分**:

  • 先遍历每个学生,计算其`scores`列表的总和(`sum(学生["scores"])`),存到"总分列表";

  • 用"总分列表的总和 ÷ 总人数",结果保留1位小数(用`round()`函数);

  1. **最高分学生**:
  • 从"总分列表"中找最大值(`max(总分列表)`);

  • 遍历学生列表,找出所有总分等于该最大值的学生,打印其id和总分;

  1. **按总分排名**:
  • 创建"(id, 总分)"元组列表(如`[(1, 263), (2, 252), ...]`);

  • 用`sorted()`按"总分从高到低"排序(`key=lambda x: x[1]`,`reverse=True`);

  • 按"排名X:id=X,总分=X"格式打印(用`print`直接输出整数)。

示例输出:

```

成绩统计分析:

  1. 班级总人数:3

  2. 平均总分:261.7

  3. 最高分学生(总分276):

id=3,总分=276

  1. 按总分排名:

排名1:id=3,总分=276

排名2:id=1,总分=263

排名3:id=2,总分=252

```

  1. 退出系统

用户输入6时,打印"系统退出,再见!",用`break`终止程序。

三、进阶功能(选做,加分项)

  1. **按科目查平均分**:提示用户输入"科目序号(从1开始,如1表示第一门成绩)",遍历所有学生的`scores`列表,提取对应序号的成绩,计算平均分(保留1位小数);

  2. **成绩去重**:在"添加"和"修改"功能中,对输入的成绩列表去重(如输入`90, 85, 90`,处理后为`[90, 85]`),用集合实现(`list(set(成绩列表))`,再按输入顺序调整);

  3. **批量添加学生**:提示用户先输入"要添加的学生数量(整数n)",再依次输入n个学生的id和成绩(每个学生先输id,再输成绩数量和逐个成绩),批量添加(id存在则跳过)。

四、提交要求

  1. **代码注释**:关键逻辑(如查id、统计总分、排序)需加注释,说明操作目的;

  2. **无字符串方法**:代码中不得出现任何字符串对象的方法(如`split()`、`len("abc")`、`"a" + "b"`等,允许用`print`输出字符串常量);

  3. **知识点说明**:在代码末尾用注释列出用到的知识点(如"列表的append/remove、字典的键值访问、for/while循环、if条件判断、sum/len/max/sorted函数、算术运算符、比较运算符"等)。

设计思路提示

  1. **输入处理**:所有用户输入均用`int(input())`直接转为整数,避免对输入的字符串做任何处理(如用户输入"3",直接用`int(input())`得到3);

  2. **功能拆分**:将每个功能写成函数(如`show_students()`、`add_student()`),菜单选择时调用,减少重复代码;

  3. **查id复用**:写一个辅助函数`get_student(target_id)`,遍历`students`返回对应学生字典(或`None`),供添加、修改、删除功能复用;

  4. **排名实现**:用`sorted()`对"id-总分"元组列表排序,通过`enumerate()`获取排名序号(从1开始)。

python 复制代码
students=[
    {'id':1,'scores':[85,90,88]},
    {'id':2,'scores':[79,82,90]},
    {'id':3,'scores':[95,90,88]}
]
while True:
    print('''===班级成绩管理系统===
 1.查看所有学生成绩
 2.添加新学生
 3.修改学生成绩
 4.删除学生
 5.成绩统计分析
 6.退出系统
 请输入编号(1-6):''')
    choice=int(input())
    if choice==1:
        print('所有学生成绩:')
        for student in students:
            print('id:',student['id'],'成绩:',student['scores'])
    elif choice==2:
        new_id=int(input('请输入新学生ID:'))
        is_exits=False
        for student in students:
            if student['id']==new_id:
                is_exits=True
                break
        if is_exits:
            print('id存在,添加失败')
        else:
         num=int(input('请输入成绩:'))
         scores=[]
        for i in range(num):
            score=int(input(f'请输入第{i+1}个成绩'))
            scores.append(score)
        students.append({'id':new_id,'scores':scores})
        print('添加成功')
    elif choice==3:
        target_id=int(input('请输入要修改学生的id:'))
        found_student=None
        for student in students:
            if student['id']==target_id:
               found_student=student
               break
        if found_student is None:
            print('未找到该学生,修改失败')
        else:
            num=int(input('请输入新的成绩:'))
            new_scores=[]
            for i in range(num):
                score=int(input(f'请输入第{i+1}个新成绩:'))
                new_scores.append(score)
            found_student['scores']=new_scores
            print('修改成功')
    elif choice==4:
        target_id=int(input('请输入要删除学生的id:'))
        found_student=None
        for student in students:
            if student['id']==target_id:
                found_student=student
                break
        if found_student is None:
            print('未找到该学生,删除失败')
        else:
            students.remove(found_student)
            print('删除成功')
    elif choice==5:
        if len(students)==0:
            print('暂无学生数据,无法统计')
        else:
            total_num=len(students)
            print('成绩统计分析')
            print('1.班级总人数:',total_num)

            total_scores=[]
            for student in  students:
                total=sum(student['scores'])
                total_scores.append(total)
            avg_total=sum(total_scores)/total_num
            print('2.平均分:',round(avg_total,1))

            max_total=max(total_scores)
            print(f'3.最高分学生(总分{max_total}):')
            for i in range(total_num):
                if total_scores[i]==max_total:
                    print('id=',students[i]['id'],',总分',max_total,sep='')

            id_total=[]
            for i in range(total_num):
                id_total.append((students[i]['id'],total_scores[i]))
            sorted_id_total=sorted(id_total,key=lambda x:x[1],reverse=True)
            print('4.按总分排名:')
            for rank in range(len(sorted_id_total)):
                sid=sorted_id_total[rank][0]
                tscore = sorted_id_total[rank][1]
                print(f'排名{rank + 1}:id={sid},总分={tscore}')
    elif choice==6:
        print('系统退出')
        break
    else:
        print('输入错误,请输入(1-6)之间的数')

结果:

主界面

1.查看所有成绩

2.添加新学生

3.修改学生成绩

4.删除学生

5.成绩统计分析

6.退出系统

相关推荐
Dxy12393102163 小时前
Python自动连接已保存WiFi
开发语言·python
依旧很淡定3 小时前
Selenium(Python)创建Chrome浏览器实例
chrome·python·selenium
中文Python3 小时前
小白中文Python-db_桌面小黄鸭宠物
数据库·python·pygame·宠物·中文python·小白学python
MoRanzhi12035 小时前
12. Pandas 数据合并与拼接(concat 与 merge)
数据库·人工智能·python·数学建模·矩阵·数据分析·pandas
qianmo20215 小时前
基于gitpage实现网页托管的方式方法
python
松果集5 小时前
【1】数据类型1
python
蔗理苦5 小时前
2025-10-07 Python不基础 19——私有对象
开发语言·python·私有对象
可触的未来,发芽的智生6 小时前
触摸未来2025.10.04:当神经网络拥有了内在记忆……
人工智能·python·神经网络·算法·架构
蔗理苦7 小时前
2025-10-07 Python不基础 20——全局变量与自由变量
开发语言·python