No history yet

Advanced Control Flow

Beyond True and False

In Python, conditional logic goes beyond simple True and False values. Any object can be evaluated in a boolean context, where it's considered either "truthy" or "falsy".

Falsy values are those that evaluate to False in a boolean context. These include:

  • The number zero (0, 0.0)
  • Empty sequences or collections ('', [], (), {})
  • The special object None

Everything else is truthy. This allows for concise and readable checks. Instead of writing if len(my_list) != 0:, you can simply write if my_list:. This is a common and idiomatic way to check if a collection has items.

if user_input: # This block runs only if user_input is not an empty string.

This concept leads to elegant shortcuts. For simple if-else assignments, Python offers a , also known as a conditional expression. It condenses a multi-line if-else block into a single line, making assignments cleaner.

# Traditional if-else
if score >= 60:
    result = "Pass"
else:
    result = "Fail"

# Using the ternary operator
result = "Pass" if score >= 60 else "Fail"

Mastering Loops

You're likely familiar with nesting loops, for example, to iterate over a grid or matrix. While powerful, nested for loops can sometimes be verbose. For creating lists, a more approach is using list comprehensions. They combine the loop and the creation of a new element into a single, readable line.

# Standard for loop to create a list of squares
squares = []
for i in range(5):
    squares.append(i**2)

# List comprehension does the same thing
squares_comp = [i**2 for i in range(5)]

print(squares_comp)
# Output: [0, 1, 4, 9, 16]

Python also provides powerful built-in functions to make looping more efficient. The enumerate function is perfect when you need both the index and the value of an item in a sequence. The zip function is used to iterate over two or more sequences at the same time.

students = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]

# Using enumerate to get index and value
for index, student in enumerate(students):
    print(f"{index + 1}. {student}")

# Using zip to combine two lists
for student, score in zip(students, scores):
    print(f"{student}: {score}")

Sometimes you need to alter a loop's flow. The break statement exits a loop entirely, while continue skips the rest of the current iteration and moves to the next. A lesser-known feature is the else clause on a loop. It runs only if the loop completes normally, without hitting a break.

# Example of break and else
for num in range(2, 10):
    if num == 5:
        print("Found 5, breaking loop!")
        break # Exit the loop
else:
    # This part will not run because the loop was broken
    print("Loop finished without a break.")

Structural Pattern Matching

Introduced in Python 3.10, provides a powerful new way to handle complex conditional logic. Using the match and case keywords, it lets you compare a value against one or more patterns. Unlike a simple if-elif-else chain, it can destructure objects and bind parts of them to variables.

Imagine you're processing commands which can be simple strings or tuples with arguments. A match statement can handle this much more cleanly than nested if statements.

def process_command(command):
    match command:
        case "quit":
            print("Exiting program.")
        case ("move", x, y):
            print(f"Moving to ({x}, {y})")
        case ("draw", shape, color):
            print(f"Drawing a {color} {shape}")
        case _:
            # The underscore is a wildcard, matches anything
            print("Unknown command.")

process_command(("move", 10, 20))
process_command("quit")
process_command("invalid")

The match statement compares the command variable against each case pattern. If it finds a match, it executes that block. The wildcard pattern _ acts as a default case, catching any value that didn't match the preceding patterns. This makes code for complex state management significantly more readable and less error-prone.

Quiz Questions 1/6

In Python, which of the following values is considered "truthy"?

Quiz Questions 2/6

What is the primary purpose of the zip() function in Python?

Mastering these advanced control flow techniques will help you write more efficient, readable, and Pythonic code.