============================================================
 NESTED DATA STRUCTURES — STUDENT GRADEBOOK - Demo Run
============================================================

--- Adding a score ---
  Bob's scores after adding 80: [65, 70, 55, 80]

--- Averages ---
  Alice: 86.3
  Bob: 67.5
  Carol: 95.0
  Dave: 95.0
  Eve: 48.3

--- Highest average student ---
  ('Carol', 95.0)

--- Sorted by average (descending) ---
  Carol: 95.0
  Dave: 95.0
  Alice: 86.3
  Bob: 67.5
  Eve: 48.3

--- Class-wide average ---
  77.8

--- Failing students (below 60) ---
  ['Eve']

--- Report card ---
Report Card: Alice (ID 1)
  Test 1: 88
  Test 2: 92
  Test 3: 79
  Average: 86.3

============================================================
 Assignment: top_n_students (with tie handling)
============================================================
  top_n_students(gradebook, 1) = ['Carol', 'Dave']  <- Carol & Dave tied for 1st, BOTH returned
  top_n_students(gradebook, 2) = ['Carol', 'Dave']
  top_n_students(gradebook, 10) = ['Carol', 'Dave', 'Alice', 'Bob', 'Eve']  <- n larger than roster, returns everyone
