Interactive 42-style exam practice shell for Python exercises
Project description
examshell-python
Interactive terminal shell for practising 42-style Python exam tasks. Simulates the real exam environment — timed pressure, blind grading, sequential levels — or lets you work through exercises freely in practice mode.
Features
- Two modes — Real (exam simulation) and Practice (free training)
- Automatic grading —
grademeruns your solution against test cases and shows a results table - Multi-language task descriptions — each task is described in EN, DE, FR, ES, IT
- 14 tasks across 6 levels — from easy warm-ups to hard algorithmic challenges
- Clean terminal UI — built with Rich
Installation
Requires Python 3.10+.
pip install examshell-python
Or install from source:
git clone <repo-url>
cd examshell-python
pip install .
Usage
examshell42
On launch you choose a mode:
╭─ Choose your Exam mode ─╮
│ Real mode (1) │
│ Practice mode (2) │
╰─────────────────────────╯
Real mode
Simulates the actual exam. Tasks are drawn randomly per level. Each correct solution earns +16 points; reach 100 to pass.
| Command | Description |
|---|---|
grademe |
Check your solution |
status |
Show current task info again |
finish |
End the exam |
Practice mode
Work through all tasks in any order, retry freely, no score pressure.
| Command | Description |
|---|---|
grademe |
Check your solution |
list |
Show all available tasks |
choose |
Pick a task by number |
skip |
Move to the next task |
status |
Show current task info again |
finish |
End the practice session |
How it works
When a session starts, examshell creates a working directory (exam42/) with two sub-folders:
exam42/
├── subjects/
│ └── <task_name>/
│ ├── <task_name>.en.txt ← task description + signature + examples
│ ├── <task_name>.de.txt
│ └── ...
└── rendu/
└── <task_name>/
└── <task_name>.py ← put your solution here
Write your solution in rendu/<task_name>/<task_name>.py, then run grademe. The shell imports your file, executes each example against it, and prints a pass/fail table.
Tasks
| Level | Difficulty | Task |
|---|---|---|
| 1 | Easy | py_bracket_validator — validate bracket pairs ()[]{} |
| 1 | Easy | py_cryptic_sorter — custom sort logic |
| 2 | Easy | py_echo_validator — string validation |
| 2 | Easy | py_mirror_matrix — matrix mirroring |
| 3 | Medium | py_hidenp — hidden number problem |
| 3 | Medium | py_inter — intersection of sequences |
| 3 | Medium | py_number_base_converter — base conversion |
| 3 | Medium | py_pattern_tracker — pattern detection |
| 4 | Medium | py_anagram — anagram check |
| 4 | Medium | py_shadow_merge — merge operations |
| 4 | Medium | py_string_permutation_checker — permutation check |
| 5 | Hard | py_string_sculptor — string transformation |
| 5 | Hard | py_twist_sequence — sequence manipulation |
| 6 | Hard | py_whisper_cipher — cipher encoding |
Dependencies
Project structure
src/examshell/
├── __init__.py
├── __main__.py
├── main.py # CLI entry point, mode logic, UI screens
├── models.py # Pydantic models (Task, Description, Example)
├── task_generator.py # TaskManager: file creation, grading, task selection
├── config.py
└── data/
└── data.json # All task definitions
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file examshell_python-0.1.6.tar.gz.
File metadata
- Download URL: examshell_python-0.1.6.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf054587f3bb4922505a38488d773ce101cd48d70f426f0b9c4d957d04a6d0c3
|
|
| MD5 |
aacf8c53cbfeb94516b4f6dba199300d
|
|
| BLAKE2b-256 |
284e774bd95c14b829f72633d6f49ec38e5af2d13b853df04fa9aeec55cc989e
|
File details
Details for the file examshell_python-0.1.6-py3-none-any.whl.
File metadata
- Download URL: examshell_python-0.1.6-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29358d5ea701d651513b2123482865bc00bc8c29a061257b0c5b6dfbbeff9371
|
|
| MD5 |
3033bd32f64329fec68ade0b307b795c
|
|
| BLAKE2b-256 |
65e750267f9fdc0ff8fc02d3da776330115682398c5d7168816338780f4e1100
|