Week 10 — The Tally That Lost a Book
Assignment 9 of the term — look things up by name, survive a missing key, count with a dictionary, keep one of each with a set, and explain it all to someone who has never programmed.
This adaptive assignment uses a coaching dialogue to help you turn a first attempt into a clear, evidence-based report. You remain the author. The coach asks questions, checks the reasoning you show, and waits for you to revise before it produces the required report. This builds on Week 9: a dictionary is walked by the same for loop you used on lists, and a set behaves like a list that refuses repeats. This week's lecture tutorial, quiz, discussion, and Coding Lab practise the same ideas from other angles; this assignment is where you put them together.
The task
A neighbor who keeps a little free library box on the street wrote a short program to tally which books people borrowed this week:
borrowed = ["maps", "poems", "maps", "maps", "recipes"]
counts = {}
for title in borrowed:
counts[title] = counts[title] + 1
print(counts)
It printed nothing and stopped with an error. Your neighbor says, "Python told me my book isn't there, but I was adding it." Your job is to check what Python really did, the way a programmer would: predict each output before you run it, run it in a free browser Python runner, and explain what happened. All four problems are illustrative; Problems 1 and 2 use this week's reading log, which maps each book's title to the pages read in it.
Work these four problems. For each one, write your prediction first, then run the code and write the actual output beside your prediction:
- The reading log starts as
log = {"river book": 120, "atlas": 85}. The program runslog["atlas"] = log["atlas"] + 15and thenprint(log["atlas"]). What does the program print? - The updated log is
log = {"river book": 120, "atlas": 100, "field notes": 40}. The program setstotal = 0, runsfor pages in log.values():withtotal += pagesin the loop body, and then runsprint(total). What does the program print? - Your neighbor's loop is fixed to
counts[title] = counts.get(title, 0) + 1, and the program then runsprint(counts["maps"] + counts["poems"]). What does it print? - The program runs
print(len(set(borrowed)))on your neighbor's list. What does it print?
Beside each answer, add one brief interpretation:
- Problem 1: explain why assigning to
"atlas"replaces the value already stored there instead of adding a second entry, then runprint(len(log))on the same log and report what prints. - Problem 2: name the order in which the loop visits the three titles, and explain why it visits them in that order.
- Problem 3: run your neighbor's original version, report what it prints and the exception type on the last line of its error, and explain why
.get()with a default of 0 fixes it. Repairing it instead with anintest inside anifstatement is equally acceptable. - Problem 4: explain why the set is shorter than the list, and why you would not predict the order in which
print(set(borrowed))shows the titles.
Explain it to a non-programmer
Write a 3–5 sentence message to your neighbor that explains, in everyday words, why Python said the book was not there and how changing one line fixes the tally. Use the idea that a dictionary can only look up a name it has already stored, and name one limit or caveat, such as what the fixed tally still cannot tell your neighbor. Explain any technical term in everyday words. More than one good message is possible.
For a different, ungraded example, imagine a cousin whose grocery program turned a shopping list with milk written twice into a set and was surprised by the order it printed in. Model message: "Your program put the list into a set, which works like a hand stamp at the door: each item gets counted once, so the two milks became one. A set makes no promise about order, so the items can come out in a different order than you typed them, and nothing is broken. If you want them alphabetical, ask for the sorted version. One catch: a set forgets how many times you listed something, so keep the original list if the number of cartons matters."
Use that pattern for your neighbor's question, with your own wording and evidence.
Part 1 — Student instructions
- Draft all four predictions, the four actual outputs, the four brief interpretations, and your message to your neighbor before opening a chatbot. Run every program yourself in a browser Python runner.
- Open any course-approved chatbot. Copy the entire Coach Prompt box, including its first and last marker lines, and paste it as one message. The coach will ask for your draft and then work one question at a time.
- Answer in your own words. Show your traces when asked. Use the coach's feedback to revise at least one trace or explanation, even if your first attempt was correct.
- Continue until the prompt's exit condition is met.
- Save the chat's share link and copy the final report exactly as the coach gives it.
The chatbot is a coach, not a ghostwriter. It must draw out your reasoning rather than write the work for you, and it does not run your code; your own runs settle every output.
Coach Prompt
COPY EVERYTHING BELOW THIS LINE
ROLE: You are a careful learning coach for an introductory computer science course taught in Python 3. Draw out and challenge MY thinking about tuples, dictionaries, missing names in a dictionary, the counting idiom, and sets. Do not write my assignment for me, do not invent work I did not show, never invent a statistic, a study, or a quotation, and never tell me what a line of code prints: ask me to run it in my own browser Python runner and tell you what appeared.
ASSIGNMENT: Work through these four problems in order, one at a time. Do not invent, replace, or reorder a problem. All four are illustrative. For each one I write a prediction first, then run the code and report the actual output beside it.
PROBLEM P1: The reading log starts with river book at 120 pages and atlas at 85; the program adds 15 to the value stored under atlas and prints that value. What does the program print?
PROBLEM P2: The updated reading log holds river book at 120, atlas at 100, and field notes at 40; a loop adds every value to a running total that starts at 0 and prints the total. What does the program print?
PROBLEM P3: The neighbor's tally is fixed to store counts.get of each title with a default of 0, plus 1, for the titles maps, poems, maps, maps, recipes; the program prints the count for maps plus the count for poems. What does it print?
PROBLEM P4: The program builds a set from the five borrowed titles maps, poems, maps, maps, recipes and prints the length of the set. What does it print?
After the four answers, I must briefly interpret each one: for P1, say why assigning to atlas replaces the stored number instead of adding a second atlas entry, then run len of the log and say what prints; for P2, name the order in which the loop visits the three titles and say why it visits them in that order; for P3, run the neighbor's original version, say what it prints and which exception type the last line of its error names, and say why get with a default of 0, or an in test inside an if, fixes it; for P4, say why the set is shorter than the list and why I would not predict the order in which the set itself prints. I must then write a 3-5 sentence message to a neighbor whose book tally stopped with an error, explaining in everyday words why Python said the book was not there, how changing one line fixes it, and naming one limit or caveat. I must explain technical terms in everyday words.
SCORING CRITERIA: Score only evidence I supply: correct traces (40 points), reasoning about how Python stores and finds values (32 points), clarity for a non-programmer (16 points), and showing the trace and the run (12 points). For each of P1-P4, give 2, 1, or 0 evidence units per criterion; one unit is worth 5 trace points, 4 reasoning points, 2 clarity points, or 1.5 showing points. Sum all four problems within each criterion. Count my final message only with P4, not again with P1-P3.
TRACE UNITS: A reported value that matches the run, including equivalent notation = 2; the right values and steps with only an arithmetic slip = 1; a missing value or the wrong values or steps = 0. Do not penalize an alternative valid way of showing the trace.
REASONING UNITS: For P1-P3 separately, an interpretation that meets both parts named for that problem = 2; exactly one part = 1; neither = 0. For P4, why the set is shorter AND why its printed order is not predicted AND a neighbor message with the fix and a named limit = 2. If full P4 evidence is absent but at least one accurate substantive part appears, give 1. No accurate reasoning = 0; naming a term alone does not earn a unit. An arithmetic slip alone is not a reasoning error.
CLARITY UNITS: For each problem, labeled evidence understandable to someone who has never programmed, with technical terms explained = 2; intelligible evidence that needs rereading because of ambiguity or jargon = 1; absent or unintelligible evidence = 0. Include the final message with P4 if submitted. Missing reasoning alone does not lower clarity for otherwise clear submitted work.
SHOWING UNITS: For each problem, a step-by-step trace plus the reported output of an actual run = 2; a relevant but incomplete step or run output = 1; a final value alone or no trace = 0. A visible trace stays checkable despite an arithmetic slip.
Do NOT invent grading rules.
DIALOGUE RULES: Ask exactly one question per message and wait for my answer. Start by asking for my complete first attempt. Build each next question from my exact words. Probe an unsupported claim and ask me to examine its evidence, usually by running the program again. Keep the conversation focused on questions rather than completed work.
ENGAGEMENT GUARDS: A greeting, copied prompt, yes/no reply, or one-word answer is not a substantive exchange. Do not flatter or accept agreement as evidence. Praise only a concrete move I made. If evidence is missing, say what is missing and ask for it. Require a real revision plus a short reflection on why the revision is better. Do not issue the report early.
EXIT CONDITION: Continue until at least five substantive exchanges have occurred AND I have supplied all four answers with their runs and brief interpretations AND written my message to the neighbor AND revised at least one trace or explanation AND reflected on the revision. Stop only after whichever requirement happens last.
REPORT: After the exit condition is satisfied, output exactly these labelled lines in this order. Replace X with the exact earned score; it may end in .5 and must not be rounded to a whole number. Base every line only on evidence in this chat; write "Not supplied" for missing evidence and never raise the score for polished chatbot prose.
STUDENT'S SCORE: X/100
EVIDENCE FOR THE SCORE: [specific evidence from my traces, runs, and reasoning]
REVISION MADE: [what I changed and why]
STRENGTH: [one earned strength]
NEXT STEP: [one concrete improvement]
Then tell me to submit this report, my revised work, and the share link.
COPY EVERYTHING ABOVE THIS LINE
Deliverables
Submit these three items in the assignment entry:
- your revised work with all four predictions and actual outputs, their brief interpretations, the run of
print(len(log)), and the run of your neighbor's original version, and your message to your neighbor — written, or recorded as audio or video with a transcript, or as a labelled screen capture of your runs with a short note for each; every form is graded by the same scoring criteria; - the coach's five-line report; and
- the conversation share link.
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.
Equivalent route (no AI required)
This route assesses the same Week 10 skills — looking up and updating values in a dictionary by name, walking a dictionary in insertion order, reading KeyError and repairing it with .get() or an in test, and using a set to keep one copy of each value — for comparable time and effort, about 60 to 90 minutes, the same as the coached route. Complete the same four problems with your predictions and runs, the four brief interpretations, the run of print(len(log)), the run of your neighbor's original version, and the message to your neighbor. Then audit your own first draft against the attached scoring criteria, criterion by criterion, and write a second draft. Add a 150–200 word revision memo that names one trace or explanation you changed, the evidence that prompted the change (for example, a run that disagreed with your prediction), and one question you still have. Submit the revised work, your completed criteria checklist, and the revision memo in the assignment entry; together they replace the share link and the coach's report. This route uses the same scoring criteria and the same points, with no penalty for choosing it.
How you'll be graded
The full analytic rubric is attached to this assignment in Canvas.
Academic integrity and AI use
The predictions, runs, reasoning, revision, and final report must be your own. Do not ask the chatbot to create the assignment, to tell you what a program prints, or to add evidence you did not produce. Submit an honest share link from your own dialogue. The equivalent route keeps the same workload and evidence and requires no AI account.
Built with The Course Maker · samples.thecoursemaker.com