DynamicVibePython learning
How to study · reference & help

One lesson at a time

Read the idea, then follow the named exercise steps. On a phone, use Idea, Code and Output to switch views. Review days begin with recall before the rebuild. A self-review mark is not a scored answer.

Run, inspect, repair

Run loads Python in your browser on the first use, so you need an internet connection. Read Output and the check result. Stop interrupts a run; it keeps your code. Reset restores the selected starter, replacing that exercise’s draft. Use an authored hint before asking for help.

Keep your work

Code drafts, progress and Notes save on this device when browser storage is available. They do not sync through your login. Use Backup & records above to download saved learning records, preview an import or undo the latest import. Copy unsaved text first; clearing browser data can remove local work. A save warning means you should copy your work before leaving.

Practice files and reports

Each browser Run starts in a fresh temporary workspace. A sample file exists only when that run’s code creates it; these are not your computer’s files. On report tasks, use Preview to inspect the actual text and Download to request a copy before another Run, Reset, exercise change or leaving. Reports do not save through tutor login. Read files and write reports.

Get tutoring when you need it

Lessons and checkpoints do not need tutor login. Unlock the tutor through Training’s shared tutor access, then use its return link to come back here. Your question is only sent when you press Send. Do not paste passwords or private production data.

Python words in plain language

Assignment and type
frames = 96 binds a name to an integer. "96" is text, not the same numeric value. Values and names.
List and index
A list keeps items in order. Positions start at zero; the final nonnegative index is length minus one. List lookups.
Loop and indentation
A for loop processes each item. Indentation groups its repeated statements; a statement outside the block runs separately. Loops.
Parameter, argument and Return
A parameter names an input in a definition; an argument supplies its value in a call. Return gives a result to the caller; print displays it. A function that only prints returns None. Functions.
Dictionary and schema
A dictionary labels values with keys. A schema states the required fields and types; a missing fact is not automatically zero. Dictionaries · Validation.
File, CSV and JSONL
A file stores bytes/text. CSV needs a quoting-aware parser; JSONL contains one JSON value per line. Browser practice files are temporary, not computer files. CSV · JSONL.
Denominator and evidence
A rate divides a count by its declared eligible total. Keep exclusions visible. A quiz score, practical check and self-review are different evidence. Quality rates.

Read the error, then make one repair

SyntaxError / IndentationError
Python could not parse the code. Inspect the named line and the preceding line for a missing colon, unmatched quote/bracket or inconsistent indentation. Review blocks.
NameError
A name has no value here. Compare case and spelling, and check that assignment happens before use. Do not replace an unknown parameter with a fixed sample.
TypeError / ValueError
A wrong kind of value or an unacceptable value can fail an operation. Inspect the supplied input and declared policy; do not broadly suppress the error. Narrow error handling.
IndexError / KeyError
The requested position or key is missing. Inspect the collection and interface instead of guessing a fallback. Indices · Keys.
Run stays loading / runtime or checker unavailable
This is not proof that your answer is wrong. Stop if available, copy your draft, check your connection and retry. If it repeats, keep the visible error and use the readable lesson/hints. Never reset or clear browser storage as the first repair.
Expected sample prints, but a check fails
Read the named contract and test changed/empty inputs. The helper may return None, use a fixed value or stop too early even when the sample looks right. A failed check is not a request to copy the expected output.

Press Escape while working inside this panel to close it and return focus to its summary. Without JavaScript, use the summary again. For local Studio commands, use terminal troubleshooting.

← Route Week 4 · Day 20 of 40

Shot metadata cleaner

Loading today's steps…
Lesson idea Tap to fold
Recall — the pipeline

Say the steps before opening the answer: clean the line, split it, convert the number, handle failure, store the record, then report it.

Show the answer

strip() → split() → int() inside try → dictionary or None → loop and write.

Today

A first project with an explicit data policy

Trace, rebuild, fill and repair the demonstration cleaner, then apply the ideas to a new independent report. The demonstration accepts a simple two-field input under limited assumptions; it is not a general production validator.

