Python全栈工程师

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

2019-12-12  本文已影响0人  BeautifulSoulpy

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

总结:

  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>]
上一篇 下一篇

猜你喜欢

热点阅读