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: x1`,`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.退出系统

相关推荐
青 春 记 忆7 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO37 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO9 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白9 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
荷蒲11 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)12 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机12 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor69213 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy14 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源
月光船幽幽14 小时前
真实即粗糙,光滑是伪造
人工智能·python