Python-类与文件读取结合
生活随笔
收集整理的這篇文章主要介紹了
Python-类与文件读取结合
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
作業1:
知識點1:eval使用
知識點1:類對象數組定義
知識點2:文件讀取
知識點3:內容解包
知識點4:列表排序
作業2:
知識點1:類繼承后 初始化管理
知識點2:文件的篩選
作業1:
數據如下:
stu1.txt 孫同學,2020-5-21,20,'男',77,56,77,76,92,58,-91,84,69,-91 stu2.txt 趙同學,2020-11-3,24,'女',65,68,72,95,-81,71,86,91,57,91 stu3.txt 王同學,2021-8-7,25,'男',87,78,90,-76,88,47,100,65,69,100 stu4.txt 李同學,2021-8-10,29,'男',92,54,85,71,-91,68,77,68,95,95以上四個txt文檔在work路徑下可以找到。
定義Student類,包括name、dob、age、gender和score屬性,包括top3方法用來返回學生的最大的3個成績(可重復)、sanitize方法用來將負的分數變為正的分數,負的分數可能是輸入錯誤。聲明stu_list對象組數用于存儲所有的學生對象。最后輸出所有的學生信息包括姓名、生日、年齡、性別、最高的3個分數。
第一題的輸出結果如下,供參考:
?
初始思路:
class Student:def __init__(self, name, dob, age, gender, score):self.name = nameself.dob = dobself.age = ageself.gender = genderself.score = scoredef top3(self):self.sanitize()self.score = sorted(self.score)self.score=self.score[-3:]def sanitize(self):for i in range(len(self.score)):if self.score[i]<0:self.score[i]=abs(self.score[i])def print_stu(self):self.top3()print('姓名:', self.name, '生日:', self.dob,'年齡:', self.age, '性別:', self.gender, '分數:', self.score)s1 = Student('孫同學','2020-5-21','20','男',[77,56,77,76,92,58,-91,84,69,-91]) s2 = Student('趙同學','2020-11-3','24','女',[65,68,72,95,-81,71,86,91,57,91]) s3 = Student('王同學','2021-8-7','25','男',[87,78,90,-76,88,47,100,65,69,100]) s4 = Student('李同學','2021-8-10','29','男',[92,54,85,71,-91,68,77,68,95,95]) s5 = Student('特長同學','2020-10-5','20','男',[180,77,56,77,76,92,58,-91,84,69,-91]) s6 = Student('特長同學','2020-10-6','20','女',[230,77,56,77,76,92,58,-91,84,69,-91])text1 = '孫同學', '2020-5-21','20','男',[77,56,77,76,92,58,-91,84,69,-91] text2 = '趙同學', '2020-11-3','24','女',[65,68,72,95,-81,71,86,91,57,91] text3 = '王同學','2021-8-7','25','男',[87,78,90,-76,88,47,100,65,69,100] text4 = '李同學','2021-8-10','29','男',[92,54,85,71,-91,68,77,68,95,95] text5 = '特長同學','2020-10-5','20','男',[180,77,56,77,76,92,58,-91,84,69,-91] text6 = '特長同學','2020-10-6','20','女',[230,77,56,77,76,92,58,-91,84,69,-91] print(type(text1)) # 賦值辦法1 stu_lst = [Student for i in range(6)] for i in range(len(stu_lst)):stu_lst[i] = Student(*eval('text'+str(i+1)))stu_lst[i].print_stu()# 賦值辦法2 print('----------------------------') for i in range(6):i = eval('s'+str(i+1))i.print_stu()知識點1:eval使用
后續改進:
''' 定義Student類,包括name、dob、age、gender和score屬性, 包括top3方法用來返回學生的最大的3個成績(可重復)、 sanitize方法用來將負的分數變為正的分數,負的分數可能是輸入錯誤。 聲明stu_list對象組數用于存儲所有的學生對象。 最后輸出所有的學生信息包括姓名、生日、年齡、性別、最高的3個分數。 ''' import osclass Student:def __init__(self, name, dob, age, gender, score):self.name = nameself.dob = dobself.age = ageself.gender = genderself.score = scoredef top3(self):self.sanitize()self.score = sorted(self.score)self.score=self.score[-3:]def sanitize(self):self.score = self.score.split(',')self.score =[int(i) for i in self.score]for i in range(len(self.score)):if self.score[i]<0:self.score[i]=abs(self.score[i])def print_stu(self):self.top3()print("姓名:"+self.name,end=' ')print("生日:"+self.dob,end=' ')print('年齡:'+self.age,end=' ')print('性別:'+self.gender,end=' ')print('分數:'+str(self.score))path = './aistudio/work' listidr = os.listdir(path) info_lst = [] num=0 for name in listidr:num = num+1if os.path.isfile(path+'/'+name):temp = name.split('.')(filename, filetype) = (temp.pop(0), temp.pop(0))if filetype == 'txt':with open(path+'/'+name,'r', encoding='UTF-8') as f:text =f.read()temp = tuple(text.split(',',4))info_lst.append(temp)stu_lst = [Student for i in range(num)] for i in range(len(stu_lst)):stu_lst[i] = Student(*info_lst[i])stu_lst[i].print_stu()知識點1:類對象數組定義
知識點2:文件讀取
知識點3:內容解包
知識點4:列表排序
作業2:
數據格式如下:
stu5.txt 特長同學,2020-10-5,20,'男',180,87,98,77,76,92,58,-76,84,69,-47 stu6.txt 特長同學,2020-10-6,20,'女',230,76,48,82,88,92,58,-91,84,69,-68以上兩個txt文檔在work路徑下可以找到。
定義Spostudent、Artstudent為Student的子類,在子類的屬性里面新增了spe為特長分數。Spostudent包括的top3方法返回的是最低的3個得分(可重復),Artstudent包括top3方法返回的是最高的3個得分(可重復),最后使用多態的方式輸出2個特長同學的姓名、生日、年齡、性別、分數、特長分。
第二題的輸出結果如下,供參考:
import osclass Student:def __init__(self, name, dob, age, gender, score):self.name = nameself.dob = dobself.age = ageself.gender = genderself.score = scoredef sanitize(self):self.score = self.score.split(',')self.score = [int(i) for i in self.score]for i in range(len(self.score)):if self.score[i]<0:self.score[i]=abs(self.score[i])class Spostudent(Student):def __init__(self, name, dob, age, gender, score,spe):# super(Spostudent,self).__init__(spe)Student.__init__(self,name, dob, age, gender, score)self.spe = spedef top3(self):self.sanitize()self.score = sorted(self.score)self.score = self.score[0:3]def print_stu(self):self.top3()print("姓名:" + self.name, end=' ')print("生日:" + self.dob, end=' ')print('年齡:' + self.age, end=' ')print('性別:' + self.gender, end=' ')print('分數:' + str(self.score),end='')print('特長分:'+self.spe)class Artstudent(Student):def __init__(self, name, dob, age, gender, score,spe):Student.__init__(self, name, dob, age, gender, score)self.spe = spedef top3(self):self.sanitize()self.score = sorted(self.score)self.score = self.score[-3:]def print_stu(self):self.top3()print("姓名:" + self.name, end=' ')print("生日:" + self.dob, end=' ')print('年齡:' + self.age, end=' ')print('性別:' + self.gender, end=' ')print('分數:' + str(self.score), end=' ')print('特長分:' + self.spe)path = './aistudio/work' listidr = os.listdir(path) info_lst = [] num=0 for name in listidr:num = num+1if os.path.isfile(path+'/'+name):temp = name.split('.')(filename, filetype) = (temp.pop(0), temp.pop(0))if filetype == 'txt':with open(path+'/'+name,'r', encoding='UTF-8') as f:text =f.read()temp = list(text.split(',',5))temp[4], temp[5] = temp[5], temp[4]if "特長" in temp[0]:info_lst.append(temp)stu_1 = Spostudent(*info_lst[0]) stu_1.print_stu()stu_2 = Artstudent(*info_lst[1]) stu_2.print_stu()知識點1:類繼承后 初始化管理
知識點2:文件的篩選
總結
以上是生活随笔為你收集整理的Python-类与文件读取结合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷积理解
- 下一篇: C++基础13-类和对象之继承2