Control Flow
Match Statement
Structural Pattern Matching
Your app has a menu: 1=New, 2=Open, 3=Save, 4=Quit. Python 3.10's match statement lets you handle each option cleanly. But it goes beyond simple values - you can match and destructure tuples, lists, even objects.
Day number to name
Convert a number (1-7) to the day name.
day =
match day:
case 1:
name = "Monday"
case 2:
name = "Tuesday"
case 3:
name = "Wednesday"
case 4:
name = "Thursday"
case 5:
name = "Friday"
case 6:
name = "Saturday"
case 7:
name = "Sunday"
case _:
name = "Invalid day"
print(f"Day {day} is {name}")
day =
match day:
case 1:
name = "Monday"
case 2:
name = "Tuesday"
case 3:
name = "Wednesday"
case 4:
name = "Thursday"
case 5:
name = "Friday"
case 6:
name = "Saturday"
case 7:
name = "Sunday"
case _:
name = "Invalid day"
print(f"Day {day} is {name}")
day =
match day:
case 1:
name = "Monday"
case 2:
name = "Tuesday"
case 3:
name = "Wednesday"
case 4:
name = "Thursday"
case 5:
name = "Friday"
case 6:
name = "Saturday"
case 7:
name = "Sunday"
case _:
name = "Invalid day"
print(f"Day {day} is {name}")
day =
match day:
case 1:
name = "Monday"
case 2:
name = "Tuesday"
case 3:
name = "Wednesday"
case 4:
name = "Thursday"
case 5:
name = "Friday"
case 6:
name = "Saturday"
case 7:
name = "Sunday"
case _:
name = "Invalid day"
print(f"Day {day} is {name}")
Each case pattern is checked in order. _ is the wildcard (matches anything).
Menu option handler
Handle user menu selections with match.
choice =
print("=== Main Menu ===")
print("1. New Game")
print("2. Load Game")
print("3. Settings")
print("4. Exit")
print(f"Choice: {choice}")
print()
match choice:
case 1:
print("Starting new game...")
case 2:
print("Loading saved game...")
case 3:
print("Opening settings...")
case 4:
print("Goodbye!")
case _:
print("Invalid option. Please try again.")
choice =
print("=== Main Menu ===")
print("1. New Game")
print("2. Load Game")
print("3. Settings")
print("4. Exit")
print(f"Choice: {choice}")
print()
match choice:
case 1:
print("Starting new game...")
case 2:
print("Loading saved game...")
case 3:
print("Opening settings...")
case 4:
print("Goodbye!")
case _:
print("Invalid option. Please try again.")
choice =
print("=== Main Menu ===")
print("1. New Game")
print("2. Load Game")
print("3. Settings")
print("4. Exit")
print(f"Choice: {choice}")
print()
match choice:
case 1:
print("Starting new game...")
case 2:
print("Loading saved game...")
case 3:
print("Opening settings...")
case 4:
print("Goodbye!")
case _:
print("Invalid option. Please try again.")
choice =
print("=== Main Menu ===")
print("1. New Game")
print("2. Load Game")
print("3. Settings")
print("4. Exit")
print(f"Choice: {choice}")
print()
match choice:
case 1:
print("Starting new game...")
case 2:
print("Loading saved game...")
case 3:
print("Opening settings...")
case 4:
print("Goodbye!")
case _:
print("Invalid option. Please try again.")
choice =
print("=== Main Menu ===")
print("1. New Game")
print("2. Load Game")
print("3. Settings")
print("4. Exit")
print(f"Choice: {choice}")
print()
match choice:
case 1:
print("Starting new game...")
case 2:
print("Loading saved game...")
case 3:
print("Opening settings...")
case 4:
print("Goodbye!")
case _:
print("Invalid option. Please try again.")
Match is perfect for menu systems - cleaner than if-elif chains.
Grade to description
Convert letter grades to descriptions.
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
grade =
match grade:
case 'A':
description = "Excellent work!"
case 'B':
description = "Good job!"
case 'C':
description = "Satisfactory"
case 'D':
description = "Needs improvement"
case 'F':
description = "Please see instructor"
case _:
description = "Invalid grade"
print(f"Grade: {grade}")
print(f"Feedback: {description}")
# Using or-pattern for grouped cases
month =
match month:
case 12 | 1 | 2:
season = "Winter"
case 3 | 4 | 5:
season = "Spring"
case 6 | 7 | 8:
season = "Summer"
case 9 | 10 | 11:
season = "Autumn"
case _:
season = "Invalid month"
print(f"Month {month} is in {season}")
Use | (or-pattern) to combine multiple cases.
Calculator operator
Implement a basic calculator using match.
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
a =
b =
op =
match op:
case '+':
result = a + b
valid = True
case '-':
result = a - b
valid = True
case '*':
result = a * b
valid = True
case '/':
if b != 0:
result = a / b
valid = True
else:
print("Error: Division by zero")
result = 0
valid = False
case '%':
result = a % b
valid = True
case _:
print(f"Unknown operator: {op}")
result = 0
valid = False
if valid:
print(f"{a} {op} {b} = {result}")
Match on strings works great for command parsing.
Pattern matching on structure
Match can destructure tuples, lists, and objects.
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
# Match can destructure tuples
point =
match point:
case (0, 0):
description = "Origin"
case (x, 0):
description = f"On X-axis at x={x}"
case (0, y):
description = f"On Y-axis at y={y}"
case (x, y):
description = f"Point at ({x}, {y})"
print(f"Point {point}: {description}")
# Match on list structure
command =
match command:
case ["quit"]:
action = "Exiting game"
case ["look"]:
action = "Looking around..."
case ["move", direction]:
action = f"Moving {direction}"
case ["move", direction, distance]:
action = f"Moving {direction} for {distance} units"
case ["attack", target]:
action = f"Attacking {target}!"
case _:
action = "Unknown command"
print(f"Command: {command}")
print(f"Action: {action}")
This is where match shines - extracting values while matching patterns.
Exercise: advanced_patterns.py
Explore advanced patterns: guards, as-pattern, class patterns