13-1.程序设计。请列举一些面对对象编程与传统旧的程序设计形式相比的先进之处。
没什么只有OO能做到,OO更多的是给了你一种能力,一种忽略细节的能力:忽略的越多,人类有限的智力就可以容纳越多越复杂的问题,并由此提高生产效率。
任何抽象的本质都是忽略,OO刚好是其中一种
13-2.函数和方法的比较。函数和方法之间的区别是什么?
从定义的角度上看,我们知道函数(function)就相当于一个数学公式,它理论上不与其它东西关系,它只需要相关的参数就可以。所以普通的在module中定义的称谓函数是很有道理的。
那么方法的意思就很明确了,它是与某个对象相互关联的,也就是说它的实现与某个对象有关联关系。这就是方法。虽然它的定义方式和函数是一样的。也就是说,在Class定义的函数就是方法
13-3.对类进行定制。写一个类,用来将浮点型值转换为金额。
import re class MoneyFmt(object): def __init__(self,value = 0.0): self.mvalue = value def dollarize(self): val = round(self.mvalue,2) strval = str(val).split('.')[0] strlen = len(strval) num = strlen%3 ele1 = strval[:num] ele2 = strval[num:] l = re.findall(r'.{3}', ele2) newstr = ele1 for i in l: if num == 0: newstr = str(i) num += 1 else: newstr = newstr + ',' + str(i) return '$' + newstr + '.' + str(val).split('.')[1] def __nonzero__(self): if self.mvalue == 0: return False else: return True def __str__(self): return self.dollarize() def __repr__(self): repr = str
13-7.数据类。提供一个time模块的接口,允许用户按照自己给定的时间格式来查看日期。你的类应该维护一个日期值,并用给定的时间创建一个实例,如果没有给出时间值,程序执行时会默认采用当前的系统时间。
import time class TimeFormat(object): def __init__(self,t = time.time()): self.mytime = t def update(self,t = time.time()): self.mytime = t def display(self,types = None): l = time.strftime('%Y-%m-%d',time.localtime(self.mytime)) ele = l.split('-') day = ele[2] mon = ele[1] year = ele[0] if types == 'MDY': print(mon + '/' + day + '/' + year[-2:]) elif types == 'MDYY': print(mon + '/' + day + '/' + year) elif types == 'DMY': print(day + '/' + mon + '/' + year[-2:]) elif types == 'DMYY': print(day + '/' + mon + '/' + year) elif types == 'MODYY': print(mon + ' ' + day + ', ' + year)
13-8.堆栈类。实现一个堆栈类,类中应该有push()和pop()方法,还有一个isempty()方法,如果堆栈是空的,返回布尔值1,否则返回0。
class Stack(object): def __init__(self,l = []): self.list = l def isempty(self): if len(self.list) == 0: return False else: return True def peek(self): if self.isempty() == False: print('堆为空') else: return self.list[-1] def push(self,ele): self.list.append(ele) def pop(self): if self.isempty() == False: print('堆为空') elif 'pop' in dir(self.list): pass else: self.list.remove(self.peek()) def viewstack(self): print(self.list)
13-9.队列类。实现一个队列类,这个类必须支持下面几种方法:enqueue()在队列的尾部加入一个新的元素,dequeue()在队列的头部取出一个元素,返回它并且把它从列表中删除。
略
13-10.堆栈和队列。编写一个类,定义一个能够同时具有堆栈和队列操作行为的数据结构。这个类和Perl语言中数组相像。需要实现四个方法。
略
13-11.电子商务。你需要为一家B2C零售商编写一个基础的电子商务引擎。你需要写一个针对顾客的类User,一个对应存货清单的类Item,还有一个对应购物车的类叫Cart。货物放到购物车里,顾客可以有多个购物车。同时购物车里可以有多个货物,包括多个同样的货物。