Lesson 1 of 0
In Progress

Unit 1 – Teachers Guide

Unit 1 ยท Teacher's Guide | Knowledge Pillars ยท Code Quest
๐Ÿ“š Teacher's Guide Code Quest ยท Coding Fundamentals

Unit 1 ยท Building Blocks of Python

Your day-to-day companion for delivering Unit 1 โ€” pacing, standards, lesson plans, misconceptions, differentiation, and a Python error appendix. Designed so a substitute could pick up tomorrow's lesson and run it.

๐Ÿงฑ 5 Lessons + Capstone
โฑ๏ธ 6โ€“8 class periods
๐ŸŽ“ Florida Course #9009200

๐Ÿ‘‹ Welcome โ€” How to Use This Guide

This Teacher's Guide is your day-to-day companion for delivering Unit 1 of the Code Quest curriculum. It's designed for new and experienced CS teachers alike โ€” no programming background required to use it effectively. Every lesson plan stands on its own; if a substitute teacher takes over for a day, they should be able to pick up the next lesson and run it.

What this guide contains

  • A pacing guide showing how Unit 1 maps to roughly 6โ€“8 class periods, with flex days built in for review and the final project.
  • A standards & exam crosswalk showing exactly which Florida CTE standards and Coding Fundamentals exam objectives each lesson addresses.
  • A unit vocabulary glossary with all 18 key terms students will encounter in Unit 1.
  • Five detailed lesson plans (one per lesson), each using the same 7-section format.
  • An appendix with the most common Python error messages students will see in Unit 1, and how to help them fix each one.

How each lesson plan is structured

Every lesson plan in this guide uses the same 7-section format so you can find what you need quickly:

  • At-a-Glance โ€” objective, time, materials, vocabulary, and a quick-reference standards box
  • Lesson Flow โ€” a suggested 45-minute breakdown: warm-up, instruction, guided practice, lab, exit ticket
  • Watch For โ€” the 2โ€“3 most common student misconceptions, with how to address each in real time
  • Differentiation โ€” what to do for early finishers and what to do for struggling students
  • Discussion Prompts โ€” questions to spark whole-class conversation
  • Real-World Connections โ€” how to answer the inevitable "why does this matter?" question
  • Lesson-Specific Vocabulary โ€” terms introduced or reinforced in that lesson

How to read this in conjunction with the student lessons

Each Code Quest lesson is a self-contained HTML page that students work through at their own pace. This guide doesn't replace those lessons โ€” it equips you to teach alongside them. The expected workflow:

  • Before class: read this lesson plan (5โ€“10 min) and skim the student HTML lesson
  • During class: follow the lesson flow; the student HTML is the textbook + lab
  • After class: use the companion Answer Key to quickly grade Knowledge Checks and labs
๐Ÿ’ก A note on student pacing. Some students will fly through lessons in 30 minutes; others will need most of a class period plus homework. The pacing guide assumes the average. Build in flex time โ€” and use the Differentiation suggestions to keep both ends of the spectrum engaged.

๐Ÿ—บ๏ธ Unit 1 Overview

The big picture

Unit 1 introduces the four building blocks every Python program is made of: variables, data types, operators, and conditionals. Students start with no coding experience and end the unit having built a complete interactive Mad Libs game from scratch. Every lesson adds one new building block; the final lesson combines all four into one project.

What students learn

  • Create variables using the assignment operator and follow Python's variable naming rules
  • Identify and use the four core data types: integer, string, Boolean, and float
  • Apply math operators (+, โˆ’, ร—, /, **, %) and comparison operators (==, !=, >, <, >=, <=)
  • Distinguish between = (assignment) and == (comparison) โ€” the most common beginner pitfall
  • Write conditional statements using if, elif, and else with correct indentation and colons
  • Use input() to collect information from a user, and f-strings to display results
  • Read, trace, and predict the output of simple Python programs
  • Combine all four building blocks into a complete working program (Mad Libs capstone)

Prerequisites

None. This is the first unit of the course and assumes students have never written code before. Comfort with basic algebra (substituting values into expressions) is helpful but not required.

What comes next

Unit 2 introduces loops (for and while), which let programs repeat actions. Unit 2 builds directly on the if/else logic from Unit 1 Lesson 4. Students who have a shaky grasp of indentation in Unit 1 will struggle in Unit 2 โ€” so it's worth slowing down on Lesson 4 if needed.

Materials you'll need

  • Computers with web browser access (one per student, or pairs)
  • Knowledge Pillars CodeSkills Lab access (where students write and run code)
  • Projector or large screen for live coding demos
  • This Teacher's Guide and the companion Answer Key
  • Optional: printed copies of Lesson 1's variable naming rules โ€” useful as a tape-to-the-desk reference
๐ŸŽฏ Course alignment. This unit aligns to Florida Coding Fundamentals course #9009200 (grades 6โ€“8) and primarily addresses Exam Objective 1 (core programming concepts) plus portions of Objectives 2, 4, and 7. See the Standards Crosswalk below for lesson-by-lesson details.

โฑ๏ธ Pacing Guide

Unit 1 is designed to fit in 6โ€“8 class periods of approximately 45 minutes each. This is the recommended pacing โ€” adjust based on your students' prior experience, class length, and how much homework time you can assume.

Recommended pacing โ€” 7-day plan

