要求:分別以james,julie,mikey,sarah四個學生的名字建立文本文件,分別存儲各自的成績,時間格式都精確爲分秒,時間越短成績越好,分別輸出每個學生的無重複的前三個最好成績,且分秒的分隔符要統一爲“.”
數據準備:分別建立四個文本文件
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
import os
os.chdir('D:\python') #將工作空間修改爲文件所在目錄
#定義函數get_filedata從文件中取值
def get_filedata(filename):
try:
with open(filename) as f: #with語句打開和自動關閉文件
data=f.readline() #從文件中逐行讀取字符
return(data.strip().split(',')) #將字符間的空格清除後,用逗號分隔字符
except IOError as ioerr:
print('File Error'+str(ioerr)) #異常處理打印錯誤
return(None)
#定義函數modify_time_format將所有文件中的時分表達方式統一爲“分.秒”
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函數刪除新列表中的重複項,並生成新的集合
in_order=sorted(delete_repetition)
return(in_order[0:3])
#分別輸出對應文件中排名前三的不重複的時間成績
print(get_prev_three("james.txt"))
print(get_prev_three("julie.txt"))
print(get_prev_three("mikey.txt"))
print(get_prev_three("sarah.txt"))
輸出結果:
['2.01', '2.22', '2.34']
['2.11', '2.23', '2.59']
['2.22', '2.38', '2.49']
['2.18', '2.25', '2.39']
要求2
文件中除了學生的成績外,新增了學生姓名和出生年月的信息,因此將要成變成:分別根據姓名輸出每個學生的無重複的前三個最好成績和出生年月
數據準備:建立一個文本文件
james2.txt James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
在上一節基礎上,修改部分代碼,將新要求實現如下:
import os
print(os.getcwd())
os.chdir('D:\python\data')
def get_filedata(filename):
try:
with open(filename) as f:
data=f.readline()
data_list=data.strip().split(',')
return({
"name":data_list.pop(0),
"data_of_birth":data_list.pop(0),
"times":str(sorted(set([modify_time_format(s) for s in data_list]))[0:3])
})
#use dictionary to store the name,data_of_birth,and times
except IOError as ioerr:
print('File Error'+ str(ioerr))
return(None)
james=get_filedata('james2.txt')
print(james2["name"] + "'s fastest times are:" + james["times"])
print(james["name"]+"'s birthday is" + james["data_of_birth"])