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. In Real mode, you then choose an available exam rank:
╭─ Choose your Exam mode ─╮
│ Real mode (1) │
│ Practice mode (2) │
╰─────────────────────────╯
At startup, examshell attempts to refresh ranks 03, 04, and 05 from the exam
sites and saves valid task data as rank*.json. If an update fails, existing
local task files remain available and the application continues offline.
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
pyjsparser≥ 2.7.1 — parse downloaded task datapydantic≥ 2.0 — task data modelsrich≥ 13.0 — terminal UIrequests≥ 2.0 — download task data
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
Metadata
Release files for examshell-python 0.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| examshell_python-0.1.9.tar.gz | 52.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| examshell_python-0.1.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 107.5 kB
Release files / examshell_python-0.1.9.tar.gz
| Download URL | examshell_python-0.1.9.tar.gz |
|---|---|
| Size | 52.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
284a51b1ee2cc4deaa65b9ac8971387cee8cee928897a10367a5385a4ddd65f8
|
|
BLAKE2b-256 checksum How to use checksums |
2d7f4aa0d5133725cfc7fc74fa2325bed8ccd168ad4c603cecf3ff8f454d7158
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|
Release files / examshell_python-0.1.9-py3-none-any.whl
| Download URL | examshell_python-0.1.9-py3-none-any.whl |
|---|---|
| Size | 54.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d27707703562f63c34e05384ba9a62202ab7339d211d79394aa6a0b525e0d5cc
|
|
BLAKE2b-256 checksum How to use checksums |
3e344f33373ea92fdc453d90ad5927829ccb08ca4f6c08ece369cfcdf38b25df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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}
|