DayLessonFocusHomework
Day 1L1: VariablesIntro to variables, naming rules, reassignment. Lab 1A in class.Finish Lab 1B
Day 2L2: Data Typesint / str / bool / float. The quotes trap. Lab 2A in class.Finish Lab 2B
Day 3L3: OperatorsMath operators, comparison, = vs ==, modulo. Lab 3A in class.Finish Lab 3B
Day 4L4: If / Else (pt 1)if and else, indentation, colons. Lab 4A in class.Read L4 Section 3 (elif)
Day 5L4: If / Else (pt 2)elif, debugging exercise. Lab 4B in class. Knowledge check.Plan Mad Libs story (Lab 4C optional)
Day 6L5: Mad Libs ProjectLive walkthrough of starter code. Students begin building.Continue project at home
Day 7L5: Mad Libs ProjectFinish, test, present. Project showcase / peer feedback.โ€”

Compressed 6-day pacing

If you need to compress: combine Day 4 and Day 5 (cover all of Lesson 4 in one class) and assign Lab 4B as homework. This works for stronger groups but rushes the most pitfall-heavy lesson โ€” not recommended unless your students have prior Python exposure.

Extended 8-day pacing

If you have a shorter class period (30 min) or want more practice time: split each lesson into a "learn" day and a "lab" day. This is the most generous pacing and works well for first-time CS classes.

โฑ๏ธ Where the time usually goes. Lesson 4 (if/else) consistently takes longer than the other lessons because indentation errors are new and frustrating to students. Build a buffer here. Lessons 1โ€“3 are usually faster than expected.

Suggested grading weights for Unit 1

ComponentWeightNotes
Lesson Knowledge Checks (ร—4)20%3 questions each, completed in-platform
Lab Exercises (ร—9)40%Completed in CodeSkills Lab; checked for completion + correctness
Mad Libs Final Project30%Capstone โ€” see rubric in Lesson 5 plan
Class participation10%Discussion, peer help, exit tickets

๐ŸŽ“ Standards & Exam Crosswalk

This crosswalk shows exactly which Florida CTE standards and Coding Fundamentals exam objectives each lesson addresses. Use this for admin reviews, IEP documentation, or to prove alignment when adopting the curriculum.

Florida CTE Standards โ€” Course #9009200

Standards from the Florida Department of Education Coding Fundamentals curriculum framework that Unit 1 addresses:

StandardDescriptionLessons
01.01Use specialized computer coding software to solve problems.All (CodeSkills Lab)
01.02Demonstrate proficiency using specialized computer software (e.g., Python).All
02.02Explain the components of programming languages.L1, L2, L3, L4
05.06Recognize that more than one algorithm can solve a given problem.L4 (multiple branches), L5
05.07Create a program that implements an algorithm to achieve a given goal.L5 (Mad Libs)
07.01Describe the structure of a simple program; explain why sequencing is important.L1, L2, L5
07.04Describe selection programming structures (if/then, else); explain logic for if statements.L4
07.05Explain the types and use of variables in programming.L1, L2, L3
07.07Troubleshoot and debug errors in code.L2 (Lab 2B), L4 (Lab 4B)

Coding Fundamentals Exam Objectives

Exam objectives that Unit 1 prepares students for. The Practice Tests in your Knowledge Pillars platform directly align to these objectives.

ObjTitleCoverage in Unit 1Lessons
1Core programming conceptsFull coverageL1, L2, L3, L4
2Analyze and predict code behaviorPartial โ€” conditionals + tracing only (loops are Unit 2)L4
4Write and debug simple programsPartial โ€” syntax, structure, commenting, fixing errorsL2, L4, L5
7Debugging techniquesPartial โ€” reading errors, fixing problemsL2 (Lab 2B), L4 (Lab 4B)

Lesson-by-lesson alignment

LessonFlorida StandardsExam Objectives
L1: Variables01.01, 01.02, 02.02, 07.01, 07.051
L2: Data Types01.01, 01.02, 02.02, 07.05, 07.071, 4, 7
L3: Operators01.01, 01.02, 02.02, 07.051
L4: If / Else01.01, 01.02, 02.02, 05.06, 07.04, 07.071, 2, 4, 7
L5: Mad Libs Project01.01, 01.02, 05.06, 05.07, 07.01, 07.04, 07.051, 2, 4
๐Ÿ“‹ What's not in Unit 1. These standards are NOT addressed in Unit 1 and appear in later units: 03.x (file types) โ€” Unit 6 ยท 04.03 (sorting/filtering) โ€” Unit 10 ยท 06.03 (iterative debugging) โ€” Unit 4 ยท 07.02 (algorithms) โ€” Unit 3 ยท 07.03 (loops) โ€” Unit 2 ยท 07.06 (pseudocode) โ€” Unit 3 ยท 07.08 (databases) โ€” Unit 10.

๐Ÿ“– Unit 1 Vocabulary Glossary

All key terms students will encounter in Unit 1. The lesson where each term is introduced is shown in the rightmost column. Each lesson plan also includes its own focused vocabulary list.

