美文网首页Python全栈工程师
28.2-习题温度转换和购物车实现

28.2-习题温度转换和购物车实现

作者: BeautifulSoulpy | 来源:发表于2019-12-12 16:51 被阅读0次

    社会上要想分出层次,只有一个办法,那就是竞争,你必须努力,否则结局就是被压在社会的底层!

    总结:

    1. 面向对象复杂问题非常难分解,所以我们必须从小的问题一步一步来;
    2. 每一道练习题出的都是有目的的,慎重对待;
    3. 解决问题: 重在设计(解决问题的思路),然后实现解决方案;

    4、实现温度的处理 (设计思路理解问题)

    实现华氏温度和摄氏温度的转换;
    ℃ = 5 × (℉ - 32) / 9
    ℉ = 9 × ℃ / 5 + 32
    完成以上转换后,增加与开氏温度的转换,K = ℃ + 273.15

    # 思路设计: 1 .类和实例兼顾 访问
    class Temperature:
        def __init__(self,t,unit='c'):
            self._c = None
            self._f = None
            self._k = None
            
            if unit.lower() == 'k':
                self._k = t
                self._c = self.k2c(t)
            elif unit.lower() == 'f':
                self._f = t
                self._c = self.f2c(t)
            else:
                self._c = t
        @property
        def c(self):   # 摄氏温度
            return self._c
        
        @property
        def f(self):  # 华氏温度
            if self._f is None:
                self._f = self.c2f(self._c)
            return self._f
        
        @property
        def k(self):  # 开式温度
            if self._k is None:
                self._k = self.c2k(self._c)
            return self._k
                
        # 温度转换
        @classmethod
        def c2f(self,c):    # 设计模式 1 ; 工具函数: 既可以 实例 又可以 工具;
            return 9 * c / 5 +32
        @classmethod
        def f2c(self,f):
            return (f - 32) * 5 / 9
        @classmethod
        def c2k(self,c):
            return c + 273.15
        @classmethod
        def k2c(self,k):
            return k - 273.15
        @classmethod
        def f2k(self,f):
            return self.c2k(self.f2c(f))
        @classmethod
        def k2f(self,k):
            return self.c2f(self.k2c(k))
        
    t = Temperature(30)
    print(t.c,t.k,t.f)
    print('-'*60)
    t1 = Temperature(0,'f')
    print(t1.c,t1.k,t1.f)
    #-------------------------------------------------------------------------------
    30 303.15 86.0
    ---------------------------------------------------------
    -17.77777777777778 255.3722222222222 0
        
    
    思路设计: 2
    
    
    

    5. 模拟购物车购物 (类该怎么设计;数据库设计——CMDB设计问题)

    思路:商品类:往容器中加 东西;

    # 思路:商品类:往容器中加 东西;
    
    class Color:  # 颜色的描述绝对不是一件简单的事情;
        RED = 0
        GREEN = 1
        BLACK = 2
        OTHER = 1000
        
    
    class Item:
        def __init__(self,price,type,mark,**kwargs):  # 确定的参数;不确定的参数用可变参数收集;
            #self.id = id   # 商品的ID非常重要;
            self.price = price
            self.type = type
            self.mark = mark
            self.__spec = kwargs
            # self.__spec.update(price=price,type=type,mark=mark)   使用小技巧;
            self.__dict__.update(kwargs)  # 小技巧:把不确定的参数更新到类属性中去;
        def __repr__(self):   # 显示出来给人看的;
            return '<Item {} {}>'.format(self.mark,self.color)  # 要求必须是字符串 出来;
            
    class Cart:
        def __init__(self):
            self._items = []
            
        def add_item(self,item:Item):
            self._items.append(item)
            
        def getallitems(self):
            return self._items
        
    item = Item(20,'001','Audi',color=Color.BLACK,weight=2)
    print(item)  # repr前后可以显示
    print(item.__dict__)  # 查看属性 ;
    print(item.color)  # 更新的属性可以用;
    
    cart = Cart()
    cart.add_item(item)
    item = Item(2,'p002','Hero',color = Color.RED)
    print(item.__dict__)
    
    cart.add_item(item)
    print(cart.getallitems())
    # ------------------------------------------------------------------------------
    <Item Audi 2>
    {'price': 20, 'type': '001', 'mark': 'Audi', '_Item__spec': {'color': 2, 'weight': 2}, 'color': 2, 'weight': 2}
    2
    {'price': 2, 'type': 'p002', 'mark': 'Hero', '_Item__spec': {'color': 0}, 'color': 0}
    [<Item Audi 2>, <Item Hero 0>]
    

    相关文章

      网友评论

        本文标题:28.2-习题温度转换和购物车实现

        本文链接:https://www.haomeiwen.com/subject/cxyzgctx.html