# containment vessel class Pot: def __init__(self): self.has_pot = True self.has_coffee = False self.warming_plate_on = False self.is_brewing = False def is_ready(self): return self.has_pot def start(self): self.is_brewing = True def pause(self): if self. self.warming_plate_on = False def resume(self): if self.has_coffee: self.warming_plate_on = True def done(self): self.is_brewing = False # hot water source class WaterSource: def __init__(self): # default to false later self.has_water = True self.boiler_on = False self.valve_open = True def is_ready(self): # "NotEmpty" = True return self.has_water def boiling(self): return self.boiler_on def start(self): self.boiler_on = True self.valve_open = False def pause(self): self.valve_open = True self.boiler_on = False def resume(self): self.valve_open = False self.boiler_on = True def done(self): self.boiler_on = False self.valve_open = True class CoffeeMaker: def __init__(self): self.pot = Pot() self.water_source = WaterSource() self.brew_light = False def push_brew_button(self): self.brew() def remove_pot(self): self.pot.has_pot = False def add_water(self): self.water_source.has_water = True def poll(self): # is pot on warmer plate if self.pot.is_ready(): if self.water_source.boiling(): self.pot.has_coffee = True self.water_source.valve_open = False # does pot have coffee if self.pot.has_coffee: self.pot.warming_plate_on = True else: self.pot.warming_plate_on = False # if not self.water_source.has_water: self.water_source.done() self.brew_light = True if not self.water_source.has_water and not self.pot.has_coffee and self.pot.is_brewing: self.pot.done() self.brew_light = False else: self.water_source.valve_open = True self.pot.has_coffee = False def brew(self): if not self.pot.is_ready() or not self.water_source.is_ready(): return False self.pot.start() while self.water_source.boiling(): self.poll() while self.pot.has_coffee(): self.poll()