HeadFirstPython---------(四)第六章(定制数据对象

xiaoxiao2021-02-28  56

1、

实现下面的效果:

代码如下:

import os os.chdir("D:/pythontest/HeadFirstPython/chapter6"); def sanitize(time_string): if '-' in time_string: splitter='-'; elif ':' in time_string: splitter=':'; else: return(time_string); (mins,secs)=time_string.split(splitter); return (mins+'.'+secs); def get_coach_data(filename): try: with open(filename) as f: data=f.readline(); return(data.strip().split(',')); except IOError as ioerr: print('File error:'+str(ioerr)); return(None); try: james=get_coach_data('james2.txt'); julie=get_coach_data('julie2.txt'); mikey=get_coach_data('mikey2.txt'); sarah=get_coach_data('sarah2.txt'); (james_name,james_dob)=james.pop(0),james.pop(0);# (julie_name,julie_dob)=julie.pop(0),julie.pop(0); (mikey_name,mikey_dob)=mikey.pop(0),mikey.pop(0); (sarah_name,sarah_dob)=sarah.pop(0),sarah.pop(0); print(james_name+"'s fastest times are:"+str(sorted(set([sanitize(time_string) for time_string in james]))[0:3])); print(julie_name+"'s fastest times are:"+str(sorted(set([sanitize(time_string) for time_string in julie]))[0:3])); print(mikey_name+"'s fastest times are:"+str(sorted(set([sanitize(time_string) for time_string in mikey]))[0:3])); print(sarah_name+"'s fastest times are:"+str(sorted(set([sanitize(time_string) for time_string in sarah]))[0:3])); except IOError as err: print("File error"+str(err));2、改善,使用字典关联数据:

字典这是一个内置的数据结构(内置于Python中),允许将数据与键而不是数字关联。这样可以使内存中的数据与实际数据的结构保持一致。

代码如下:

sanitize1.py中的代码如下:

def sanitize(time_string): if '-' in time_string: splitter='-'; elif ':' in time_string: splitter=':'; else: return(time_string); (mins,secs)=time_string.split(splitter); return (mins+'.'+secs);

get_coach_data1.py中的代码如下

def get_coach_data(filename): try: with open(filename) as f: data=f.readline(); return(data.strip().split(',')); except IOError as ioerr: print('File error:'+str(ioerr)); return(None);read.py主程序代码如下:

import os import sanitize1 import get_coach_data1 os.chdir("D:/pythontest/HeadFirstPython/chapter6"); try: james=get_coach_data1.get_coach_data('james2.txt'); julie=get_coach_data1.get_coach_data('julie2.txt'); mikey=gget_coach_data1.et_coach_data('mikey2.txt'); sarah=get_coach_data1.get_coach_data('sarah2.txt'); #利用字典的表达形式 james_data={}; james_data['Name']=james.pop(0); james_data['DOB']=james.pop(0); james_data['Times']=james; print(james_data['Name']+"'s fastest times are: "+str(sorted(set([sanitize1.sanitize(t)for t in james_data['Times']]))[0:3])); julie_data={}; julie_data['Name']=julie.pop(0); julie_data['DOB']=julie.pop(0); julie_data['Times']=julie; print(julie_data['Name']+"'s fastest times are: "+str(sorted(set([sanitize1.sanitize(t)for t in julie_data['Times']]))[0:3])); mikey_data={}; mikey_data['Name']=mikey.pop(0); mikey_data['DOB']=mikey.pop(0); mikey_data['Times']=mikey; print(mikey_data['Name']+"'s fastest times are: "+str(sorted(set([sanitize1.sanitize(t)for t in mikey_data['Times']]))[0:3])); sarah_data={}; sarah_data['Name']=sarah.pop(0); sarah_data['DOB']=sarah.pop(0); sarah_data['Times']=sarah; print(sarah_data['Name']+"'s fastest times are: "+str(sorted(set([sanitize1.sanitize(t)for t in sarah_data['Times']]))[0:3])); 实验结果为:

3、对2中代码的进一步 的改善。(针对的是重复性代码)

sanitize1.py中的代码为:

import os os.chdir("D:/pythontest/HeadFirstPython/chapter5"); def sanitize(time_string): if '-' in time_string: splitter='-'; elif ':' in time_string: splitter=':'; else: return(time_string); (mins,secs)=time_string.split(splitter); return (mins+'.'+secs);get_coach_data1.py中的代码是:

import sanitize1 def get_coach_data(filename): try: with open(filename) as f: data=f.readline(); templ=data.strip().split(',') name_data={}; name_data['Name']=templ.pop(0); name_data['DOB']=templ.pop(0); name_data['Times']=str(sorted(set([sanitize1.sanitize(t) for t in templ]))[0:3]); return name_data; except IOError as ioerr: print('File error:'+str(ioerr)); return(None); chapter6.py主程序的代码为:

import os import get_coach_data1 os.chdir("D:/pythontest/HeadFirstPython/chapter6"); try: james=get_coach_data1.get_coach_data('james2.txt'); julie=get_coach_data1.get_coach_data('julie2.txt'); mikey=get_coach_data1.get_coach_data('mikey2.txt'); sarah=get_coach_data1.get_coach_data('sarah2.txt'); print(james['Name']+"'s fastest times are:"+james['Times']); print(julie['Name']+"'s fastest times are:"+julie['Times']); print(mikey['Name']+"'s fastest times are:"+mikey['Times']); print(sarah['Name']+"'s fastest times are:"+sarah['Times']); except IOError as err: print("File error"+str(err));运行结果为:

4、类的应用:

代码如下:

import os import sanitize1 os.chdir("D:/pythontest/HeadFirstPython/chapter6"); class Athlete: def __init__(self,a_name,a_dob=None,a_times=[]): self.name=a_name; self.dob=a_dob; self.times=a_times; def top3(self): return (sorted(set([sanitize1.sanitize(t) for t in self.times]))[0:3]); def get_coach_data(filename): try: with open(filename) as f: data=f.readline(); templ=data.strip().split(',') return (Athlete(templ.pop(0),templ.pop(0),templ)); except IOError as ioerr: print('File error:'+str(ioerr)); return(None); try: james=get_coach_data('james2.txt'); julie=get_coach_data('julie2.txt'); mikey=get_coach_data('mikey2.txt'); sarah=get_coach_data('sarah2.txt'); print(james.name+"'s fastest times are:"+str(james.top3())); print(julie.name+"'s fastest times are:"+str(julie.top3())); print(mikey.name+"'s fastest times are:"+str(mikey.top3())); print(sarah.name+"'s fastest times are:"+str(sarah.top3())); except IOError as err: print("File error"+str(err));运行结果为:

5、继承内置类的子类:

代码如下:

import os os.chdir("D:/pythontest/HeadFirstPython/chapter6"); def sanitize(time_string): if '-' in time_string: splitter='-'; elif ':' in time_string: splitter=':'; else: return(time_string); (mins,secs)=time_string.split(splitter); return (mins+'.'+secs); class AthleteList(list): def __init__(self,a_name,a_dob=None,a_times=[]): list.__init__([]); self.name=a_name; self.dob=a_dob; self.extend(a_times); def top3(self): return (sorted(set([sanitize(t) for t in self]))[0:3]); def get_coach_data(filename): try: with open(filename) as f: data=f.readline(); templ=data.strip().split(','); return (AthleteList(templ.pop(0),templ.pop(0),templ)); except IOError as ioerr: print('File error:'+str(ioerr)); return(None); try: james=get_coach_data('james2.txt'); julie=get_coach_data('julie2.txt'); mikey=get_coach_data('mikey2.txt'); sarah=get_coach_data('sarah2.txt'); print(james.name+"'s fastest times are:"+str(james.top3())); print(julie.name+"'s fastest times are:"+str(julie.top3())); print(mikey.name+"'s fastest times are:"+str(mikey.top3())); print(sarah.name+"'s fastest times are:"+str(sarah.top3())); except IOError as err: print("File error"+str(err)); 运行结果为:

转载请注明原文地址: https://www.6miu.com/read-71790.html

最新回复(0)