The independent project tightens the policy: exactly two fields, nonempty trimmed name and nonnegative integer frames. Valid zero remains accepted. Count accepted and skipped rows explicitly, preserve order and replace the report on every call.

Plan two sessions: the original four practice tasks take about 51 minutes; the independent project adds about 20 minutes. The scored quiz is separate. Stop between sessions and keep a code or report copy.

# A first project with an explicit data policy.
rows = [" Museum | 0 ", "Bad|many", "Canal|7"]
accepted = 0
skipped = 0
for row in rows:
    parts = row.strip().split("|")
    try:
        frames = int(parts[1])
    except (ValueError, IndexError):
        skipped += 1
        continue
    accepted += 1
    print(parts[0].strip(), "·", frames, "frames")
print("Accepted:", accepted, "Skipped:", skipped)

Museum · 0 frames, Canal · 7 frames, then Accepted: 2 Skipped: 1. This worked trace only covers the demonstration assumptions; it does not implement the full independent project.

Use the independent brief for the new rules. Check the saved file and counts on unfamiliar rows and a second call; quiz recall alone is not practical mastery.

Predict, explain, then verify

These brief checks are self-reviewed, not quiz scores. Browser runs use fresh temporary files; they do not open your computer’s files. Download useful reports before another Run, Reset, exercise change or leaving.

Keep valid zero

Should a record with frames 0 be counted as rejected under the new policy?

Compare your answer · self-reviewed

No. Zero is a valid nonnegative integer, distinct from a malformed row.

Avoid hidden carry-over

What should a second write_report([]) call leave in the report file?

Compare your answer · self-reviewed

An empty file and zero accepted/skipped counts. The function replaces rather than appends.

Explain a rejection

Why reject Too|many|fields instead of silently reading the first two fields?

Compare your answer · self-reviewed

The independent policy requires exactly two fields. Silently discarding fields hides malformed data.

Independent project: a trustworthy report

Write write_report(lines) for a list of strings in the simple name|frames format. This new policy is stricter than the demonstration cleaner:

  1. Accept exactly two trimmed fields, a nonempty name and an integer frame count of zero or more.
  2. Skip malformed strings: empty names, bad numbers, negative frames and missing or extra fields.
  3. Preserve accepted row order and duplicates. Do not modify the input list.
  4. Replace project-report.txt on each call, using UTF-8. Write name · N frames plus a newline per accepted row. If none qualify, create an empty file.
  5. Return a dictionary containing exactly accepted and skipped, both integer counts. Count each input row once.
  6. Try empty input, valid zero, rejected rows around valid rows, then a second call. Catch ValueError close to numeric conversion; do not hide unrelated problems.

This task adds about 20 minutes after the four original practice steps. Use two sessions if needed. The checkpoint link selects the unfinished starter; it does not run Python or award a pass. Review writing and reading a report.

Read the unfinished starter without running Python
# Build a report under the new policy in the brief.
def write_report(lines):
    # Replace this unfinished return with your workflow.
    return {"accepted": 0, "skipped": 0}


# Run the sample, then inspect the saved report.
rows = [" Museum | 0 ", "Broken", "Canal|7", "Bad|-1"]
result = write_report(rows)
print("Accepted:", result["accepted"])
print("Skipped:", result["skipped"])
with open("project-report.txt", encoding="utf-8") as file:
    print(file.read(), end="")

The sample accepts Museum with zero frames and Canal with seven; Broken and Bad|-1 are skipped. Expect Accepted: 2 and Skipped: 2, followed by the two report lines. Downloading this report or passing the quiz does not replace the independent code checks.

Now

Choose an exercise to load its prompt.

day-20.py standard Python · runs in this browser
Output

Loading exercises…


    
    
    

Section 4 checkpoint

Answer five questions, review explanations and revisit the linked lessons. Your score is separate from the independent report check. Tutor login is not required.

AI Tutor

The tutor mounts here when JavaScript is available. The lesson above stays readable without it.