From 8d1365777367f78b8a86f36b375fcd640ba243c9 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Sun, 4 Oct 2026 14:21:13 +0800 Subject: [PATCH 1/2] docs: complete documentation for Milestone 4 - Rewrite README.md with overview, requirements, setup, run, tests sections - Add docs/flowchart.md with Mermaid diagram and link to diagrams.net source - Update docs/plan.md to mark Milestone 4 as complete --- README.md | 84 ++++++++++++++++++++++++++++++++++++++++++++++- docs/flowchart.md | 17 ++++++++++ docs/plan.md | 6 ++-- 3 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 docs/flowchart.md diff --git a/README.md b/README.md index be5bc61..220ef59 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,84 @@ -# 009-the_secret_auction_program +# ๐Ÿš€ Secret Auction Program +A beginner-friendly Python program that runs a blind auction: bidders enter their name and bid one after another, the screen is cleared between bidders, and the highest bidder wins. + +## ๐Ÿ“š Table of Contents + +- [Overview](#-overview) +- [Requirements](#-requirements) +- [Setup](#-setup) +- [Run](#-run) +- [Tests](#-tests) +- [License](#-license) +- [Links](#-links) + +## ๐Ÿงญ Overview + +This is the Day 9 project of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp*. Each bidder enters a name and a bid, which are stored in a dictionary (name โ†’ bid). After each bidder the program asks whether there are more bidders and, if so, clears the screen so the next bidder cannot see earlier bids. When everyone has bid, the program announces the winner. + +See the [program flowchart](docs/flowchart.md) and the [plan and milestones](docs/plan.md). + +## ๐Ÿ“‹ Requirements + +- Python 3.13 or newer +- No runtime dependencies +- `pytest` for the tests (installed by the `dev` extra) +- [Doxygen](https://www.doxygen.nl/) (optional, to generate the API documentation) + +## ๐Ÿ› ๏ธ Setup + +Create and activate a local virtual environment, upgrade pip, then install the project with its development tools. + +Windows (PowerShell): + +```powershell +python -m venv .venv +.venv\Scripts\Activate.ps1 +python -m pip install --upgrade pip +python -m pip install -e ".[dev]" +``` + +Linux / macOS: + +```bash +python3 -m venv .venv +source .venv/bin/activate +python -m pip install --upgrade pip +python -m pip install -e ".[dev]" +``` + +## โ–ถ๏ธ Run + +With the virtual environment active: + +```bash +python -m secret_auction.main +``` + +or use the installed command: + +```bash +secret-auction +``` + +## ๐Ÿงช Tests + +```bash +python -m pytest +``` + +To generate the API documentation (output in `docs/doxygen/`): + +```bash +doxygen Doxyfile +``` + +## ๐Ÿ“„ License + +Licensed under the GNU Affero General Public License v3.0 โ€” see [LICENSE](LICENSE). + +## ๐Ÿ”— Links + +- [Repository](https://git.tirsystem.com/Tirsvad-Udemy-100_days_of_code/009-the_secret_auction_program) +- [Documentation](docs/) +- [Issue tracker](https://git.tirsystem.com/Tirsvad-Udemy-100_days_of_code/009-the_secret_auction_program/issues) diff --git a/docs/flowchart.md b/docs/flowchart.md new file mode 100644 index 0000000..19d083a --- /dev/null +++ b/docs/flowchart.md @@ -0,0 +1,17 @@ +# Blind Auction Flowchart + +Original chart: [diagrams.net](https://viewer.diagrams.net/?highlight=0000ff&edit=_blank&layers=1&nav=1&title=Blind%20Auction%20Flow%20Chart) + +```mermaid +flowchart TD + A([Start]) --> B[Print welcome message] + B --> C[bids = empty dictionary] + C --> D[/Ask name/] + D --> E[/Ask bid, repeat until valid/] + E --> F[Store bids name = bid] + F --> G{Other bidders?} + G -- yes --> H[Clear screen] --> D + G -- no --> I[Find highest bid] + I --> J[/Print winner/] + J --> K([End]) +``` diff --git a/docs/plan.md b/docs/plan.md index db193ee..c17d3c1 100644 --- a/docs/plan.md +++ b/docs/plan.md @@ -34,7 +34,7 @@ Work on ONE milestone at a time. Each milestone is one branch (`milestone/NN-nam ## Milestone 4 - Documentation (`milestone/04-docs`) -- [ ] `README.md` from the template (Overview, Requirements, Setup incl. creating/activating `.venv` and `python -m pip install --upgrade pip`, Run, Tests, License AGPL, Links) -- [ ] `docs/flowchart.md` (Mermaid plus link to the diagrams.net chart) -- [ ] Generate Doxygen docs if `doxygen` is installed +- [x] `README.md` from the template (Overview, Requirements, Setup incl. creating/activating `.venv` and `python -m pip install --upgrade pip`, Run, Tests, License AGPL, Links) +- [x] `docs/flowchart.md` (Mermaid plus link to the diagrams.net chart) +- [x] Generate Doxygen docs if `doxygen` is installed - Verify: README commands work verbatim; `.env` stays untracked -- 2.54.0 From 6a8ab289c6511acc2017e8c620a415ae98d64559 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Sun, 4 Oct 2026 14:21:31 +0800 Subject: [PATCH 2/2] docs: complete documentation for Milestone 4 - Rewrite README.md with overview, requirements, setup, run, tests sections - Add docs/flowchart.md with Mermaid diagram and link to diagrams.net source - Update docs/plan.md to mark Milestone 4 as complete --- README.md | 178 +++++++++++++++++++++------------------- docs/images/bidding.png | Bin 0 -> 11074 bytes docs/images/winner.png | Bin 0 -> 11598 bytes 3 files changed, 94 insertions(+), 84 deletions(-) create mode 100644 docs/images/bidding.png create mode 100644 docs/images/winner.png diff --git a/README.md b/README.md index 220ef59..caf1d3d 100644 --- a/README.md +++ b/README.md @@ -1,84 +1,94 @@ -# ๐Ÿš€ Secret Auction Program - -A beginner-friendly Python program that runs a blind auction: bidders enter their name and bid one after another, the screen is cleared between bidders, and the highest bidder wins. - -## ๐Ÿ“š Table of Contents - -- [Overview](#-overview) -- [Requirements](#-requirements) -- [Setup](#-setup) -- [Run](#-run) -- [Tests](#-tests) -- [License](#-license) -- [Links](#-links) - -## ๐Ÿงญ Overview - -This is the Day 9 project of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp*. Each bidder enters a name and a bid, which are stored in a dictionary (name โ†’ bid). After each bidder the program asks whether there are more bidders and, if so, clears the screen so the next bidder cannot see earlier bids. When everyone has bid, the program announces the winner. - -See the [program flowchart](docs/flowchart.md) and the [plan and milestones](docs/plan.md). - -## ๐Ÿ“‹ Requirements - -- Python 3.13 or newer -- No runtime dependencies -- `pytest` for the tests (installed by the `dev` extra) -- [Doxygen](https://www.doxygen.nl/) (optional, to generate the API documentation) - -## ๐Ÿ› ๏ธ Setup - -Create and activate a local virtual environment, upgrade pip, then install the project with its development tools. - -Windows (PowerShell): - -```powershell -python -m venv .venv -.venv\Scripts\Activate.ps1 -python -m pip install --upgrade pip -python -m pip install -e ".[dev]" -``` - -Linux / macOS: - -```bash -python3 -m venv .venv -source .venv/bin/activate -python -m pip install --upgrade pip -python -m pip install -e ".[dev]" -``` - -## โ–ถ๏ธ Run - -With the virtual environment active: - -```bash -python -m secret_auction.main -``` - -or use the installed command: - -```bash -secret-auction -``` - -## ๐Ÿงช Tests - -```bash -python -m pytest -``` - -To generate the API documentation (output in `docs/doxygen/`): - -```bash -doxygen Doxyfile -``` - -## ๐Ÿ“„ License - -Licensed under the GNU Affero General Public License v3.0 โ€” see [LICENSE](LICENSE). - -## ๐Ÿ”— Links - -- [Repository](https://git.tirsystem.com/Tirsvad-Udemy-100_days_of_code/009-the_secret_auction_program) -- [Documentation](docs/) -- [Issue tracker](https://git.tirsystem.com/Tirsvad-Udemy-100_days_of_code/009-the_secret_auction_program/issues) +# ๐Ÿš€ Secret Auction Program + +A beginner-friendly Python program that runs a blind auction: bidders enter their name and bid one after another, the screen is cleared between bidders, and the highest bidder wins. + +## ๐Ÿ“š Table of Contents + +- [Overview](#-overview) +- [Requirements](#-requirements) +- [Setup](#-setup) +- [Run](#-run) +- [Tests](#-tests) +- [License](#-license) +- [Links](#-links) + +## ๐Ÿงญ Overview + +This is the Day 9 project of Udemy's *100 Days of Code: The Complete Python Pro Bootcamp*. Each bidder enters a name and a bid, which are stored in a dictionary (name โ†’ bid). After each bidder the program asks whether there are more bidders and, if so, clears the screen so the next bidder cannot see earlier bids. When everyone has bid, the program announces the winner. + +See the [program flowchart](docs/flowchart.md) and the [plan and milestones](docs/plan.md). + +### ๐Ÿ–ผ๏ธ Screenshots + +Entering a bid: + +![Entering a bid](docs/images/bidding.png) + +Announcing the winner: + +![Announcing the winner](docs/images/winner.png) + +## ๐Ÿ“‹ Requirements + +- Python 3.13 or newer +- No runtime dependencies +- `pytest` for the tests (installed by the `dev` extra) +- [Doxygen](https://www.doxygen.nl/) (optional, to generate the API documentation) + +## ๐Ÿ› ๏ธ Setup + +Create and activate a local virtual environment, upgrade pip, then install the project with its development tools. + +Windows (PowerShell): + +```powershell +python -m venv .venv +.venv\Scripts\Activate.ps1 +python -m pip install --upgrade pip +python -m pip install -e ".[dev]" +``` + +Linux / macOS: + +```bash +python3 -m venv .venv +source .venv/bin/activate +python -m pip install --upgrade pip +python -m pip install -e ".[dev]" +``` + +## โ–ถ๏ธ Run + +With the virtual environment active: + +```bash +python -m secret_auction.main +``` + +or use the installed command: + +```bash +secret-auction +``` + +## ๐Ÿงช Tests + +```bash +python -m pytest +``` + +To generate the API documentation (output in `docs/doxygen/`): + +```bash +doxygen Doxyfile +``` + +## ๐Ÿ“„ License + +Licensed under the GNU Affero General Public License v3.0 โ€” see [LICENSE](LICENSE). + +## ๐Ÿ”— Links + +- [Repository](https://git.tirsystem.com/Tirsvad-Udemy-100_days_of_code/009-the_secret_auction_program) +- [Documentation](docs/) +- [Issue tracker](https://git.tirsystem.com/Tirsvad-Udemy-100_days_of_code/009-the_secret_auction_program/issues) diff --git a/docs/images/bidding.png b/docs/images/bidding.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5ce349213f7915806805c9a9b21548f37c1971 GIT binary patch literal 11074 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 JQp`B${{W|25Xb-k literal 0 HcmV?d00001 diff --git a/docs/images/winner.png b/docs/images/winner.png new file mode 100644 index 0000000000000000000000000000000000000000..cfbc5ec3fdc6d4127411d865278faaa587bd83ae GIT binary patch literal 11598 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 RtOgoR_Jh*<3JK%D{|9OT=