You appear to be using an ad blocker. We rely on advertising to fund this free service.
Please disable your ad blocker for our site to continue.
How to disable your ad blocker:
Click the AdBlock icon in your browser extensions.
Select "Don't run on pages on this site".
Click "Exclude".
Screenshot: AdBlock disable instructions
Click the AdBlock Plus icon in your browser extensions.
Click the blue toggle switch next to "This website" so it turns gray.
Screenshot: AdBlock Plus disable instructions
Click the uBlock Origin icon in your browser extensions.
Click the large blue power button. It will turn gray.
Screenshot: uBlock Origin disable instructions
Find your ad blocker icon (usually in the top right corner).
Follow its specific instructions to disable it for this site (often called "whitelisting" or "pausing").
Check DNS / Router Settings
Ad blocking might be happening at your network level (DNS settings on your phone/router or a network-wide blocker like Pi-hole).
Check your device's Wi-Fi / network settings for custom DNS servers (like Cloudflare, Google DNS, or AdGuard DNS). Try changing to your ISP's default DNS or another standard provider.
Check your router's configuration page (often 192.168.1.1 or similar) for DNS or parental control settings that might be blocking ads.
If using a network-wide blocker (like Pi-hole), consult its documentation to whitelist this site.
Dict comprehension plus merging with the ** unpacking operator. The pipe merge syntax trips up Python 2 habits.
Part 1 of 1
counts = {word: text.split().count(word) for word in set(text.split())} result = {**defaults, **counts, 'total': len(text.split())}
WPM0
Accuracy100%
Progress0%
Streak0🔥
SpeedTarget: 32 WPM
▼
⏱️Start typing...
⚠️Continue typing or resetting in 3...
🏆NEW BEST!
Module Imports
A realistic import block. Typing from...import...as patterns precisely matters when you work with linters.
Part 1 of 1
from datetime import datetime, timedelta from typing import Optional, List, Dict import os import json from pathlib import Path
WPM0
Accuracy100%
Progress0%
Streak0🔥
SpeedTarget: 35 WPM
▼
⏱️Start typing...
⚠️Continue typing or resetting in 3...
🏆NEW BEST!
Context Manager
File I/O with a with block. Encoding parameter and exception handling included.
Part 1 of 1
with open(config_path, 'r', encoding='utf-8') as f: config = json.load(f) db_url = config.get('database', {}).get('url', os.environ['DATABASE_URL'])
WPM0
Accuracy100%
Progress0%
Streak0🔥
SpeedTarget: 30 WPM
▼
⏱️Start typing...
⚠️Continue typing or resetting in 3...
🏆NEW BEST!
Type Hints
A function with complex type annotations. Optional, List, and Union are things you type constantly in typed Python.
Part 1 of 1
def process_batch(items: List[Dict[str, any]], batch_size: int = 100) -> Optional[List[str]]: if not items: return None return [item['id'] for item in items[:batch_size]]