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_name.py
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).

match Structural pattern matching (Python 3.10+). More powerful than switch.
case A pattern to match: `case 1:`, `case "yes":`, `case (x, y):`
_ Wildcard pattern - matches anything. Like `default` in switch.

Menu option handler

Handle user menu selections with match.

menu.py
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.py
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.

| Or-pattern: `case 1 | 2 | 3:` matches 1, 2, or 3.

Calculator operator

Implement a basic calculator using match.

calculator.py
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.

destructure.py
# 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