第二章 Python面向对象
2 - 5 面向对象课堂作业 3 ①
某班级有5名学生,他们的学号、姓名和英语成绩如下表所示,此数据存储在student_scores.txt文件中,请编写一个程序,完成如下功能:
1,计算每个学生的平均成绩。
2,输出平均成绩最高的学生信息。
3,要求使用面向对象完成此需求,即,创建学生对象用于存储学号、姓名、得分,提供计算平均分方法等。
+------+--------+------+------+------+
| 学号 | 姓名 | 语文 | 数学 | 英语 |
+------+--------+------+------+------+
| 001 | 张三 | 85 | 90 | 78 |
| 002 | 李四 | 92 | 88 | 95 |
| 003 | 王五 | 88 | 92 | 85 |
| 004 | 赵六 | 78 | 85 | 90 |
| 005 | 小明 | 95 | 92 | 88 |
+------+--------+------+------+------+
student_scores.txt文本内容如下
学号,姓名,语文,数学,英语
001,张三,85,90,78
002,李四,92,88,95
003,王五,88,92,85
004,赵六,78,85,90
005,小明,95,92,88
class Student:
def __init__(self, student_id, name, scores):
self.student_id = student_id
self.name = name
self.scores = scores
def get_average_score(self):
if len(self.scores) == 0:
return 0
else:
return sum(self.scores) / len(self.scores)
# 从文件中读取学生信息和成绩
students = []
with open('student_scores.txt', 'r') as file:
lines = file.readlines()[1:] # 使用切片操作跳过第一行,得到一个含所以数据的列表
for line in lines: #一行一行取出数据,以逗号分隔,且含有空格
# 此处*scores存储的是后续所有的得分
student_id, name, *scores = line.strip().split(',')
scores = [int(score) for score in scores] #将分数进行类型转换,用于计算
student = Student(student_id, name, scores) 、
students.append(student)
# 计算每个学生在不同科目上的平均成绩
for student in students:
average_score = student.get_average_score()
student.average_score = average_score
# 查找平均成绩最高的学生
highest_average_score = max(student.average_score for student in students)
##列表推导式,前面为要执行的表达式
print(highest_average_score)
student_list = []
for student in students:
if student.average_score == highest_average_score:
student_list.append(student)
for highest_score_student in student_list:
# 输出平均成绩最高的学生信息
print("学号:", highest_score_student.student_id)
print("姓名:", highest_score_student.name)
print("平均成绩:", highest_score_student.average_score)
print("")
知识点:
strip方法:用于移除指定字符,如空格
split方法:通过指定的分隔符将字符串分割成为一个列表
编写一个银行账户管理系统的类BankAccount,具有以下功能:
- 账户属性包括:账号(account_number),账户类型(account_type),余额(balance)和交易历史记录(transactions),账户类型可以有多种
- 初始化方法__init__()用于设置账户属性。
- 存款方法deposit(amount):接收存款金额(amount),如果金额大于0,则将金额加入余额(balance),并将存款信息添加到交易历史记录(transactions)中,并打

最低0.47元/天 解锁文章
801





