获取txt学生成绩,筛选出最高成绩,最低成绩,平均成绩,高于平均成绩

继续解释每行代码的作用和每个属性的具体作用:

with open(_file, 'r', encoding="utf-8") as f:
    self.source_data = re.sub('分', '', f.read())


这行代码打开指定的文件,并使用UTF-8编码读取文件内容。然后,使用正则表达式`re.sub`将内容中的所有"分"字删除,并将处理后的内容保存在`self.source_data`属性中。
 

self.list_data = self.source_data.strip().split(',')


这行代码对`self.source_data`进行处理,先使用`strip()`函数去除首尾空白字符,然后使用`split(',')`函数按照逗号分割字符串,并将分割后的结果保存在`self.list_data`属性中,得到一个字符串元素构成的列表。

self.score = [int(d.split(':')[1].strip()) for d in self.list_data]


这行代码使用列表推导式遍历`self.list_data`中的每个元素,先按冒号进行分割成两部分,并去除分割后的第二部分的首尾空白字符。然后将分割后的第二部分转换为整数,并将转换后的结果组成新列表赋值给`self.score`属性。这个属性包含了从`self.list_data`中分割出来的整数分数的列表。
 

self.name = [d.split(':')[0] for d in self.list_data]


这行代码使用列表推导式遍历`self.list_data`中的每个元素,先按冒号进行分割成两部分,并取分割后的第一部分。然后将取到的第一部分组成新列表赋值给`self.name`属性,这个属性包含了从`self.list_data`中分割出来的学生姓名的列表。

self.two_dimensional_data = list(zip(self.name, self.score))


这行代码使用`zip()`函数将`self.name`和`self.score`两个列表对应位置的元素打包成元组,并将这些元组组成的列表赋值给`self.two_dimensional_data`属性。这个属性包含了学生姓名和对应分数的二维数据。
 

self.score_sorted = list(sorted(self.two_dimensional_data, key=lambda x: x[1], reverse=True))


这行代码使用`sorted()`函数对`self.two_dimensional_data`进行排序,排序的依据是每个元组的第二个值(即分数)。参数`key=lambda x: x[1]`表示根据每个元组的第二个元素进行排序。`reverse=True`表示按降序排列。最后,将排序后的结果转换为列表,并赋值给`self.score_sorted`属性。这个属性是按照分数从高到低排序的学生姓名和对应分数的二维数据。

self.avg = sum(self.score) / len(self.score)


这行代码使用`sum()`函数对`self.score`属性中的分数求和,然后除以`self.score`属性的长度,得到平均分,并将结果赋值给`self.avg`属性。

self.max = max(self.score)


这行代码使用`max()`函数找出`self.score`属性中的最大值,并将结果赋值给`self.max`属性。

self.min = min(self.score)


这行代码使用`min()`函数找出`self.score`属性中的最小值,并将结果赋值给`self.min`属性。

self.gt_avg_name = list(filter(lambda x: x[1] > self.avg, self.two_dimensional_data))


这行代码使用`filter()`函数过滤出`self.two_dimensional_data`属性中分数大于`self.avg`属性的学生姓名和分数的二维数据。这个属性包含了高于平均分的学生姓名和对应分数的二维数据。

总结:这些属性中的`self.list_data`保存了从文件中读取的原始数据,`self.name`保存了学生姓名的

代码实现:

import re


class Analysis(object):
    def __init__(self, _file):
        with open(_file, 'r', encoding="utf-8") as f:
            self.source_data = re.sub('分', '', f.read())
            self.list_data = self.source_data.strip().split(',')
            self.score = [int(d.split(':')[1].strip()) for d in self.list_data]
            self.name = [d.split(':')[0] for d in self.list_data]
            self.two_dimensional_data = list(zip(self.name, self.score))
            self.score_sorted = list(sorted(self.two_dimensional_data, key=lambda x: x[1], reverse=True))
            self.avg = sum(self.score) / len(self.score)
            self.max = max(self.score)
            self.min = min(self.score)
            self.gt_avg_name = list(filter(lambda x: x[1] > self.avg, self.two_dimensional_data))

    def result(self):
        print("score_sorted:", str(self.score_sorted))
        return "最高成绩:%s分,最低成绩:%s分,平均成绩:%d分,高于平均成绩的同学有:%s" \
               % (self.max, self.min, self.avg, str(self.gt_avg_name))


def store_analysis_data(_file="file_client/score.txt"):
    analysis = Analysis(_file=_file)
    return analysis.result()


if __name__ == '__main__':
    a = Analysis(_file="file_client/score.txt")
    print(a.result())

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值