阶段一 · 第二章 Python面向对象

第二章 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)中,并打
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值