如何使用组合数据类型(如字典或列表)来存储一门课程的信息(包括课程名称、成绩和学分),然后计算一位同学修读n门课程(n>=3)的加权平均分,并展示所有课程的成绩和学分?请提供详细的步骤及Python代码示例。
时间: 2024-10-25 13:09:32 浏览: 35
在Python中,你可以使用列表来存储单门课程的信息,如一个包含三元组(课程名,分数,学分)的元素,然后用字典来记录整个学生的所有课程信息。接下来,我们可以创建一个函数来计算加权平均分。以下是详细的步骤和代码示例:
1. 定义每门课程的信息结构:
```python
# 单门课程表示
course_info = {
'课程名称': '',
'成绩': 0,
'学分': 0
}
```
2. 存储学生的课程列表:
```python
# 学生课程字典,键为课程名,值为课程信息字典
student_courses = {}
```
3. 添加学生课程信息:
```python
def add_course(student_name, course_name, score, credit):
if student_name not in student_courses:
student_courses[student_name] = {}
student_courses[student_name][course_name] = course_info.copy()
student_courses[student_name][course_name]['成绩'] = score
student_courses[student_name][course_name]['学分'] = credit
```
4. 计算加权平均分:
```python
def calculate_weighted_average(student_name, n):
total_score = 0
total_credit = 0
if student_name in student_courses and len(student_courses[student_name]) >= n:
for course in student_courses[student_name]:
total_score += student_courses[student_name][course]['成绩'] * student_courses[student_name][course]['学分']
total_credit += student_courses[student_name][course]['学分']
# 如果总学分大于0,则计算加权平均分,否则返回None
if total_credit > 0:
return total_score / total_credit
else:
return None
else:
return "学生 {} 的课程不足 {}".format(student_name, n)
```
5. 使用这个函数:
```python
# 示例
add_course('小明', '数学', 90, 4)
add_course('小明', '物理', 85, 3)
add_course('小红', '化学', 88, 3)
print(calculate_weighted_average('小明', 3))
print(calculate_weighted_average('小红', 3))
```
阅读全文