HeadFirstPython---------(四)第六章(定制数据对象__打包代码与数据)
来源:互联网 发布:u盘win7装mac双系统 编辑:程序博客网 时间:2024/05/16 07:10
1、
实现下面的效果:
代码如下:
import osos.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_data1os.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 osos.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 sanitize1def 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 osimport get_coach_data1os.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 osimport sanitize1os.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 osos.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));
运行结果为:
阅读全文
0 0
- HeadFirstPython---------(四)第六章(定制数据对象__打包代码与数据)
- 定制数据对象--打包代码与数据
- HeadFirstPython---------(三)第五章(推倒数据__处理数据)
- HeadFirstPython---------(二)第四章,持久存储,数据保存到文件
- 【Head First Python-第六章-定制数据对象】学习笔记
- HeadFirstPython---------(五)第七章(Web开发__集成在一起)
- Head First Python(定制数据对象)
- Python初入门(六)(Head First Python 第六章 打包代码与数据 ,字典,类与继承)
- 第六讲 面向对象之四__重载与多态
- 定制数据对象
- python定制数据对象
- python系列学习四——定制数据对象
- Java 数据对象(JDO)介绍(四)
- Java 数据对象(JDO)介绍(四)
- 数据适配器:DataAdapter对象(四)
- 第六章 Realm及相关对象(四) PrincipalCollection
- 第六章 Realm及相关对象(四) AuthorizationInfo
- 第六章 Realm及相关对象(四) Subject
- 线程的信号量
- 纯css实现div中未知尺寸图片的垂直居中
- Redis 复制、Sentinel的搭建和原理说明
- 安装完jdk7后,再安装jdk8出现的问题 has value '1.8', but '1.7' is required.
- P1281 书的复制 dp
- HeadFirstPython---------(四)第六章(定制数据对象__打包代码与数据)
- TSLint: comment must start with a space (comment-format)
- ffmpeg对mp4文件进行ts切片并生成m3u8文件
- 的、得、的用法(汉字混淆解析)
- Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法
- 浏览器内核对比
- LeetCode: Combination Sum
- 怎么用短链接做压力测试
- 主动跳入同一个坑中