From 4ee8623af85ade53da56b87507ebb2b189a3d38e Mon Sep 17 00:00:00 2001 From: Thomas Harvey Date: Mon, 23 Nov 2015 23:25:30 -0500 Subject: [PATCH] Added coffee maker and reordered exercises --- exercises/1-coffee-maker/README.md | 12 ++ .../__pycache__/coffee_maker.cpython-34.pyc | Bin 0 -> 1030 bytes exercises/1-coffee-maker/coffee_maker.py | 108 ++++++++++++++++++ .../README.md | 0 .../vigenere_controller.py | 0 .../vigenere_models.py | 0 .../vigenere_views.py | 0 .../README.md | 0 .../bank_controller.py | 0 .../bank_models.py | 0 .../bank_views.py | 0 .../create_db.py | 0 .../README.md | 0 .../classes.py | 0 .../create_db.py | 0 .../intersect.py | 0 .../majors.py | 0 17 files changed, 120 insertions(+) create mode 100644 exercises/1-coffee-maker/README.md create mode 100644 exercises/1-coffee-maker/__pycache__/coffee_maker.cpython-34.pyc create mode 100644 exercises/1-coffee-maker/coffee_maker.py rename exercises/{3-vigenere-cipher => 2-vigenere-cipher}/README.md (100%) rename exercises/{3-vigenere-cipher => 2-vigenere-cipher}/vigenere_controller.py (100%) rename exercises/{3-vigenere-cipher => 2-vigenere-cipher}/vigenere_models.py (100%) rename exercises/{3-vigenere-cipher => 2-vigenere-cipher}/vigenere_views.py (100%) rename exercises/{1-bank-software => 3-bank-software}/README.md (100%) rename exercises/{1-bank-software => 3-bank-software}/bank_controller.py (100%) rename exercises/{1-bank-software => 3-bank-software}/bank_models.py (100%) rename exercises/{1-bank-software => 3-bank-software}/bank_views.py (100%) rename exercises/{1-bank-software => 3-bank-software}/create_db.py (100%) rename exercises/{2-optimizing-queries => 4-optimizing-queries}/README.md (100%) rename exercises/{2-optimizing-queries => 4-optimizing-queries}/classes.py (100%) rename exercises/{2-optimizing-queries => 4-optimizing-queries}/create_db.py (100%) rename exercises/{2-optimizing-queries => 4-optimizing-queries}/intersect.py (100%) rename exercises/{2-optimizing-queries => 4-optimizing-queries}/majors.py (100%) diff --git a/exercises/1-coffee-maker/README.md b/exercises/1-coffee-maker/README.md new file mode 100644 index 0000000..039c6e5 --- /dev/null +++ b/exercises/1-coffee-maker/README.md @@ -0,0 +1,12 @@ +## Coffee Maker + +You will be designing a software implementation of a simple coffee maker. The following hardware needs to be monitored. Write the methods for: + +* The heating element for the boiler. It can be turned on or off. +* The heating element for the warmer plate. It can be turned on or off. +* The sensor for the warmer plate. It has three states: warmerEmpty, potEmpty, potNotEmpty. +* A sensor for the boiler, which determines whether there is water present. It has two states: boilerEmpty or boilerNotEmpty. +* The Brew button. This is a momentary button that starts the brewing cycle. It has an indicator that lights up when the brewing cycle is over and the coffee is ready. +* A pressure-relief valve that opens to reduce the pressure in the boiler. The drop in pressure stops the flow of water to the filter. It can be opened or closed. + +You should do this OO. Think about the flow of information and the flow of state. Your methods should not have to worry about each other's implementations, just their interface. Take your time to make sure everything is interacting with each other as they should. This is an exercise in design, not code. If you design well, the coding will be easy. diff --git a/exercises/1-coffee-maker/__pycache__/coffee_maker.cpython-34.pyc b/exercises/1-coffee-maker/__pycache__/coffee_maker.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99f554f0f5812b3c302270393045be9f89070ce4 GIT binary patch literal 1030 zcmb_a&2G~`5Z?74Y3dXSB%T2yxfb+_P*sq)MW9ke%4N006KZ0|Vb*PM)f>DFZ^PMF z?mPe|X2vqgA%zWp6f#`o_>S3k89319Vw)U02p!TfBufyJ#E8W_5WBE_-8(vQ1|-uCf`x%A93eF{E3P&eGhr zFEaQFxF{TXKTj9+atV-Db_JOAf)U|#({>|cignQ#6YxAtls*dXVjB5$FzugxLasFU zXW78YmywY-lW1hT=;3rSR8JxjyHVi`g3a48Nsj%M?#m5^X%ccUa-Po9_&TmTQ zV`IMD*s{0a0}90v6W-en;X24TaT_vItm8;D|K&e~GlC8GZ{^^R_>g$AntAlGE=s`t zE0Vz;4y_X$`tC$3?gxYimCwlg=mEJ*^z;NQq^}pd|5AG|0iko?S{1;%Ux)}ff literal 0 HcmV?d00001 diff --git a/exercises/1-coffee-maker/coffee_maker.py b/exercises/1-coffee-maker/coffee_maker.py new file mode 100644 index 0000000..aadf3fc --- /dev/null +++ b/exercises/1-coffee-maker/coffee_maker.py @@ -0,0 +1,108 @@ +# 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() + + + + + diff --git a/exercises/3-vigenere-cipher/README.md b/exercises/2-vigenere-cipher/README.md similarity index 100% rename from exercises/3-vigenere-cipher/README.md rename to exercises/2-vigenere-cipher/README.md diff --git a/exercises/3-vigenere-cipher/vigenere_controller.py b/exercises/2-vigenere-cipher/vigenere_controller.py similarity index 100% rename from exercises/3-vigenere-cipher/vigenere_controller.py rename to exercises/2-vigenere-cipher/vigenere_controller.py diff --git a/exercises/3-vigenere-cipher/vigenere_models.py b/exercises/2-vigenere-cipher/vigenere_models.py similarity index 100% rename from exercises/3-vigenere-cipher/vigenere_models.py rename to exercises/2-vigenere-cipher/vigenere_models.py diff --git a/exercises/3-vigenere-cipher/vigenere_views.py b/exercises/2-vigenere-cipher/vigenere_views.py similarity index 100% rename from exercises/3-vigenere-cipher/vigenere_views.py rename to exercises/2-vigenere-cipher/vigenere_views.py diff --git a/exercises/1-bank-software/README.md b/exercises/3-bank-software/README.md similarity index 100% rename from exercises/1-bank-software/README.md rename to exercises/3-bank-software/README.md diff --git a/exercises/1-bank-software/bank_controller.py b/exercises/3-bank-software/bank_controller.py similarity index 100% rename from exercises/1-bank-software/bank_controller.py rename to exercises/3-bank-software/bank_controller.py diff --git a/exercises/1-bank-software/bank_models.py b/exercises/3-bank-software/bank_models.py similarity index 100% rename from exercises/1-bank-software/bank_models.py rename to exercises/3-bank-software/bank_models.py diff --git a/exercises/1-bank-software/bank_views.py b/exercises/3-bank-software/bank_views.py similarity index 100% rename from exercises/1-bank-software/bank_views.py rename to exercises/3-bank-software/bank_views.py diff --git a/exercises/1-bank-software/create_db.py b/exercises/3-bank-software/create_db.py similarity index 100% rename from exercises/1-bank-software/create_db.py rename to exercises/3-bank-software/create_db.py diff --git a/exercises/2-optimizing-queries/README.md b/exercises/4-optimizing-queries/README.md similarity index 100% rename from exercises/2-optimizing-queries/README.md rename to exercises/4-optimizing-queries/README.md diff --git a/exercises/2-optimizing-queries/classes.py b/exercises/4-optimizing-queries/classes.py similarity index 100% rename from exercises/2-optimizing-queries/classes.py rename to exercises/4-optimizing-queries/classes.py diff --git a/exercises/2-optimizing-queries/create_db.py b/exercises/4-optimizing-queries/create_db.py similarity index 100% rename from exercises/2-optimizing-queries/create_db.py rename to exercises/4-optimizing-queries/create_db.py diff --git a/exercises/2-optimizing-queries/intersect.py b/exercises/4-optimizing-queries/intersect.py similarity index 100% rename from exercises/2-optimizing-queries/intersect.py rename to exercises/4-optimizing-queries/intersect.py diff --git a/exercises/2-optimizing-queries/majors.py b/exercises/4-optimizing-queries/majors.py similarity index 100% rename from exercises/2-optimizing-queries/majors.py rename to exercises/4-optimizing-queries/majors.py