Python Ladder is a set of 150 Python exercises for people who know the basics but do not yet reach for the standard library naturally while solving problems.
It starts where syntax tutorials usually stop. Each problem introduces one tool or pattern, gives you a small reason to use it, and lets you run real Python in the browser.
The aim is simple: get comfortable writing the kind of Python that makes LeetCode questions, OAs, and everyday backend work less annoying.
The exercises are arranged as six levels of 25.
| Level | Focus |
|---|---|
| 01. Core Python | slicing, strings, lists, dictionaries, sets, comprehensions, sorting |
| 02. Built-ins | enumerate, zip, map, filter, sum, min, max, any, all |
| 03. Collections | Counter, defaultdict, deque, namedtuple, OrderedDict |
| 04. Itertools | product, permutations, combinations, chain, groupby, accumulate |
| 05. Algorithmic tools | heapq, bisect, functools, operator |
| 06. Professional Python | pathlib, typing, dataclasses, re, datetime, contextlib |
The last exercise, Mock OA: incident digest, combines parsing, frequency counting, heap ranking, and datetime work in one interview-style problem.
Each exercise has:
- a specific concept and problem prompt
- starter code with type hints
- a hint and reference solution
- a browser-based Python editor
- output, syntax errors, runtime errors, and test feedback
- links to relevant Python documentation where useful
The test suites are being expanded across the curriculum. If you find a missing edge case, a misleading prompt, or a solution that should not pass, please open an issue.
Python code runs through Pyodide in an isolated browser worker. Your drafts and progress stay in localStorage.
There is no account, no learner database, and no server storing your code.
Python tutorials explain features one by one. Coding platforms expect you to already know when to use them.
Python Ladder is a practice bridge between those two things. It is built around the standard-library habits that show up repeatedly in coding problems:
Counter(values)
sorted(rows, key=lambda row: (-row[1], row[0]))
zip(names, scores, strict=True)
heapq.nlargest(k, values)The curriculum is my take on the order in which those habits become useful. It can be improved.
If you have a better challenge idea, think an exercise belongs somewhere else, spot an unclear explanation, or find weak test coverage, open an issue. The goal is a sharper curriculum, not a static list written once and defended forever.
git clone https://github.com/RickyTheDude/python-mastery-ladder.git
cd python-mastery-ladder
npm install
npm run devOpen http://localhost:4321.
GPL-3.0-or-later