结合之前学习的python功能实现学生成绩的分析

对话实录

小白:(发愁)我要管理学生成绩数据,不仅要生成数据存到文件,后续还要读取分析,感觉一团糟,怎么破?

"""
综合练习:学生成绩管理系统
功能需求:
1. 生成随机学生成绩数据并保存到文件
2. 从文件读取数据并进行统计分析
3. 包含异常处理机制
4. 使用函数模块化代码
5. 包含上下文管理器使用
"""

专家:(递上代码秘籍)利用我们之前文章学习的random函数、CSV模块,上下文管理器,结合异常处理机制,轻松搭建学生成绩管理系统!

系统功能拆解与实现

  1. 生成随机学生成绩数据并保存到文件

    :生成 30 条包含学号与三科成绩的随机数据,并存储到 CSV 文件。

  2. 从文件读取数据并进行统计分析

    :从 CSV 文件读取数据,计算各科平均分,找出总分最高的学生。

  3. 包含异常处理机制

    :处理文件操作和数据格式错误引发的异常。

  4. 使用函数模块化代码

    :通过不同函数,实现数据生成、文件读写、数据分析等功能,提升代码的可读性与维护性。

  5. 包含上下文管理器使用

    :运用上下文管理器,确保文件的正确打开与关闭。

1. 数据生成

Python 借助random模块,能轻松生成随机学生成绩数据。

import random
# 生成随机学生数据函数
def generate_student_data(num_students=30):
    """生成包含学号和三科成绩的随机数据"""
    return [
        (f"2023{str(i).zfill(4)}",
         random.randint(60, 100),
         random.randint(60, 100),
         random.randint(60, 100))
        for i in range(1, num_students + 1)
    ]

生成原理:

随机分数:利用random.randint(60, 100),生成 60 到 100 之间的随机整数作为学生成绩。

学号生成:借助str().zfill(4),保证学号后四位是 4 位序列号,如20230001。

列表推导式:通过列表推导式,快速生成 30 个学生的数据。

2. 文件操作

为了规范文件操作,我们自定义了csv_file_manager上下文管理器,并借助csv模块进行 CSV 文件的读写。

from contextlib import contextmanager
import csv

# 自定义上下文管理器用于文件操作
@contextmanager
def csv_file_manager(file_path, mode='r'):
    """处理CSV文件操作的上下文管理器"""
    try:
        file = open(file_path, mode, newline='', encoding='utf-8')
        yield file
    except IOError as e:
        print(f"文件操作出错: {str(e)}")
        raise
    finally:
        if 'file' in locals():
            file.close()


# 保存数据到CSV文件
def save_to_csv(data, filename):
    """将数据保存为CSV文件"""
    with csv_file_manager(filename, 'w') as f:
        writer = csv.writer(f)
        writer.writerow(['学号', '语文', '数学', '英语'])
        writer.writerows(data)
    print(f"数据已保存至 {filename}")


# 从CSV文件读取数据
def load_from_csv(filename):
    """从CSV文件加载数据"""
    try:
        with csv_file_manager(filename) as f:
            reader = csv.reader(f)
            next(reader)  # 跳过标题行
            return [
                (row[0],int(row[1]),int(row[2]),int(row[3]))
                for row in reader if len(row) == 4
            ]
    except ValueError as e:
        print(f"数据格式错误: {str(e)}")
        return []

实现要点:

  • 上下文管理器

    :csv_file_manager处理文件的打开、关闭,并捕获IOError异常。

  • CSV 文件写入

    :save_to_csv函数,将数据写入 CSV 文件,并添加标题行。

  • CSV 文件读取

    :load_from_csv函数,跳过标题行,读取数据并进行类型转换,同时处理数据格式错误。

3. 数据分析

通过一系列计算,实现对学生成绩的统计分析。

# 统计分析函数
def analyze_scores(data):
    """进行成绩统计分析"""
    if not data:
        print("无有效数据可供分析")
        return

    # 计算各科平均分
    chinese_avg = sum(s[1] for s in data) / len(data)
    math_avg = sum(s[2] for s in data) / len(data)
    english_avg = sum(s[3] for s in data) / len(data)

    # 找最高总分学生
    total_scores = [(s[0], sum(s[1:])) for s in data]
    top_student = max(total_scores, key=lambda x: x[1])

    print("\n=== 统计分析结果 ===")
    print(f"语文平均分: {chinese_avg:.1f}")
    print(f"数学平均分: {math_avg:.1f}")
    print(f"英语平均分: {english_avg:.1f}")
    print(f"总分最高学生: {top_student[0]} 总分: {top_student[1]}")

实现原理:

  • 平均分计算

    :使用生成器表达式,分别计算语文、数学、英语的平均分,如sum(s[1] for s in data) / len(data)。

  • 总分最高学生查找

    :借助max()函数和lambda表达式,找出总分最高的学生,如max(total_scores, key=lambda x: x[1])。

  • 空数据处理

    :在开始分析前,检查数据是否为空,避免除以零错误。

4. 主程序流程

主程序整合上述功能,实现数据的生成、保存、读取和分析。

def main():
    try:
        # 生成随机数据
        students = generate_student_data()

        # 保存数据
        filename = input("请输入保存文件名(例如 scores.csv): ")
        save_to_csv(students, filename)

        # 读取数据
        loaded_data = load_from_csv(filename)

        # 分析数据
        if loaded_data:
            analyze_scores(loaded_data)

    except Exception as e:
        print(f"程序运行出错: {str(e)}")


if __name__ == "__main__":
	main()

流程概述:

  • 用户交互

    :提示用户输入保存文件名,增强程序的交互性。

  • 异常处理

    :通过try-except捕获程序运行过程中的异常,提升程序的稳定性。

  • 模块化整合

    :调用前面定义的函数,实现数据的全生命周期管理。

运行示例

请输入保存文件名(例如 scores.csv): data.csv
数据已保存至 data.csv

=== 统计分析结果 ===
语文平均分: 80.0
数学平均分: 81.9
英语平均分: 77.5
总分最高学生: 20230025 总分: 290

项目亮点

  1. 知识综合应用

    :融合随机数生成、文件操作、上下文管理器、异常处理等知识。

  2. 模块化设计

    :代码结构清晰,便于维护和扩展。

  3. 可读性提升

    :使用类型提示和文档字符串,提升代码的可读性。

  4. 全生命周期管理

    :实现数据从生成、存储、读取到分析的完整管理。

  5. 用户友好设计

    :具备用户友好的输入输出设计,交互体验好。

结合之前学习的python功能实现学生成绩的分析_第1张图片

你可能感兴趣的:(学习AI,python编程,python)