Reviewed-on: Tirsvad-Udemy-100_days_of_code/015-coffee_machine#22
Coffee Machine
A console game from Udemy's 100 Days of Code: The Complete Python Pro Bootcamp (day 15). A virtual coffee machine serves espresso, latte and cappuccino. Pay with US coins (quarters, dimes, nickels and pennies). The machine checks its water, milk and coffee before it serves, refunds you if you pay too little and gives change if you pay too much.
What would you like? (espresso/latte/cappuccino): latte
Please insert coins.
How many quarters?: 10
How many dimes?: 0
How many nickels?: 0
How many pennies?: 0
Here is your latte. Enjoy!
- Python 3.13 or newer, no runtime dependencies.
- Type
reportto see the water, milk, coffee and money in the machine, andoffto switch the machine off. - The function names follow the assignment:
is_resource_sufficient,process_coins,is_transaction_successful,make_coffee. - Money is counted in whole cents inside the program, so change is never off by a rounding error.
Requirements
Set up
Create a local virtual environment in .venv, activate it, and upgrade pip.
Windows (PowerShell):
python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
Windows (Git Bash), Linux and macOS:
python -m venv .venv
source .venv/Scripts/activate # Linux/macOS: source .venv/bin/activate
python -m pip install --upgrade pip
The machine itself needs nothing more. To run the tests and the code checks, install the development tools:
python -m pip install -e ".[dev]"
Run the coffee machine
python -m coffee_machine
Type espresso, latte or cappuccino and press Enter, then enter the coins.
Type report for the machine's resources, or off to quit.
Run the tests
python -m pytest
Check the code style and types:
python -m ruff check src tests
python -m ruff format --check src tests
python -m mypy src tests
Build the source documentation
The source uses Doxygen comments. The HTML output goes to docs/doxygen/html.
doxygen Doxyfile
Project layout
| Path | Content |
|---|---|
src/coffee_machine/ |
The machine: main.py (the loop), constants.py (menu, coins, starting resources) |
tests/ |
pytest tests |
docs/ |
Planning and review documents (business case, plan, milestones) |
pyproject.toml |
Project configuration |
Doxyfile |
Doxygen configuration |
License
GNU Affero General Public License v3.0. See LICENSE.