Skip to main content

6.数据类型

1. 数据类型综合应用与数据处理

1.1 题目背景

你正在开发一个学生成绩管理系统,需要处理各种类型的数据:学生信息、成绩计算、数据验证和格式化输出。该系统需要能够处理不同数据类型之间的转换,并进行各种数据操作。

1.2 题目要求

请实现以下三个函数:

1.2.1. 数据类型转换与验证函数
def process_student_data(student_info):
"""
处理学生数据,进行类型转换和验证

参数:
student_info: 字典,包含学生信息
格式: {"name": "张三", "age": "20", "score": "85.5", "is_passed": "true"}

返回:
处理后的字典,所有值都转换为正确的Python数据类型
如果数据无效,返回None

要求:
- name: 转换为字符串,去除首尾空格
- age: 转换为整数,范围1-100
- score: 转换为浮点数,范围0.0-100.0
- is_passed: 转换为布尔值("true"/"false"字符串转为True/False)
- 如果任何转换失败或超出范围,返回None
"""
1.2.2. 成绩计算与格式化函数
def calculate_and_format_grades(students):
"""
计算学生成绩等级并格式化输出

参数:
students: 学生信息列表,每个元素是字典
格式: [{"name": "张三", "score": 85.5}, ...]

返回:
格式化后的成绩报告字符串

要求:
- 根据分数计算等级:>=90为A,>=80为B,>=70为C,>=60为D,<60为F
- 计算平均分、最高分、最低分
- 统计各等级人数
- 使用f-string格式化输出,保留2位小数
- 输出格式要美观,包含表格样式
"""
1.2.3. 数据筛选与统计函数
def analyze_student_performance(students, filters=None):
"""
分析学生表现数据

参数:
students: 学生信息列表
filters: 筛选条件字典,可选参数
格式: {"min_score": 80, "max_score": 95, "grade": "A"}

返回:
分析结果字典,包含:
{
"total_count": 总人数,
"filtered_count": 筛选后人数,
"average_score": 平均分,
"grade_distribution": 等级分布,
"top_performers": 前3名学生,
"pass_rate": 及格率
}

要求:
- 支持按分数范围筛选
- 支持按等级筛选
- 计算及格率(>=60分)
- 找出前3名高分学生
- 处理边界情况(空数据、无效筛选条件等)
"""

1.3 测试用例

# 测试数据
test_students = [
{"name": " 张三 ", "age": "20", "score": "85.5", "is_passed": "true"},
{"name": "李四", "age": "19", "score": "92.0", "is_passed": "true"},
{"name": "王五", "age": "21", "score": "78.3", "is_passed": "false"},
{"name": "赵六", "age": "22", "score": "65.7", "is_passed": "true"},
{"name": "钱七", "age": "20", "score": "45.2", "is_passed": "false"}
]

# 筛选条件测试
test_filters = [
{"min_score": 80, "max_score": 95},
{"grade": "A"},
{"min_score": 60}
]

1.4 预期输出示例

=== 学生成绩管理系统 ===

处理后的学生数据:
姓名: 张三, 年龄: 20, 分数: 85.5, 及格: True

成绩报告:
==========================================
学生姓名 分数 等级
==========================================
张三 85.50 B
李四 92.00 A
王五 78.30 C
赵六 65.70 D
钱七 45.20 F
==========================================
平均分: 73.34
最高分: 92.00
最低分: 45.20
等级分布: A:1人, B:1人, C:1人, D:1人, F:1人

分析结果:
总人数: 5, 筛选后: 2, 平均分: 88.75, 及格率: 60.0%