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
原创粉丝点击