此方法模拟酿造咖啡的行为。只有当机器有水,过滤器,咖啡渣,咖啡壶是空的,并且机器当前关闭时,才能进行此过程。 这个过程的结果是罐子变空了,咖啡壶设置的量与水箱中的量相同,机器保持打开,咖啡壶不干净。
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。你能让我们看一下构造函数来更多地理解这个方法。答案 0 :(得分:1)
好几件事情都跳了出来。
您没有在任何地方提高self.pot
级别或降低self.watertank
级别。
咖啡机永远不会开启,因此您的酿造if
声明永远不会被执行。
酿造if
语句会比较那些没有意义的事情。例如,为什么要将machine
与self.watertank
进行比较?这两个属性并不相关,因为一个是整数,另一个是布尔。
有几个属性可以/应该包含在每个对象的不同类中,例如Pot
的单独类和Watertank
的另一个类,其中包含original_level
等属性并有is_empty
等方法
为您的班级添加辅助方法以加载汤匙,安装过滤器,打开/关闭机器等等也是有用的补充,因此您的班级可以轻松与之互动。
我创建了一个永远不打算直接使用的Container
抽象类,而只是应该由另一个类扩展。此抽象类将为实现它的每个类保留基本功能。
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