1. print题目 #
1.1 标题 #
假设你正在开发一个学生成绩管理系统,需要实现一个成绩报告生成功能。系统需要将学生数据以美观的格式输出到控制台,同时支持将报告保存到文件。
1.2. 题目内容 #
请完成以下功能:
学生数据格式化输出:
- 创建一个学生类,包含姓名、年龄、各科成绩(语文、数学、英语)
- 实现
__str__方法,使print(student)输出格式为:学生:张三,年龄:20,平均分:85.67
班级成绩表格输出:
- 设计一个函数,将学生列表以表格形式输出
- 表格包含:姓名、年龄、语文、数学、英语、平均分、等级
- 要求:姓名左对齐宽度10,分数右对齐保留1位小数,等级根据平均分自动计算(≥90为A,≥80为B,≥70为C,其他为D)
进度显示功能:
- 实现一个模拟数据加载进度条,显示"正在加载学生数据..."并伴随动态进度条
- 进度条格式:
[#######] 100% 加载完成
日志输出功能:
- 创建一个带颜色的日志输出函数
- 支持不同级别:INFO(绿色)、WARNING(黄色)、ERROR(红色)
- 格式:
[级别] 时间戳: 消息内容
数据导出功能:
- 将学生数据导出为CSV格式文件
- 使用
print()的file参数实现
1.3 测试数据 #
students_data = [
("张三", 20, 85, 92, 78),
("李四", 19, 76, 88, 94),
("王五", 21, 95, 87, 82),
("赵六", 20, 68, 75, 71),
("钱七", 22, 91, 96, 89)
]1.4. 预期输出效果 #
[INFO] 14:30:15: 开始加载学生数据
[#######] 100% 加载完成
班级成绩报告
==========================================
姓名 年龄 语文 数学 英语 平均分 等级
张三 20 85.0 92.0 78.0 85.0 B
李四 19 76.0 88.0 94.0 86.0 B
王五 21 95.0 87.0 82.0 88.0 B
赵六 20 68.0 75.0 71.0 71.3 C
钱七 22 91.0 96.0 89.0 92.0 A
[INFO] 14:30:16: 成绩报告生成完成
[INFO] 14:30:16: 数据已导出到 students.csv2.参考答案 #
2.1 代码 #
# 导入time模块,用于处理时间相关功能
import time
# 导入csv模块,用于读写CSV文件
import csv
# 从datetime模块导入datetime类,用于生成时间戳
from datetime import datetime
# 定义ANSI颜色代码类,用来在终端输出带颜色的文字
class Colors:
# 绿色
GREEN = '\033[92m'
# 黄色
YELLOW = '\033[93m'
# 红色
RED = '\033[91m'
# 重置颜色
RESET = '\033[0m'
# 定义学生类
class Student:
# 初始化方法,传入姓名、年龄、语文、数学和英语分数
def __init__(self, name, age, chinese, math, english):
# 保存学生姓名
self.name = name
# 保存学生年龄
self.age = age
# 保存语文成绩
self.chinese = chinese
# 保存数学成绩
self.math = math
# 保存英语成绩
self.english = english
# 计算平均分
self.average = (chinese + math + english) / 3
# 定义对象的字符串表示,用于打印学生信息
def __str__(self):
# 返回格式化的学生信息字符串
return f"学生:{self.name},年龄:{self.age},平均分:{self.average:.2f}"
# 获取学生成绩等级的方法
def get_grade(self):
# 如果平均分大于等于90,返回A
if self.average >= 90:
return 'A'
# 如果平均分大于等于80,返回B
elif self.average >= 80:
return 'B'
# 如果平均分大于等于70,返回C
elif self.average >= 70:
return 'C'
# 否则返回D
else:
return 'D'
# 带颜色的日志输出函数
def colored_log(message, level="INFO"):
# 定义不同日志级别的颜色
colors = {
"INFO": Colors.GREEN,
"WARNING": Colors.YELLOW,
"ERROR": Colors.RED
}
# 获取对应级别的颜色代码,找不到则用重置色
color = colors.get(level, Colors.RESET)
# 获取当前时间并格式化为时:分:秒
timestamp = datetime.now().strftime("%H:%M:%S")
# 打印带颜色、时间戳和信息级别的日志信息
print(f"{color}[{level}] {timestamp}: {message}{Colors.RESET}")
# 显示加载进度条的函数
def show_progress():
# 日志提示开始加载学生数据
colored_log("开始加载学生数据", "INFO")
# 进度条循环,0~10,总共11步
for i in range(11):
# 计算当前进度百分比
progress = i * 10
# 构造进度条字符串
bar = '#' * i + ' ' * (10 - i)
# 输出进度条及百分比,\r用于在同一行刷新
print(f"\r[{bar}] {progress}%", end="", flush=True)
# 每次等待0.1秒,模拟加载过程
time.sleep(0.1)
# 进度条加载完成提示
print(" 加载完成")
# 打印学生成绩表格的函数
def print_student_table(students):
# 打印标题
print("\n班级成绩报告")
# 打印分隔线
print("=" * 42)
# 打印表头
print(f"{'姓名':<10} {'年龄':<6} {'语文':<6} {'数学':<6} {'英语':<6} {'平均分':<8} {'等级':<4}")
# 遍历学生列表,逐行打印每个学生的数据
for student in students:
print(f"{student.name:<10} {student.age:<6} {student.chinese:<6.1f} "
f"{student.math:<6.1f} {student.english:<6.1f} "
f"{student.average:<8.1f} {student.get_grade():<4}")
# 导出学生数据到CSV文件的函数
def export_to_csv(students, filename="students.csv"):
# 以写入模式打开CSV文件,编码为utf-8
with open(filename, "w", newline="", encoding="utf-8") as f:
# 创建CSV写入器
writer = csv.writer(f)
# 写入表头
writer.writerow(["姓名", "年龄", "语文", "数学", "英语", "平均分", "等级"])
# 遍历学生列表,写入每个学生的数据
for student in students:
writer.writerow([
student.name, student.age, student.chinese,
student.math, student.english,
f"{student.average:.1f}", student.get_grade()
])
# 日志输出数据导出成功
colored_log(f"数据已导出到 {filename}", "INFO")
# 主函数入口
def main():
# 主函数说明文档字符串
"""主函数"""
# 准备测试数据,每个元素是一个学生的信息
students_data = [
("张三", 20, 85, 92, 78),
("李四", 19, 76, 88, 94),
("王五", 21, 95, 87, 82),
("赵六", 20, 68, 75, 71),
("钱七", 22, 91, 96, 89)
]
# 创建学生对象列表
students = [Student(*data) for data in students_data]
# 显示加载进度条
show_progress()
# 打印第一个学生的信息,用于测试__str__方法
print(f"\n第一个学生信息: {students[0]}")
# 打印所有学生的成绩表格
print_student_table(students)
# 日志输出报告生成完成
colored_log("成绩报告生成完成", "INFO")
# 导出学生数据到csv文件
export_to_csv(students)
# 判断是否为主程序
if __name__ == "__main__":
# 调用主函数
main()2.2 知识点覆盖 #
- 面向对象编程:类的定义、
__str__方法 - 字符串格式化:f-string、对齐、精度控制
- print参数应用:
end、file参数的使用 - 进度显示:
\r转义符、动态更新 - 颜色输出:ANSI转义序列
- 文件操作:CSV文件写入
- 时间处理:时间戳格式化
- 循环和条件:等级计算逻辑
- 函数设计:模块化编程思想