Week 10 Coding Lab: The Makerspace Checkout Log
Part 1 — The Big Picture
This week you learned that a tuple is a fixed record that cannot be changed, that unpacking hands a tuple's items to several names, that a dictionary finds a value by its key and raises KeyError for a missing one, that .get() with a default and an in test both avoid that error, that the counting idiom tallies values in one line, and that a set keeps one copy of each value with no order you can count on. In this lab you put those ideas to work for an illustrative campus makerspace. You predict what six short programs print, run them, and study every gap between your prediction and the run. Then you read three broken programs, fix each with the smallest change that works, write a short dictionary program of your own, and check a chatbot's answers to the same questions by running the code, because a chatbot predicts likely text and does not run your program.
Time budget: Plan for about 90 minutes.
Part 2 — The Task
Guiding question: For the makerspace's checkout log, which of these six predictions about tuples, dictionaries, and sets will you get wrong, and how will each run show you whether a lookup finds a key, a tally counts correctly, or a set drops a repeat?
Workshop data: Makerspace checkout log: six short programs and three broken programs
Source: Six short Python programs and three broken programs about an illustrative campus makerspace, written for this lab and printed in full in Part 4; the makerspace, its tools, and its members are invented and describe no real place or person.
- Rows: 9 short programs in all: 6 programs to trace in the first table and 3 broken programs in the second table
- Language: Python 3, run in a free browser runner; no file to download and nothing to install
- Context: an illustrative campus makerspace with tool bays, a checkout dictionary, a usage tally, and member numbers
Part 3 — Materials & Procedure
Tools and materials
- A free browser-based Python runner (an online editor that runs Python 3 with no account and nothing to install), Python Tutor at pythontutor.com for step-by-step visualization, the official Python documentation at docs.python.org, and one approved chatbot used as a pair-programmer whose code the student runs before trusting
Ways of working
- write-run-and-verify
- trace-and-predict-output
- find-and-fix-the-bug
Procedure
- Open a free browser Python runner in one tab and Python Tutor at pythontutor.com in another. In the runner, delete any sample code so the editor is blank. Tool: A free browser-based Python runner (an online editor that runs Python 3 with no account and nothing to install), Python Tutor at pythontutor.com for step-by-step visualization, the official Python documentation at docs.python.org, and one approved chatbot used as a pair-programmer whose code the student runs before trusting. Check: An empty editor with a Run button and a separate output panel.
- In the first table in Part 4, write your prediction for each of the six programs before you run anything. Then type each program into the runner exactly as printed, with four spaces in front of each loop-body line, press Run, and copy the output into the Actual output column. Tool: A free browser-based Python runner (an online editor that runs Python 3 with no account and nothing to install), Python Tutor at pythontutor.com for step-by-step visualization, the official Python documentation at docs.python.org, and one approved chatbot used as a pair-programmer whose code the student runs before trusting. Check: Six actual outputs, one per row, each copied character for character from the output panel; at least one is likely to differ from your prediction.
- Type each broken program from the second table into the runner and press Run. For an error, scroll to the bottom of the error message and copy the error type from its last line. For a program that runs, compare what it printed with what its description says it should print. Tool: A free browser-based Python runner (an online editor that runs Python 3 with no account and nothing to install), Python Tutor at pythontutor.com for step-by-step visualization, the official Python documentation at docs.python.org, and one approved chatbot used as a pair-programmer whose code the student runs before trusting. Check: The second table shows what each broken program printed, or the error type on its last line; one of the three runs without any error but prints the wrong thing.
- Fix each broken program with the smallest change that makes it do what its description in Part 4 says, run the fixed version, and record the new output. Tool: A free browser-based Python runner (an online editor that runs Python 3 with no account and nothing to install), Python Tutor at pythontutor.com for step-by-step visualization, the official Python documentation at docs.python.org, and one approved chatbot used as a pair-programmer whose code the student runs before trusting. Check: Each fixed program runs without an error and prints the opening hours, the count, or the number of different tools its description asks for.
- Paste the program from row 5 of the first table into Python Tutor, click the button to visualize it, and step forward one line at a time. Watch the dictionary named tally and write down its contents after each pass of the loop. Tool: A free browser-based Python runner (an online editor that runs Python 3 with no account and nothing to install), Python Tutor at pythontutor.com for step-by-step visualization, the official Python documentation at docs.python.org, and one approved chatbot used as a pair-programmer whose code the student runs before trusting. Check: Python Tutor draws tally as a two-column box that gains laser, then drill, then printer, while laser's count climbs to 3.
- Write your own short program: a dictionary that maps three makerspace rooms to their seat counts, then a line that adds a fourth room, then print the dictionary's length, then use .get() with a default of 0 to look up a room that is not there. Predict each printed line, run it, and fill in the third table. Tool: A free browser-based Python runner (an online editor that runs Python 3 with no account and nothing to install), Python Tutor at pythontutor.com for step-by-step visualization, the official Python documentation at docs.python.org, and one approved chatbot used as a pair-programmer whose code the student runs before trusting. Check: A short program that runs without an error, with your predicted and actual output side by side.
- Open your approved chatbot, paste the critique prompt from Part 6 as one message, then check each of its claims by running the code it talks about. If you are using the equivalent route, mark up the printed flawed analysis in the same way. Tool: A free browser-based Python runner (an online editor that runs Python 3 with no account and nothing to install), Python Tutor at pythontutor.com for step-by-step visualization, the official Python documentation at docs.python.org, and one approved chatbot used as a pair-programmer whose code the student runs before trusting. Check: The fourth table lists each chatbot claim, what your run showed, and a correction wherever the two disagree.
Fallback route
When to use it: Use this route if your browser Python runner will not open or will not run code.
Run every program in Python Tutor instead, which also runs Python 3 in the browser: paste each program, click the button to visualize it, and step to the end to read its output or its error. Complete every table, analysis question, and the critique step, and submit the same items for equal credit.
This route earns the same credit as the primary route.
Part 4 — The Scaffold
Predict first and run second, so the gap between the two columns is your own evidence of what each collection holds.
| Program | Your prediction | Actual output from the run | Same or different? |
|---|---|---|---|
tool = ("drill", 3), then name, bay = tool, then print(bay, name) |
|||
checkout = {"drill": 2, "saw": 1}, then checkout["saw"] = checkout["saw"] + 1, then print(len(checkout), checkout["saw"]) |
|||
checkout = {"drill": 2, "saw": 1}, then print(checkout.get("glue", 0), "saw" in checkout, 1 in checkout) |
|||
bins = {}, then bins["tape"] = 4, bins["clamps"] = 6, and bins["files"] = 2, then for item, n in bins.items(): with print(item, n) |
|||
uses = ["laser", "drill", "laser", "printer", "laser"], then tally = {}, then for u in uses: with tally[u] = tally.get(u, 0) + 1, then print(tally) |
|||
members = [104, 211, 104, 350], then print(len(set(members)), 211 in set(members)) |
Read each broken program from its run before you change a single character.
| Broken program and what it should do | What printed, or the error type on the last line | Your one-change fix | Output after the fix |
|---|---|---|---|
Bug 1, should print the opening hours as a tuple with the closing time changed to 6pm: hours = ("9am", "5pm"), then hours[1] = "6pm", then print(hours) |
|||
Bug 2, should print 0 for an item the shelf does not stock: stock = {"tape": 4}, then print(stock["glue"]) |
|||
Bug 3, should print how many different tools were used: uses = ["laser", "drill", "laser", "printer", "laser"], then print(len(uses)) |
Write your own small dictionary program, then let the run confirm or correct what you expected it to print.
| Line you wrote | Output you expected | Output of the run |
|---|---|---|
| Line 1 | ||
| Line 2 | ||
| Line 3 | ||
| Line 4 |
Check every chatbot claim against a run so the run, not the chatbot, has the last word.
| Chatbot claim, quoted | What your run showed | Correct as stated, or your correction |
|---|---|---|
Part 5 — Analysis Questions
- Which of your six predictions in the first table differed from the run? For each one, write the step-by-step trace that reaches the actual output and name the rule that explains the gap, such as in checking only the keys, a set keeping one copy of each value, or a dictionary keeping insertion order.
- For row 5 of the first table, what did the dictionary named tally hold after each pass of the loop in Python Tutor in step 5? Explain what get with a default of 0 did on the first pass for each new tool.
- Bug 3 runs without any error message but prints the wrong thing, while Bugs 1 and 2 stop with an error. Explain why Bug 3 is a logic error, and name the error type each of the other two raised and why the program raised it.
- Choose one: (a) describe how you would decide whether to trust a chatbot's claim about what a dictionary lookup prints, using one claim from your critique as the example; or (b) describe how predicting before running changed what you noticed about keys and values in this lab, using one row of your first table as the example.
- Every program in this lab used a handful of short names and small numbers. Name one thing these runs could not tell you about a set's printed order or a dictionary that must handle names typed in different ways, such as Drill and drill, and say how you would check it by running more cases.
Part 6 — AI-Critique Moment
Choose one equal-credit critique route. Route A: ask an approved AI tool to critique your completed work, then check its response against your own evidence. Route B is the no-AI equivalent printed below.
Approved tools: Claude, Gemini, ChatGPT, Grok, Microsoft Copilot.
Prompt to paste:
I'm doing a beginner Python lab about the checkout log of a campus makerspace, written for a class activity. Please do seven things, and keep each answer short. First, predict exactly what this program prints: checkout = {"drill": 2, "saw": 1}, then print(checkout["glue"]). Second, for the same checkout, predict what print(1 in checkout) prints and explain in one sentence why. Third, write a loop that prints the first three tools in the tuple bays = ("drill", "saw", "laser", "glue"). Fourth, this program should print the opening hours with the closing time changed to 6pm, but it stops with an error; fix it so hours is still a tuple: hours = ("9am", "5pm"), then hours[1] = "6pm", then print(hours). Fifth, write a program that counts how many times each tool name appears in uses = ["laser", "drill", "laser"] and prints the dictionary of counts. Sixth, does a Python set keep its items in the order they were added, the way a dictionary does? Seventh, I want an empty collection to hold badge numbers with no repeats; what single line makes it?
Test the response for these likely failures:
- Chatbots often predict that
print(checkout["glue"])prints None, mixing up a square-bracket lookup with.get(). - A chatbot may quote the right output, False, for
print(1 in checkout)while explaining that 1 is not one of the counts, even though the saw's count is 1. - Asked for the first three tools, a chatbot may write
for i in range(1, 4):, which starts at index 1. - A chatbot may fix the hours program with
hours = list(hours)before the assignment, which runs but turns the tuple into a list. - A chatbot may write the tally as
tally[u] += 1on an empty dictionary and call it working without running it. - A chatbot may claim that a set keeps insertion order the way a dictionary does.
- A chatbot may answer
seen = {}for an empty collection with no repeats, missing that empty braces make a dictionary.
Write 2-3 sentences that name one thing the chatbot got right and at least one claim you corrected, and for each correction give the output or error type your own run showed.
Equivalent route (no AI required)
No AI account is required for this lab. Instead of the chatbot, critique this flawed analysis, printed here in full: “print(checkout["glue"]) prints None, because a missing key gives back nothing. print(1 in checkout) prints False because 1 is not one of the counts. To print the first three tools, write for i in range(1, 4): with print(bays[i]). To fix the hours program, write hours = list(hours) before changing the closing time; it now prints the same kind of record as before. To count the tools, start with tally = {} and write tally[u] += 1 in the loop; this version is working. A set keeps its items in the order you added them, the same as a dictionary. An empty pair of curly braces, {}, makes an empty set.” Mark it up: quote each flawed sentence, run the code it describes in your browser Python runner, and write the corrected claim beside it with the run's output or error type as evidence. This route assesses the same objectives as the chatbot critique, namely predicting what a dictionary lookup, an in test, or a set prints, repairing a missing key, keeping a tuple a tuple, and checking every claim about code by running it (Objective 6 and Objective 3), and it takes comparable effort, about 20 minutes of the lab. It is scored by the same rubric for the same credit, and its marked-up analysis replaces the chatbot report and share link in your submission. You do not need to say which route you chose.
Part 7 — What to Submit
- All four completed scaffold tables
- Written answers to all five analysis questions
- Your room-dictionary program with its run output
- The chatbot critique report with its share link, or the equivalent route's marked-up flawed analysis
Deliverable:
A short Coding Lab report on an illustrative campus makerspace: four completed tables (six predictions beside their runs, three broken programs read and fixed, your own room-dictionary program, and the checked chatbot claims), written answers to five analysis questions, and a critique of a chatbot's answers to the same questions, or, on the equivalent route, a marked-up correction of the printed flawed analysis. Submit in any accessible file type or as a link; a recorded response may be submitted as audio or video with a transcript, or as text. Choose a written, recorded, or visual form for your answers, such as screen captures of your runs with a short note for each; every form is graded by the same rubric.
Rubric
The rubric below shows how each submitted part is evaluated; bands are full, partial, or none.
| Criterion | Full | Partial | None |
|---|---|---|---|
| Predicting and running the six programs | All six predictions are recorded before the runs, and all six actual outputs match what the programs print, copied character for character, including every value on a line such as 0 True False. | The table is mostly complete, but an actual output is missing or miscopied, or predictions appear to have been filled in after running. | No predictions or runs are recorded, or the outputs are invented rather than run. |
| Explaining the gaps between prediction and run | Every prediction that differed from its run is traced step by step to the actual output, with the governing rule named, such as in checking only keys, a set dropping repeats, or insertion order. | The gaps are listed, but a trace is missing or the rule behind a gap is not named. | No gap is explained, or the response blames the runner instead of the rule. |
| Finding and fixing the three bugs | Each bug is read correctly from its run: what printed or the error type, a one-change fix, and the fixed program's output, with Bug 1 fixed by building a new tuple, Bug 2 by a lookup that supplies a default, and Bug 3 identified as a logic error repaired with a set. | Two of the three bugs are read and fixed correctly, or all three are fixed but an error type or the run evidence is missing. | The bugs are not attempted, or errors are named without running the programs. |
| Writing, running, and verifying a dictionary program | The room program runs without an error, adds the fourth room by assigning to a new key, uses .get() with a default for the missing room, and records its expected and actual outputs side by side. | The program runs but misses one requirement, such as looking up the missing room with square brackets, or the expected or actual output is not recorded. | No program is submitted, or it was not run. |
| Critiquing the AI analysis or the printed flawed analysis | The chatbot's answers, or on the equivalent route the printed flawed analysis, are quoted and at least two claims are corrected with evidence from the student's own runs. | The critique names errors but corrects only one, or corrects without run evidence, on either route. | No critique is submitted on either route, or chatbot or flawed text is pasted without any checking. |
| Reflection and limitation | The chosen reflection option is answered with a specific example from this lab, and the limitation answer names something these runs cannot show and a sensible way to check it. | The reflection or the limitation is general, without an example from this lab or a way to check it. | The reflection and limitation questions are not answered. |
Quality Gate
- Every prediction in the first table was written before its program was run.
- Every actual output and error type is copied from your own run, never from memory or a chatbot.
- Each error is named by its type from the last line of the error message, not by the wording after the colon.
- Each fix changes as little as possible and its fixed program was run.
- No output, count, or claim is invented anywhere in the submission.
- The critique quotes the chatbot or the flawed analysis and corrects at least two claims with evidence from your runs.
Built with The Course Maker · samples.thecoursemaker.com