创造咖啡课。重要的功能是__init__,方法模拟咖啡酿造

时间:2018-03-21 14:05:20

标签: python computer-science

此方法模拟酿造咖啡的行为。只有当机器有水,过滤器,咖啡渣,咖啡壶是空的,并且机器当前关闭时,才能进行此过程。 这个过程的结果是罐子变空了,咖啡壶设置的量与水箱中的量相同,机器保持打开,咖啡壶不干净。

class Coffee:
    def __init__(self):
        self.refill= 20
        self.watertank=20
        self.filter= False
        self.on=False
        self.spoons=4
        self.machine=False
        self.pot= 0
def brew(self): # And as requirment
        if (machine == self.watertank and machine == self.filter \
        and machine == self.spoons and machine == self.pot \
        and machine == self.on):
            print("The coffee is brewing")
            while self.on == True:
                if self.watertank < 20:
                    if self.pot==self.watertank:
                        return False

功能必须有效。我对我正在尝试做的解释是我在构造函数机器中创建变量以定义为true。如果machine为True,则过滤True,spoons == 4,pot == 0,self.on为False。结果将是

水箱== 0,锅==水箱,self.on ==真,锅== 0

你能看看我的功能吗?我能做些什么改变?我添加了所有命令而不是And。你能让我们看一下构造函数来更多地理解这个方法。

1 个答案:

答案 0 :(得分:1)

好几件事情都跳了出来。

  1. 您没有在任何地方提高self.pot级别或降低self.watertank级别。

  2. 咖啡机永远不会开启,因此您的酿造if声明永远不会被执行。

  3. 酿造if语句会比较那些没有意义的事情。例如,为什么要将machineself.watertank进行比较?这两个属性并不相关,因为一个是整数,另一个是布尔。

  4. 有几个属性可以/应该包含在每个对象的不同类中,例如Pot的单独类和Watertank的另一个类,其中包含original_level等属性并有is_empty等方法

  5. 为您的班级添加辅助方法以加载汤匙,安装过滤器,打开/关闭机器等等也是有用的补充,因此您的班级可以轻松与之互动。

  6. 我创建了一个永远不打算直接使用的Container抽象类,而只是应该由另一个类扩展。此抽象类将为实现它的每个类保留基本功能。

  7. import abc
    
    class Container (object):
        __meta__ = abc.ABCMeta
    
        level           = None
        original_level  = None
    
        @abc.abstractmethod
        def increase (self, amt=1):
            self.level = self.level + amt
    
        @abc.abstractmethod
        def decrease (self, amt=1):
            self.level = self.level - amt
    
        @abc.abstractmethod
        def is_empty(self):
            return self.level == 0
    
    
    class Pot (Container):
        def __init__(self, level):
            self.level          = level
            self.original_level = level
    
    class Watertank (Container):
        def __init__(self, level):
            self.level          = level
            self.original_level = level
    
    class Coffee:
        def __init__(self):
            self.refill     = 20
            self.watertank  = Watertank(20)
            self.pot        = Pot(0)    
            self.filter     = False
            self.on         = False
            self.spoons     = 0
    
        def brew(self): # And as requirment
            if self.is_ready():
                print("The coffee is brewing...")
    
                while self.on :             
                    self.watertank.decrease( 1 )
                    self.pot.increase( 1 )
    
                    if self.pot.level == self.watertank.original_level and self.watertank.is_empty() :
                        print("The coffee has been brewed. Enjoy!")
                        break
            else :
                print("Sorry, the brewer is not ready to brew.")
                self.ready_check()
    
        def ready_check(self):
            if self.watertank.level == 0 :
                print( "The Watertank is not filled." )
            if not self.filter :
                print( "A filter has not been loaded." )
            if self.spoons == 0 :
                print( "There are no spoons of coffee mix." )
            if self.pot.level > 0 :
                print( "The Pot is not empty." )
            if not self.on:
                print( "The brewer is not turned on." )
    
        def is_ready(self):
            return  self.watertank.level > 0 \
                and self.filter \
                and self.spoons > 0\
                and self.pot.level == 0 \
                and self.on
    
        def add_spoons(self, amt=1):
            self.spoons = self.spoons + amt
    
        def install_filter(self):
            self.filter = True
            print("A filter has been installed.")
    
        def turn_on (self):
            self.on = True
            print("The brewer is now on!")
    
        def turn_off (self):
            self.on = False
            print("The brewer is now off!")
    
    
    if __name__ == "__main__":
        brewer = Coffee()
        brewer.install_filter()
        brewer.add_spoons(4)
        brewer.turn_on()
    
        brewer.brew()
    

    另外,我非常无聊并继续探索这个用例。我添加了一位咖啡师,他可以通过询问有关偏好的几个问题来个性化您的咖啡订单。这是要点:https://gist.github.com/sadmicrowave/73541a76f8133be09c8318c0770c5343