TermDefinitionExampleIntro
VariableA named container that stores a value so your program can use it later.score = 100L1
Assignment Operator (=)The = sign. It does NOT mean "equals" โ€” it means "put this value into this variable."name = "Alex"L1
ReassignmentUpdating a variable to hold a new value. The old value is replaced and gone.score = score + 5L1
print()A built-in Python function that displays a value on the screen. Parentheses required.print(name)L1
Integer (int)A whole number with no decimal point. Can be positive, negative, or zero.lives = 3L2
String (str)Text data โ€” any characters wrapped in single or double quotes.city = "Orlando"L2
Boolean (bool)A value that is either True or False โ€” nothing else. Used for on/off situations.is_ready = TrueL2
FloatA number that includes a decimal point.price = 9.99L2
Data TypeThe kind of value a variable holds. Tells Python how to work with it.type(42) โ†’ intL2
type()Built-in Python function that returns the type of a value.type("hi")L2
OperatorA symbol that performs an action on data โ€” math, comparison, or combining strings.5 + 3L3
Comparison OperatorCompares two values and returns True or False. Includes ==, !=, >, <, >=, <=.score == 100L3
Modulo (%)Returns the remainder after dividing. Great for checking even/odd.10 % 3 โ†’ 1L3
ConcatenationJoining two or more strings together using the + operator."Hi" + " " + "Alex"L3
f-stringA string that starts with f and lets you drop variable values directly inside using { }.f"Hi, {name}!"L3 / L5
ConditionalAn if/else statement that runs different code depending on a condition.if score >= 60:L4
elifShort for "else if." Adds more branches to a decision block between if and else.elif score >= 70:L4
IndentationSpaces at the start of a line that tell Python what belongs inside a code block. Required. print("inside!")L4
SyntaxThe grammar rules of a programming language. A syntax error means Python can't parse the code.SyntaxErrorL4
input()A Python function that pauses the program and waits for the user to type something.name = input("Name: ")L5
๐Ÿ“– Teaching tip. Don't introduce all 20 terms at once. Each lesson surfaces 3โ€“5 new terms in context. The full glossary is here for student reference and for your end-of-unit review.

๐Ÿ“ฆ Lesson 1 ยท Variables โ€” Your Code's Storage Boxes

Lesson 1 ยท Variables

Lesson Plan

At-a-Glance

Objective
Students will create variables, name them following Python's rules, and update variable values using reassignment.
Time
45 minutes
Materials
Computer with browser, CodeSkills Lab access, projector for live demo
Vocabulary
Variable, Assignment Operator (=), Reassignment, print()
FL Standards
01.01, 01.02, 02.02, 07.01, 07.05
Exam Obj.
Objective 1

Lesson Flow (45 minutes)

๐Ÿ”ฅ Warm-Up (5 min)

  • Ask the class: "If you had a labeled box, what would you put inside? What would you label it?" Take 3โ€“4 examples.
  • Connect it to programming: "In Python, a variable IS a labeled box. The label is the name; what's inside is the value. Today we learn how to make our own boxes."

๐ŸŽค Direct Instruction (10 min)

  • Open Lesson 1 on the projector. Walk through Section 1 ("What is a Variable?") with the class.
  • Live-code three variables on the projector: player_name = "Alex", score = 0, lives = 3. Run them to show nothing visible happens โ€” emphasize the box analogy.
  • Add print(player_name) and run again. Ask: "What's the difference between the variable name and the value?"
  • Show the rules slide. Highlight the most common rule break: variable names cannot start with a number.

๐Ÿค Guided Practice (10 min)

  • Walk through Section 3 ("Changing a Variable's Value") on the projector. Live-code score = score + 5 and trace it on the whiteboard: write "score = 10" in a box, then erase the 10 and write 15.
  • Ask: "What happened to the old 10?" Reinforce that reassignment ERASES the old value.
  • Have students predict the output of: x = 5; x = 20; x = 15; print(x). (Answer: 15)

๐Ÿ’ป Independent Lab (15 min)

  • Students complete Lab 1A ("Make It Personal") in CodeSkills Lab. They replace placeholder values, add 2 new variables, and print them all.
  • Circulate. Watch for: missing quotes around strings, typos in variable names that cause NameError, students who forget the print() statement.
  • If time allows: start Lab 1B ("Score Updater") together, leave the rest for homework.

๐Ÿšช Exit Ticket (5 min)

  • Have students write down (on paper or in a chat): "What does score = score + 5 actually do, in your own words?"
  • Quick check: do they describe it as "replacement" (good) or "equals" (needs reteach)?

โš ๏ธ Watch For โ€” Common Misconceptions

1. "= means equals."
What you'll see: Students will read score = 10 as "score equals 10," which sets them up for huge confusion in Lesson 3 when == is introduced.
How to address: Always read = aloud as "gets" or "is set to." "score gets 10." "name gets Alex." Never say "equals." Reinforce this every time you read code aloud, all unit long.
2. "Variable names with numbers in front are fine."
What you'll see: Students try to write 1st_player = "Alex" and get a SyntaxError. They don't understand why this is illegal but player1 is fine.
How to address: Show both side by side. The rule: names can CONTAIN numbers but cannot START with one. Numbers at the start make Python think you're writing math.
3. "Reassignment adds to the value."
What you'll see: Students think score = 10 followed by score = 20 means the variable now holds 30. They're confusing assignment with addition.
How to address: Use the box analogy hard. Draw a literal box on the whiteboard. Write "10" inside. Then erase the 10 and write 20. Ask: "Where did the 10 go?" The answer: it's gone.

๐ŸŽฏ Differentiation

For early finishers
Have early finishers add THREE more variables of three different types (number, text, True/False) and print them all with descriptive labels like print("My favorite color:", color). This previews data types and primes them for Lesson 2.
For struggling students
Pair them with a stronger student for Lab 1A. Skip Lab 1B for class time โ€” assign as optional homework. Print out a one-page "variable rules cheat sheet" they can tape to their desk.

