Find the bug. Fix it. Run it. That's how Python skills are built.

Python Debug Dojo sharpens your debugging instincts by presenting intentionally broken Python code for you to fix — then running it right on your iPhone so you can verify the result. Powered by Pyodide (WebAssembly Python) inside a WKWebView, no server or internet connection is needed for execution. A hint system and instant pass/fail feedback keep each session efficient and satisfying.

Download on the App Store

Get it on the App Store

Download on the App Store

Fix Buggy Code and Run It

Each problem presents a snippet of Python code with an intentional bug. Edit the code in the built-in editor, tap Run, and Pyodide executes it on your device. The output is compared against the expected result and you get an instant pass or fail — no guessing, no waiting.

Real Python Execution on iPhone

Pyodide — a WebAssembly port of CPython — runs inside a WKWebView embedded in the app. Python executes locally on your device with no server calls and no internet connection required for code execution. The Run button activates automatically once the engine finishes loading.

Hints and Instant Feedback

Stuck? Tap the Hint button to see an explanation of the bug type, the fix strategy, and relevant Python syntax notes. After every run, a large pass (circle) or fail (X) overlay appears on screen for unambiguous feedback. Tap the overlay to dismiss it and keep going.

Premium: Hundreds of Problems, No Ads

The free plan gives you access to the first 20 problems. A monthly Premium subscription unlocks the full library of hundreds of debugging challenges and removes all banner ads. Your progress is saved automatically so you always pick up where you left off.

Read the problem, edit the code, tap Run.

The problem description appears at the top of the screen. Below it, the code editor loads a Python snippet with one or more intentional bugs in a Menlo monospace font with autocorrect disabled. Edit the code, tap Run, and the output appears in the results panel. If the output matches the expected value exactly, a green circle overlay marks it correct. Tap the overlay to move to the next problem.

CODE EDIT
PYODIDE

Pyodide runs Python locally — no server, no latency.

The app bundles Pyodide via a custom WKURLSchemeHandler that serves local web assets. Python runs inside the WKWebView with Cross-Origin isolation headers set correctly for SharedArrayBuffer support. The JavaScript bridge posts execution output back to Swift via a WKScriptMessageHandler. The Run button stays disabled until the engine signals it is ready, then enables immediately for use.

Hints explain the bug without giving away the answer.

Each problem includes an explanation that describes the type of bug, the thinking process for finding it, and the Python concept involved. The hint appears in an alert dialog so you can read it and immediately return to editing. If you want to start fresh after reading the hint, the Reset button restores the original buggy code in one tap.

HINT
PROGRESS

Progress saves automatically between sessions.

The index of the last problem you worked on is stored in UserDefaults. Reopen the app and you land on the same problem where you left off. Use the previous and next navigation buttons in the header to move between problems at any time. The current problem number and title display in the header so you always know where you are in the set.

Find the bug. Fix it. Run it.
Repeat until debugging feels effortless.

Four Steps to Your First Solved Problem

1
Read the problem description

The problem statement at the top of the screen describes what the code is supposed to do. Read it carefully — knowing the expected behavior is the first step to spotting what's wrong with the code.

2
Find and fix the bug in the editor

Look through the Python code in the editor and identify the bug. Edit the code to correct it. Autocorrect and autocapitalization are disabled so you can type Python syntax cleanly.

3
Tap Run and check the result

Tap the Run button (blue when the engine is ready). The output appears in the results panel below. A large circle overlay means the output matched — a large X means it didn't. Tap the overlay to dismiss it.

Get it on the App Store

Download on the App Store

What Users Are Saying

"When I first started learning Python, error messages felt like a foreign language. Practicing with Debug Dojo — fixing real (intentional) bugs and seeing the output change — trained me to read errors and know immediately where to look. Running code on the phone itself makes it feel real."

— python_beginner_tanaka

"I do one or two problems during my commute every day. The hints are well written — they point you in the right direction without just handing you the answer. With hundreds of problems in the Premium library I haven't run out of challenges yet."

— commute_learner_sato

"Debugging someone else's code is genuinely harder than writing your own, and this app makes that feel like a game. The big pass/fail overlay after each run is satisfying when you get it right. Great way to build instincts that actually transfer to real projects."

— debug_trainee_yamada

Frequently Asked Questions

Find answers to common questions below.

QThe Run button is grayed out and I can't tap it.

AThe Pyodide Python engine is still initializing. Once it finishes loading, the Run button turns blue and becomes tappable. The first launch may take a few extra seconds. If the button stays gray for a long time, check your internet connection — the engine assets may need to download on first use.
QMy output looks correct but it's marked as wrong.

AThe judgment compares your output to the expected value as exact strings, including whitespace and newlines. Check the output panel carefully for trailing spaces, extra blank lines, or minor formatting differences. Even a single extra character will result in a mismatch.
QDoes the app remember where I left off?

AYes. The index of the last problem you were on is saved automatically. When you reopen the app, it loads that problem so you can continue without manually navigating back.
QHow many problems are available in the free plan?

AThe first 20 problems are free. Problems 21 and beyond require a Premium subscription. Premium also removes all banner ads. You can subscribe from the settings screen — tap the gear icon in the top-right corner.
QHow do I cancel my Premium subscription?

AOpen Settings → your Apple ID → Subscriptions, find Python Debug Dojo, and select Cancel Subscription. Cancel at least 24 hours before the current billing period ends to avoid being charged for the next period. Premium access remains active until the end of the period you already paid for.

Get it on the App Store

Download on the App Store
App Gallery