No new syntax in this module. Ten tiers, each anchored to a module you've already finished, each built around a script an actual IT/SecOps admin would actually write. This is where you find out the toolkit works.
Every IT admin's first real script: turn a few raw facts about a new hire into a readable onboarding message. Ten labs, nothing but what Module 1 taught you — variables, types, conversion, f-strings.
Create first_name = "Maria", last_name = "Santos", department = "IT". Print one f-string welcome line combining all three, in the form: "Welcome, FIRST LAST! You have been added to the DEPT department."
Welcome, Maria Santos! You have been added to the IT department.Add employee_id = 48213 (an integer, not a string). Print "Your employee ID is ID." using an f-string — embed the int directly, no conversion needed.
Your employee ID is 48213.Add is_full_time = True. Print "Full-time status: VALUE" using an f-string, embedding the raw boolean directly.
Full-time status: TrueCreate badge_number = "004521" — exactly how a badge field often arrives from a form. Print it as-is. Then convert it with int(badge_number) and print the result. Watch what happens to the leading zero.
004521 then 4521 — the leading zero silently disappears on conversion. This is a real, common bug source: never convert an ID field to int unless you're sure it isn't meant to keep its leading zeros.Using the variables from Labs 1-3 (first_name, last_name, department, employee_id, is_full_time), print one combined summary line: "NAME | DEPT | ID employee_id | Full-time: is_full_time".
Maria Santos | IT | ID 48213 | Full-time: TrueCreate account_created = None (the account isn't provisioned yet). Print "Account created: VALUE". Then reassign account_created = True and print the same line again.
Account created: None then Account created: TrueA phone extension arrives from a form as raw_extension = "4521" — always text. Convert it with int(raw_extension) and print the result. A timesheet entry arrives as raw_hours = "40.5" — convert it with float(raw_hours) and print that too.
4521 then 40.5type() ChecksGiven a = "hello", b = 42, c = False, print each variable's type() — three lines, before you'd use any of them in a message. Confirming what you actually received, before trusting it, is a habit worth building now.
<class 'str'>, <class 'int'>, <class 'bool'>Print two lines. Line 1: an f-string using only first_name/last_name. Line 2: an f-string mixing first_name (str), employee_id (int), and is_full_time (bool) together in the same line — no str() wrapper anywhere.
Maria Santos then Maria is employee 48213, full-time: True (your exact wording may vary — the point is mixing types in one f-string with zero manual conversion)You're given six facts about a new hire: name = "Maria Santos", department = "IT", badge_number = "004521", raw_extension = "4521", mfa_enabled = True, start_date = "2026-08-03". Convert the badge number and extension the same way you did in Labs 4 and 7. Print a six-line onboarding block, one fact per line, correctly converted and formatted — reusing every mechanic from Labs 1-9 in one script.
New hire: Maria SantosDepartment: ITBadge: 4521Extension: 4521MFA enabled: TrueStart date: 2026-08-03
Open problems/tier01_new_hire_printer.py and do all 10 problems locally. Run python check.py in problems/ to grade everything.
Tiers 2-10 build out next, once synthetic data is ready — see md-repo/SYNTHESIS-REFERENCE.md.