Requirements: The name of the James,julie,mikey,sarah four students to establish a text file, respectively, storage of their own results, time format is accurate to minutes, the shorter the results, respectively, the output of each student without repetition of the top three best results, and the seconds and minutes of the separator to be unified as "."
Data preparation: Four text files created separately
James.txt 2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
Julie.txt 2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21
Mikey.txt 2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38
Sarah.txt 2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55
Code implementation:
Copy Code code as follows:
Import OS
Os.chdir (' C:\Python33\HeadFirstPython\hfpy_code\chapter5 ') #将工作空间修改为文件所在的目录
#定义函数get_filedata从文件中取值
def get_filedata (filename):
Try
with open (filename) as F: #with语句打开和自动关闭文件
Data=f.readline () #从文件中逐行读取字符
Return (Data.strip (). Split (', ')) #将字符间的空格清除后, separating characters with commas
Except IOError as Ioerr:
Print (' File error ' + str (ioerr)) #异常处理, printing error
Return (None)
#定义函数modify_time_format将所有文件中的时分表达方式统一为 "min. sec"
def modify_time_format (time_string):
If "-" in time_string:
Splitter= "-"
Elif ":" In time_string:
Splitter= ":"
Else
Splitter= "."
(mins, secs) =time_string.split (splitter) #用分隔符splitter分隔字符后分别存入mins和secs
Return (mins+ '. ' +secs)
#定义函数get_prev_three返回文件中排名前三的不重复的时间成绩
def get_prev_three (filename):
New_list=[modify_time_format (each_t) for each_t in Get_filedata (filename)] #采用列表推导将统一时分表达方式后的记录生成新的列表
Delete_repetition=set (new_list) #采用集合set函数删除新列表中重复项 and generate a new collection
In_order=sorted (delete_repetition) #采用复制排序sorted函数对无重复性的新集合进行排序
Return (In_order[0:3]) #返回列表前三项
# Output The top three of the corresponding file in the previous time
Print (Get_prev_three ("James.txt"))
Print (Get_prev_three ("Julie.txt"))
Print (Get_prev_three ("Mikey.txt"))
Print (Get_prev_three ("Sarah.txt"))
Output results:
Copy Code code as follows:
[' 2.01 ', ' 2.22 ', ' 2.34 ']
[' 2.11 ', ' 2.23 ', ' 2.59 ']
[' 2.22 ', ' 2.38 ', ' 2.49 ']
[' 2.18 ', ' 2.25 ', ' 2.39 ']