๐Ÿ’ฌ Discussion Prompts

  • Why do you think Python uses = instead of an arrow โ†’ for assignment? (Answer: keyboard accessibility โ€” = is on every keyboard, โ†’ is not.)
  • What would happen if Python allowed variable names with spaces, like high score? (Answer: it couldn't tell when one name ended and another began.)
  • Can you change a variable's value as many times as you want? Is there a limit? (Answer: no limit; this is what makes programs dynamic.)

๐ŸŒ Real-World Connections

  • Every app uses variables: your username, your high score, your battery percentage, the current temperature on your phone โ€” all stored in variables.
  • Spreadsheets work the same way: each cell is a labeled variable. =A1+B1 in Excel is the same idea as total = a + b in Python.
  • Video games store hundreds of variables for each player: health, mana, position x, position y, inventory items. Every frame, those variables get updated.

๐Ÿ“– Lesson-Specific Vocabulary

Variable โ€” A named container that stores a value so your program can use it later. Example: score = 100
Assignment Operator (=) โ€” The = symbol. It puts a value INTO a variable. It is NOT "equals."
Reassignment โ€” Giving a variable a new value. The old value is overwritten and lost.
print() โ€” A built-in Python function that displays the value of something on the screen. The parentheses are required.
โ†‘ Back to top

๐Ÿ”ข Lesson 2 ยท Data Types โ€” What Kind of Stuff?

Lesson 2 ยท Data Types

Lesson Plan

At-a-Glance

Objective
Students will identify, create, and check the four core Python data types (int, str, bool, float) and recognize the difference between a number and a string that looks like a number.
Time
45 minutes
Materials
Computer with browser, CodeSkills Lab access, projector for live demo
Vocabulary
Integer (int), String (str), Boolean (bool), Float, Data Type, type()
FL Standards
01.01, 01.02, 02.02, 07.05, 07.07
Exam Obj.
Objectives 1, 4, 7

Lesson Flow (45 minutes)

๐Ÿ”ฅ Warm-Up (5 min)

  • Show three things on the board: a name ("Alex"), a number (12), and a yes/no answer (True). Ask: "What KIND of information is each one? Are they all the same?"
  • Connect: "Just like in real life โ€” names, numbers, and yes/no answers are different โ€” Python keeps them separate too. Today we learn the four main types."

๐ŸŽค Direct Instruction (10 min)

  • Open Lesson 2 on the projector. Walk through the four data types using the cards in Section 1.
  • Pay extra attention to the QUOTES TRAP (Section 2). Live-code: age = 12 vs age = "12". Run print(age + 1) for each. Show the error message and decode it together.
  • Demo type() on the projector with each kind: type(42), type("42"), type(True), type(3.14). Read each output aloud.

๐Ÿค Guided Practice (10 min)

  • Play the Data Type Sorting Game in Section 3 as a class. Project it; have students call out which bucket each value goes in. Discuss the trickier ones ("007" โ€” that's a string, not a number, because of the quotes).
  • On the whiteboard, write 5 values: 100, "hello", True, 9.99, "100". Have students label each with its type. The last one is the gotcha โ€” it's a string.

๐Ÿ’ป Independent Lab (15 min)

  • Students complete Lab 2A ("Type Detective") in CodeSkills Lab โ€” create one variable of each type and verify with type().
  • Stronger students continue to Lab 2B ("Spot the Type Error") โ€” fix a TypeError caused by adding an int to a string.
  • Circulate. Watch for: capital T/F in Boolean (must be True / False, not TRUE / true), missing quotes on strings.

๐Ÿšช Exit Ticket (5 min)

  • Ask students to write the type of each: 7 ยท "7" ยท 7.0 ยท False
  • Answers: int, str, float, bool. The first two trip students up โ€” same character, different types.

โš ๏ธ Watch For โ€” Common Misconceptions

1. ""42" and 42 are the same thing."
What you'll see: Students write age = "12" then try age + 1 and get a TypeError. They don't understand why 12 wouldn't be a number.
How to address: Use the slogan from the lesson: "Python always trusts the quotes." If you see quotes, it's a string โ€” period. Drill this with five examples on the whiteboard.
2. "Booleans are typed like English: true / false / yes / no."
What you'll see: Students write is_ready = true (lowercase) and get a NameError, or worse, is_ready = "True" and don't understand why it doesn't behave as a Boolean.
How to address: Booleans must be EXACTLY True or False with capital first letter and no quotes. Show all the wrong variations on the projector and let Python reject each one.
3. "Floats and integers are interchangeable."
What you'll see: Students don't understand why 5 and 5.0 print as different types, or why dividing two ints can give a float (10 / 2 = 5.0).
How to address: Demonstrate that division (/) ALWAYS gives a float in Python, even with whole-number results. This is important context for Lesson 3.

๐ŸŽฏ Differentiation

For early finishers
Challenge them to predict and verify the type of more complex values: type(True + 1)? type("5" * 3)? type(3 + 0.5)? These reveal Python's automatic type rules and preview later units.
For struggling students
Skip Lab 2B for class time. Have them complete only Lab 2A and the Sorting Game. Print the four-types reference card from Lesson 2 Section 1 for them to keep.

๐Ÿ’ฌ Discussion Prompts

  • Why does Python need to know what type a variable is? Couldn't it just figure it out? (Answer: it does figure it out, but knowing the type prevents bugs โ€” e.g., adding text to a number is meaningless and Python catches it.)
  • When would you store a phone number as a string instead of an integer? (Answer: phone numbers can have leading zeros, dashes, parentheses โ€” none of which work as numbers. Phone numbers are text data.)
  • Is True / False the same as 1 / 0? (Advanced โ€” Python actually treats True as 1 and False as 0 in math contexts, but they are technically different types.)

๐ŸŒ Real-World Connections

  • Every form you fill out online enforces data types: the email field expects a string, the age field expects a number, the "I agree to terms" checkbox is a Boolean.
  • Banking apps separate dollars (often stored as strings or special money types) from balances (floats) to prevent calculation errors with cents.
  • Sports apps: a player's name is a string, jersey number is an integer, batting average is a float, and "is on the field right now" is a Boolean.

๐Ÿ“– Lesson-Specific Vocabulary

Integer (int) โ€” A whole number, positive, negative, or zero. No decimal point.
String (str) โ€” Text. Any sequence of characters wrapped in quotes (single or double โ€” but be consistent).
Boolean (bool) โ€” Either True or False. Note the capital first letter and the lack of quotes.
Float โ€” A number with a decimal point. Used for prices, measurements, percentages.
Data Type โ€” The kind of value a variable holds. Tells Python what operations are allowed on it.
type() โ€” A built-in Python function that tells you what type a value is. Example: type(42) returns <class 'int'>.
โ†‘ Back to top

โž• Lesson 3 ยท Operators โ€” Do the Math (and More!)

Lesson 3 ยท Operators

Lesson Plan

At-a-Glance

Objective
Students will apply math operators (+, โˆ’, ร—, /, **, %), comparison operators (==, !=, >, <, >=, <=), and string concatenation; they will distinguish between = (assignment) and == (comparison).
Time
45 minutes
Materials
Computer with browser, CodeSkills Lab access, projector for live demo
Vocabulary
Operator, Modulo (%), Comparison Operator, Concatenation, f-string
FL Standards
01.01, 01.02, 02.02, 07.05
Exam Obj.
Objective 1

Lesson Flow (45 minutes)

๐Ÿ”ฅ Warm-Up (5 min)

  • Show a calculator on the screen. Ask: "What buttons do you press most? What do they do?" Get a list of operations.
  • Connect: "Python has all those operations โ€” and a few more your calculator doesn't have, like one that gives the LEFTOVER after dividing. Let's meet them."

๐ŸŽค Direct Instruction (10 min)

  • Open Lesson 3. Walk through the math operators table. Live-code each one on the projector. Pay attention to: division always gives a float, ** is exponent (not 2 stars meaning multiplication), % is modulo.
  • Spend extra time on modulo. Use the "sharing pizza" analogy from the lesson: 10 slices among 3 friends โ†’ 3 each, 1 left over โ†’ 10 % 3 = 1. Ask the class to figure out 11 % 2 (answer: 1, because 11 is odd).
  • Walk through comparison operators. The CRITICAL slide is = vs ==. Drill this: "= puts a value IN a variable. == ASKS A QUESTION about two values." Read both aloud multiple times.
  • Demo string concatenation: "Code" + "r" โ†’ "Coder". Show the f-string version too: f"Hi, {name}!" โ€” same result, cleaner code.

๐Ÿค Guided Practice (10 min)

  • Use the Interactive Operator Explorer in Section 5. Have students suggest two numbers and an operator; predict the result; then click Calculate to verify.
  • Run the "Predict the Output" challenges in Section 6 as a class. Especially focus on the modulo questions.

๐Ÿ’ป Independent Lab (15 min)

  • Students complete Lab 3A ("Score Calculator") in CodeSkills Lab โ€” addition with reassignment, comparison, modulo for even/odd.
  • Lab 3B ("Name Builder") โ€” practice concatenation and f-strings side by side.
  • Circulate. Watch for: students writing if score = 100 (should be ==), students forgetting the spaces in concatenation ("Hi" + "Alex" gives "HiAlex" not "Hi Alex").

๐Ÿšช Exit Ticket (5 min)

  • Have students answer two on paper: (a) What is 17 % 5? (b) What's the difference between = and ==?
  • Answers: (a) 2 (b) = assigns; == compares. If most can't answer (b), reteach next class.

โš ๏ธ Watch For โ€” Common Misconceptions

1. "= and == do the same thing."
What you'll see: Students write if score = 100: in Lesson 4 and get a SyntaxError. They might also write x == 5 expecting it to assign (it doesn't โ€” it just evaluates True or False and discards the result).
How to address: Make this the running gag of Unit 1. Every time a student writes one or the other, ask aloud: "are you putting a value INTO a box, or asking IF two things are equal?" The exam tests this directly.
2. "Modulo is just division."
What you'll see: Students answer 10 % 3 = 3 (the quotient) instead of 1 (the remainder). They confuse % with /.
How to address: Use clean integer division: 12 / 4 = 3 (the quotient). 12 % 4 = 0 (no remainder, divides evenly). 13 % 4 = 1 (one left over). Drill until they internalize "% is the leftover."
3. "+ always means addition."
What you'll see: Students see "3" + "2" and predict 5. They get "32" and don't understand why.
How to address: Reinforce that + has TWO jobs: with numbers it adds, with strings it joins. Quotes determine which job runs. Show "3" + "2" โ†’ "32" and 3 + 2 โ†’ 5 side by side.

๐ŸŽฏ Differentiation

For early finishers
Challenge them to write a mini calculator that takes two numbers and prints all six math operators applied to them (+, โˆ’, ร—, /, **, %). Or have them figure out what 2 ** 0.5 does (square root!).
For struggling students
Focus on Lab 3A only. Skip 3B for class time. Print a one-page operator reference card with every operator and one example each.

๐Ÿ’ฌ Discussion Prompts

  • Why do you think computers use % to mean "remainder"? Where else might you have seen %? (Discuss: percentages โ€” but in Python, % is something completely different. Programming reuses symbols.)
  • Could programming have used different symbols entirely โ€” like words instead of symbols? (Yes โ€” some languages do! Python uses words sometimes too: and, or, not.)
  • When would you check if a number is even or odd in a real program? (Answers: alternating row colors in a table, every-other-frame animation, splitting a class into two teams, etc.)

๐ŸŒ Real-World Connections

  • Every social media app uses comparison: if user_age >= 13: allow_signup is literally checking what we just learned.
  • Modulo runs your phone's battery percentage indicator โ€” every time the battery drops by 1%, modulo math determines whether to show 47%, 46%, etc.
  • Concatenation builds every personalized message you see online: "Welcome back, " + user_name + "!" is the Python behind every login screen.

๐Ÿ“– Lesson-Specific Vocabulary

Operator โ€” A symbol that performs an action on data โ€” math, comparison, or combining strings.
Modulo (%) โ€” The remainder operator. 10 % 3 returns 1 because 10 รท 3 leaves a remainder of 1.
Comparison Operator โ€” Symbols that compare two values and return True or False. Includes ==, !=, >, <, >=, <=.
Concatenation โ€” Joining strings together using +. "Hi" + "!" makes "Hi!"
f-string โ€” A string starting with f that lets you embed variables using {}. f"Hi {name}!" replaces {name} with the variable's value.
โ†‘ Back to top

๐Ÿ”€ Lesson 4 ยท If / Else โ€” Make Decisions in Code

Lesson 4 ยท If / Else

Lesson Plan

At-a-Glance

Objective
Students will write conditional statements using if, elif, and else with correct colons and indentation; they will explain how Python evaluates conditions top-to-bottom.
Time
45 minutes (or split across two days for stronger pacing โ€” see notes)
Materials
Computer with browser, CodeSkills Lab access, projector for live demo
Vocabulary
Conditional, elif, Indentation, Syntax
FL Standards
01.01, 01.02, 02.02, 05.06, 07.04, 07.07
Exam Obj.
Objectives 1, 2, 4, 7
โš ๏ธ This is the highest-friction lesson in Unit 1. Indentation errors are new and frustrating. Build buffer time. Consider splitting across two class periods if your students are first-time coders.

Lesson Flow (45 minutes)

๐Ÿ”ฅ Warm-Up (5 min)

  • Ask: "Have you ever played a Choose Your Own Adventure book or game? What does the story do based on your choice?"
  • Connect: "Programs make choices the same way. Today we learn the words Python uses to make decisions: if, elif, else."

๐ŸŽค Direct Instruction (12 min)

  • Open Lesson 4. Walk through Section 1 ("The if Statement"). Live-code on projector: if score >= 60: print("You passed!"). Run with score = 75 (passes), then score = 45 (skips).
  • Highlight TWO non-negotiable rules: every if line ends with a COLON (:); the body must be INDENTED 4 spaces. These are Python's #1 and #2 syntax errors.
  • Add an else block. Run again with both score values. Show that exactly ONE branch always runs โ€” never both, never neither.
  • Walk through elif (Section 3). Use the grade checker: A / B / C / try again. Trace what happens with score = 85 โ€” show that Python checks top-to-bottom and STOPS at the first True condition.
  • Show indentation rules (Section 4). Use the visual diagram from the lesson. Drive home: indentation is what tells Python what's INSIDE the if block. Get it wrong โ†’ IndentationError.

๐Ÿค Guided Practice (8 min)

  • Use the If/Else Simulator in Section 5. Have students suggest scores; predict which branch runs; then click Run to verify.
  • On the whiteboard, write a buggy snippet: if score > 50 print("win!"). Ask students to spot both bugs (missing colon, missing indentation).

๐Ÿ’ป Independent Lab (15 min)

  • Students complete Lab 4A ("Temperature Advisor") in CodeSkills Lab โ€” fill in elif and else branches with their own messages.
  • Lab 4B ("Spot the Indentation Bug") โ€” find and fix two real bugs (missing colon, missing indentation).
  • Lab 4C ("Build Your Own Decision") is optional/homework โ€” students design their own if/elif/else from scratch.
  • Circulate intensely. This lesson generates the most errors of any in Unit 1. Common ones: forgotten colons, off-by-one indentation, using = instead of == in the condition.

๐Ÿšช Exit Ticket (5 min)

  • Have students predict the output for: score = 85; if score >= 90: print("A"); elif score >= 80: print("B"); elif score >= 70: print("C"); else: print("Try again")
  • Answer: B. The reasoning matters more than the answer โ€” students who say "because it's the first True one" have understood the lesson.

โš ๏ธ Watch For โ€” Common Misconceptions

1. "Forgetting the colon at the end of if / elif / else lines."
What you'll see: SyntaxError: expected ':'. The most common Python error in Unit 1.
How to address: Train muscle memory: every line that introduces a block (if, elif, else, def, for, while) ends with a colon. Make this a unison chant when reading code aloud.
2. "Indentation is decorative."
What you'll see: IndentationError: expected an indented block. Or worse: code runs but does the wrong thing because lines that should be inside the if are outside it.
How to address: Indentation is HOW Python knows what belongs inside a block. Use the visual L0 / L1 model from Section 4 of the lesson. Always 4 spaces โ€” and never mix tabs and spaces.
3. "Order of elif branches doesn't matter."
What you'll see: Students write if score >= 60: print("C"); elif score >= 90: print("A")โ€ฆ and a 95 prints "C". They don't understand why.
How to address: Reinforce: Python checks top-to-bottom and STOPS at the first True. Order from MOST specific to LEAST specific (or, equivalently, from highest threshold to lowest).
4. "= instead of == in conditions."
What you'll see: if score = 100: causes SyntaxError. Echo of Lesson 3.
How to address: Keep the running joke from Lesson 3: "are you putting a value IN, or comparing two values?" Conditions always compare โ†’ always ==.

๐ŸŽฏ Differentiation

For early finishers
Have them complete Lab 4C โ€” design their own decision program with at least 4 branches on a topic of their choice. Or challenge them to nest an if INSIDE another if (preview of complex logic).
For struggling students
Spend more time with Lab 4A โ€” don't rush them to 4B. Sit with them as they fix their first IndentationError so they see the pattern. Print a card with the indentation rules.

๐Ÿ’ฌ Discussion Prompts

  • Why do you think Python uses indentation instead of curly braces { } like other languages? (Answer: forces readable code; once you get used to it, indentation IS the structure.)
  • What happens if you have an if without an else? (Nothing โ€” Python just does nothing if the condition is False. else is OPTIONAL but often useful.)
  • What happens if you have multiple elif branches that are ALL True? (Only the FIRST one runs. Python stops checking after the first match.)

๐ŸŒ Real-World Connections

  • Every login screen uses if/else: "if password matches, log in; else, show error."
  • Game AI is full of if/elif/else: "if player is close, attack; elif player is far, walk closer; else, stand still."
  • Spam filters: "if email contains 'free money', mark as spam; elif sender is in contacts, mark as safe; else, send to inbox."
  • Self-driving cars: "if light is red, stop; elif light is yellow and we're close, stop; else, continue."

๐Ÿ“– Lesson-Specific Vocabulary

Conditional โ€” Code that runs only when a condition is True. Built with if, elif, else.
elif โ€” Short for "else if." Adds another condition to check between the original if and the final else.
Indentation โ€” Spaces at the start of a line. Tells Python which lines are INSIDE a block. Required, always 4 spaces in this curriculum.
Syntax โ€” The grammar rules of a programming language. Break a rule and Python raises a SyntaxError before running the program.
โ†‘ Back to top

๐ŸŽฎ Lesson 5 ยท Mad Libs โ€” Final Project

Lesson 5 ยท Mad Libs Capstone

Project Plan

At-a-Glance

Objective
Students will integrate variables, data types, operators, conditionals, and input() into a complete working Python program (Mad Libs game).
Time
Two class periods (90 minutes total) recommended
Materials
Computer, CodeSkills Lab, projector, optional: printed Mad Libs sample stories for inspiration
Vocabulary
input(), f-string (review), all prior Unit 1 vocabulary
FL Standards
01.01, 01.02, 05.06, 05.07, 07.01, 07.04, 07.05
Exam Obj.
Objectives 1, 2, 4 โ€” comprehensive Unit 1 application

Project Flow (90 minutes across 2 days)

๐Ÿ“… Day 1 โ€” Walk-through and start (45 min)

  • Warm-up (5 min): Have you ever played Mad Libs? Take responses. Project a sample Mad Libs story and read it aloud โ€” emphasize that the story is built from random words submitted before anyone sees it.
  • Live walkthrough (15 min): Open Lesson 5 on projector. Walk through the four-step structure: collect โ†’ store โ†’ build with f-strings โ†’ branch with if/else. Run the starter code as-is so students see the output before writing any code.
  • Concept introduction (5 min): input() is the new tool. Show that input() ALWAYS returns a string โ€” to use it as a number, wrap with int(input(...)).
  • Project setup (5 min): Have students copy the starter code into CodeSkills Lab and run it once unmodified.
  • Independent build (15 min): Students customize the story โ€” different theme, different questions, their own if/elif/else for the ending.

๐Ÿ“… Day 2 โ€” Finish, test, share (45 min)

  • Continue building (15 min): Students finish their custom story. Encourage at least one bonus challenge.
  • Testing (10 min): Each student runs their own program three times with different inputs. Are all if/elif/else branches reachable? Any crashes when typing letters where numbers are expected?
  • Peer testing (10 min): Pair up. Each student tests a partner's Mad Libs and gives feedback: what was funny? what could be more interesting?
  • Showcase (10 min): A handful of volunteers run their Mad Libs in front of the class with class members supplying the words. Celebrate creativity over perfection.

โš ๏ธ Watch For โ€” Common Project Pitfalls

1. Forgetting int() around input() for numbers.
What you'll see: Students write number = input("Enter a number: ") then if number > 5: gets a TypeError because they're comparing a string to an integer.
How to address: input() ALWAYS returns a string. To use it as a number, wrap with int(): number = int(input(...)). Reinforce that this is the same Lesson 2 "quotes trap" โ€” the input is a string until you convert it.
2. f-string quote-nesting.
What you'll see: Students write print(f"They said "hello" to me") and get a SyntaxError because the inner double quotes break the outer string.
How to address: Use single quotes inside double-quoted strings: print(f"They said 'hello' to me"). Or vice versa. Python is fine either way as long as they don't collide.
3. Indentation errors carrying over from Lesson 4.
What you'll see: The if/elif/else block at the bottom of Mad Libs has wrong indentation, OR students put the print statements OUTSIDE the if block by accident.
How to address: Same as Lesson 4 fix. Slow down on indentation. Have them read each indented line and ask: "is this INSIDE the block above it?"

๐ŸŽฏ Differentiation

For students who finish early
Direct them to the bonus challenges in Lesson 5: add more if/elif branches, use modulo for an even/odd surprise, accept multiple players' words and create a comparison story, add ASCII art at the end.
For struggling students
It's OK if their Mad Libs is closer to the starter code. Focus on getting one custom story working end-to-end. Skip the if/elif customization if needed and accept the original branches.

๐Ÿ’ฌ Discussion Prompts

  • What was harder than you expected? What was easier? (This metacognitive question reveals where students are still shaky โ€” and helps them realize how far they've come.)
  • If you wanted to make your Mad Libs work for two players, what would you change? (Preview: more variables, more f-strings โ€” same building blocks at bigger scale.)
  • Could you build a multiple-choice quiz using the same building blocks? What would you need to add? (Connection: more if/elif branches, an input prompt asking for an answer, comparison with the correct answer.)

๐ŸŒ Real-World Connections

  • Every "choose your own adventure" game is just nested if/else with branching outcomes.
  • AI chatbots in 2026 are vastly more sophisticated โ€” but their core is still input() โ†’ process โ†’ output, the same shape your Mad Libs uses.
  • Form-based websites (registration, surveys, quizzes) follow the same pattern: collect input, process it, branch based on what was entered.

๐Ÿ“‹ Mad Libs Project Rubric (30 points)

CriterionDescriptionPts
VariablesUses at least 4 named variables. Names follow Python rules (snake_case, no leading numbers).4
Data typesIncludes at least one of each: string (text input), int (numeric input via int(input(...))), and a third type chosen by the student.4
OperatorsUses at least one comparison operator AND at least one + or f-string for output.4
if / elif / elseIncludes a complete if + elif + else block where the chosen branch depends on user input. All three branches reachable with some input.8
input()Collects at least 3 pieces of input from the user with clear, descriptive prompts.4
CustomizationStory is the student's own (not just the starter). Theme is creative, prompts are interesting.4
CommentsIncludes at least 3 comments explaining what sections of code do.2
TOTAL30

๐ŸŽ Bonus Challenges (extra credit)

  • Add a 4th branch to the if/elif/else (now if + 2 elifs + else): +2 pts
  • Use modulo (%) for an even/odd surprise message: +2 pts
  • Accept input from a second "player" and combine the two stories: +3 pts
  • Add ASCII art (using print() with multiple lines) at the start or end: +1 pt
๐Ÿ’ก Project showcase tip. If you have time on Day 2, the showcase moment is gold. Pick 3โ€“5 volunteers to run their Mad Libs live with the class supplying the words. The laughter and ownership students feel reinforces that THEY built this from nothing โ€” and motivates them through Unit 2.

๐Ÿ“– Lesson-Specific Vocabulary

input() โ€” A built-in Python function that pauses the program and waits for the user to type something. Returns whatever they typed as a string.
int(input(...)) โ€” Pattern: collect input as text, then convert to integer. Required when you need to do math with the input.
f-string โ€” A string starting with f that lets variables be dropped in using { }. Used heavily in Mad Libs to weave inputs into the story sentence.
โ†‘ Back to top

๐Ÿ› ๏ธ Appendix ยท Common Python Errors in Unit 1

This appendix lists the most common Python error messages students will see in Unit 1 and how to help them fix each one. Save yourself time by recognizing these instantly.

ERRORSyntaxError: invalid syntax

What it usually means: Python can't parse the line at all. Most often a missing colon at the end of an if/elif/else line, or unbalanced quotes/parentheses.

How to fix: Look at the line number Python points to. Check for: (1) a missing : at the end, (2) a missing closing quote, (3) a missing closing ).

ERRORSyntaxError: expected ':'

What it usually means: Forgot the colon at the end of an if, elif, else, def, for, or while line.

How to fix: Add the : at the end of that line. Reinforce: every line that introduces a block needs a colon.

ERRORIndentationError: expected an indented block

What it usually means: Python expected indented code after an if/else (or similar), but the next line wasn't indented.

How to fix: Indent the line(s) that should be inside the if block by 4 spaces.

ERRORNameError: name 'x' is not defined

What it usually means: Python is asked to use a variable that doesn't exist. Common causes: typo in variable name, forgot quotes around a string (so Python thinks the string is a variable name), or used a variable before defining it.

How to fix: Check: did they spell the name the same as where they defined it? If they wrote print(Hello), did they mean print("Hello") with quotes?

ERRORTypeError: unsupported operand type(s) for +: 'int' and 'str'

What it usually means: Trying to add a number and a string. Classic Lab 2B bug. Or trying to compare input() with a number without converting.

How to fix: Convert one to match the other. To turn a string into a number: int("5"). To turn a number into a string: str(5).

ERRORValueError: invalid literal for int()

What it usually means: Tried to convert a string that isn't a valid number to an integer. Often happens in Mad Libs when a student types letters at a number prompt.

How to fix: For Unit 1 it's enough to tell students "type a number, not letters." Proper input validation comes in Unit 4.

ERRORIndentationError: unindent does not match any outer indentation level

What it usually means: Mixed tabs and spaces, OR the indentation is inconsistent across the if block (some lines indented 4 spaces, others 2 or 6).

How to fix: Re-indent the entire block uniformly with 4 spaces. The CodeSkills Lab editor should handle this consistently โ€” but if students have copy-pasted from elsewhere, mixed whitespace can sneak in.

๐Ÿ›Ÿ The universal debugging move. Whatever the error message, follow these three steps with the student: (1) Read the error message ALOUD together. (2) Find the line number Python is pointing to. (3) Look ONLY at that line and the line above it. 80% of Unit 1 errors are fixable from those two lines alone.
๐Ÿ“˜ Companion document. See the Unit 1 Answer Key for Knowledge Check answers, lab solutions, and detailed grading notes. The Answer Key + this Teacher's Guide are designed to be used together.

โ€” End of Unit 1 Teacher's Guide โ€”

โ†‘ Back to top