[Head First Python]6. 定制数据对象:打包代码与数据

 相同功能,演进实现

数据文件

sarah2.txt

sarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55

 

1- 返回dict

return({‘Name‘:data_list.pop(0),

‘DOB‘:data_list.pop(0),

‘Time‘:str( sorted( set([sanitize(t) for t in data_list] ) )[0:3])})

 1 def sanitize(time_string):
 2     if - in time_string:
 3         splitter = -
 4     elif : in time_string:
 5         splitter = :
 6     else:
 7         return (time_string)
 8 
 9     (mins, secs) = time_string.split(splitter)
10     return(mins + . + secs)
11 
12 def get_coach_data(filename):
13     try:
14         with open(filename) as f:
15             data = f.readline()
16             data_list = data.strip().split(,)
17             return({Name:data_list.pop(0),
18                     DOB:data_list.pop(0),
19                     Time:str( sorted( set([sanitize(t) for t in data_list]  ) )[0:3])}) 
20     except IOError as err:
21         print("file err:" + str(err))
22         return(none)
23 
24 
25 julie = get_coach_data(julie2.txt)
26 james = get_coach_data(james2.txt)
27 sarah = get_coach_data(sarah2.txt)
28 mikey = get_coach_data(mikey2.txt)
29 
30 print( julie[Name] + "‘s faster time are:" + julie[Time])
31 print( james[Name] + "‘s faster time are:" + james[Time])
32 print( sarah[Name] + "‘s faster time are:" + sarah[Time])
33 print( mikey[Name] + "‘s faster time are:" + mikey[Time])

2- 返回类  return ( Athlete(datalist.pop(0), datalist.pop(0), datalist))

 1 def sanitize(time_string):
 2     if - in time_string:
 3         splitter = -
 4     elif : in time_string:
 5         splitter = :
 6     else:
 7         return(time_string)
 8     
 9     (mins, secs) = time_string.split(splitter)
10     return(mins + "." + secs)
11     
12 class Athlete:
13     def __init__(self, a_name, a_dob = None, a_time = []):
14         self.name = a_name
15         self.dob = a_dob
16         self.times = a_time
17 
18     def top3(self):
19         return( sorted(set([sanitize(t) for t in self.times]))[0:3] )
20     
21     def add_time(self,time_value):
22         self.times.append(time_value)
23     
24     def add_times(self,list_of_times):
25         self.times.extend(list_of_times)
26     
27         
28 def get_coach_data(filename):
29     try:
30         with open(filename) as f:
31             data = f.readline();
32             datalist = data.strip().split(,)
33             return ( Athlete(datalist.pop(0), datalist.pop(0), datalist))
34     except IOError as err:
35         print(file err: + str(err))
36         return(none)
37     
38 
39 julie = get_coach_data(julie2.txt)
40 james = get_coach_data(james2.txt)
41 sarah = get_coach_data(sarah2.txt)
42 mikey = get_coach_data(mikey2.txt)
43 
44 print(julie.name + "‘s faster times are:" + str(julie.top3()))
45 print(james.name + "‘s faster times are:" + str(james.top3()))
46 print(sarah.name + "‘s faster times are:" + str(sarah.top3()))
47 print(mikey.name + "‘s faster times are:" + str(mikey.top3()))
48 
49 vera = Athlete(vera vi)
50 vera.add_time(1.30)
51 print(vera.top3())
52 vera.add_times([1.00,0.3,1.2])
53 print(vera.top3())

 3- 继承python内置list

 1 class Athletelist(list):
 2     def __init__(self, a_name, a_dob = None, a_times = []):
 3         list.__init__([])
 4         self.name = a_name
 5         self.dob = a_dob
 6         self.extend(a_times)
 7     def top3(self):
 8         return( sorted( set([sanitize(t) for t in self] ) )[0:3])
 9 
10 def sanitize(time_string):
11     if - in time_string:
12         splitter = -
13     elif : in time_string:
14         splitter = :
15     else:
16         return(time_string)
17 
18     (mins, secs) = time_string.split(splitter)
19     return(mins + "." + secs)
20 
21 #vera = Athletelist("vera vi")
22 #vera.append(‘1.31‘)
23 #print(vera.top3())
24 #vera.extend(["1","2","0"])
25 #print(vera.top3())
26 
27 def get_coach_data(filename):
28     try:
29         with open(filename) as f:
30             data = f.readline();
31             datalist = data.strip().split(,)
32             return ( Athletelist(datalist.pop(0), datalist.pop(0), datalist))
33     except IOError as err:
34         print(file err: + str(err))
35         return(none)
36 
37 
38 julie = get_coach_data(julie2.txt)
39 james = get_coach_data(james2.txt)
40 sarah = get_coach_data(sarah2.txt)
41 mikey = get_coach_data(mikey2.txt)
42 
43 print(julie.name + "‘s faster times are:" + str(julie.top3()))
44 print(james.name + "‘s faster times are:" + str(james.top3()))
45 print(sarah.name + "‘s faster times are:" + str(sarah.top3()))
46 print(mikey.name + "‘s faster times are:" + str(mikey.top3()))

 

 

[Head First Python]6. 定制数据对象:打包代码与数据,布布扣,bubuko.com

[Head First Python]6. 定制数据对象:打包代码与数据

上一篇:Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)


下一篇:JavaScript高级程序设计58.pdf