Python核心编程第二版 第十三章课后答案

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。货物放到购物车里,顾客可以有多个购物车。同时购物车里可以有多个货物,包括多个同样的货物。

原文地址:https://www.cnblogs.com/jiaoyang77/p/7499832.html