Python Control Flow

Python control flow

Control flow is the order in which individual statements, instructions, or function calls are executed or evaluated. The control flow of a Python program is regulated by conditional statements, loops, and function calls.

Comparison Operators

OperatorMeaning
==Equal to
!=Not equal to
<Less than
>Greater Than
<=Less than or Equal to
>=Greater than or Equal to

These operators evaluate to True or False depending on the values you give them.

Examples:

42 == 42
True
40 == 42
False
'hello' == 'hello'
True
'hello' == 'Hello'
False
'dog' != 'cat'
True
42 == 42.0
True
42 == '42'
False
Quiz

Sign in to answer this quiz and track your learning progress

What does 'hello' == 'Hello' evaluate to?
A. True
B. False
C. None
D. Raises an error

Boolean Operators

There are three Boolean operators: and, or, and not. In the order of precedence, highest to lowest they are not, and and or.

The and Operator’s Truth Table:

ExpressionEvaluates to
True and TrueTrue
True and FalseFalse
False and TrueFalse
False and FalseFalse

The or Operator’s Truth Table:

ExpressionEvaluates to
True or TrueTrue
True or FalseTrue
False or TrueTrue
False or FalseFalse

The not Operator’s Truth Table:

ExpressionEvaluates to
not TrueFalse
not FalseTrue

Mixing Operators

You can mix boolean and comparison operators:

(4 < 5) and (5 < 6)
True
(4 < 5) and (9 < 6)
False
(1 == 2) or (2 == 2)
True

Also, you can mix use multiple Boolean operators in an expression, along with the comparison operators:

2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
True
# In the statement below 3 < 4 and 5 > 5 gets executed first evaluating to False
# Then 5 > 4 returns True so the results after True or False is True
5 > 4 or 3 < 4 and 5 > 5
True
# Now the statement within parentheses gets executed first so True and False returns False.
(5 > 4 or 3 < 4) and 5 > 5
False

if Statements

The if statement evaluates an expression, and if that expression is True, it then executes the following indented code:

# if statement: execute code block when condition is True
name = 'Debora'

if name == 'Debora':  # Check if name equals 'Debora'
   print('Hi, Debora')  # This line executes if condition is True
Hi, Debora
if name != 'George':
   print('You are not George')
You are not George

The else statement executes only if the evaluation of the if and all the elif expressions are False:

# if-else: execute different code based on condition
name = 'Debora'

if name == 'George':
   print('Hi, George.')
else:  # Execute if if condition is False
   print('You are not George')
You are not George
Quiz

Sign in to answer this quiz and track your learning progress

When does the else block execute in an if-else statement?
A. Always
B. Only when the if condition (and all elif conditions if present) are False
C. Only when the if condition is True
D. Never

Only after the if statement expression is False, the elif statement is evaluated and executed:

# if-elif: check multiple conditions in sequence
name = 'George'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':  # Checked only if previous condition is False
   print('Hi George!')
Hi George!

the elif and else parts are optional.

name = 'Antony'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':
   print('Hi George!')
else:
   print('Who are you?')
Who are you?

Ternary Conditional Operator

Many programming languages have a ternary operator, which define a conditional expression. The most common usage is to make a terse, simple conditional assignment statement. In other words, it offers one-line code to evaluate the first expression if the condition is true, and otherwise it evaluates the second expression.

<expression1> if <condition> else <expression2>

Example:

age = 15

# this if statement:
if age < 18:
   print('kid')
else:
   print('adult')
kid
# Ternary operator: one-line conditional expression
# Syntax: value_if_true if condition else value_if_false
print('kid' if age < 18 else 'adult')
kid

Ternary operators can be chained:

age = 15

# this ternary operator:
print('kid' if age < 13 else 'teen' if age < 18 else 'adult')
teen
# is equivalent to this if statement:
if age < 13:
    print('kid')
else:
    if age < 18:
        print('teen')
    else:
        print('adult')
teen

Switch-Case Statement

Switch-Case statements

In computer programming languages, a switch statement is a type of selection control mechanism used to allow the value of a variable or expression to change the control flow of program execution via search and map.

The Switch-Case statements, or Structural Pattern Matching, was firstly introduced in 2020 via PEP 622, and then officially released with Python 3.10 in September 2022.

Official Tutorial

The PEP 636 provides an official tutorial for the Python Pattern matching or Switch-Case statements.

Matching single values

response_code = 201
match response_code:
    case 200:
        print("OK")
    case 201:
        print("Created")
    case 300:
        print("Multiple Choices")
    case 307:
        print("Temporary Redirect")
    case 404:
        print("404 Not Found")
    case 500:
        print("Internal Server Error")
    case 502:
        print("502 Bad Gateway")
Created

Matching with the or Pattern

In this example, the pipe character (| or or) allows python to return the same response for two or more cases.

response_code = 502
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
Internal Server Error

Matching by the length of an Iterable

today_responses = [200, 300, 404, 500]
match today_responses:
    case [a]:
            print(f"One response today: {a}")
    case [a, b]:
            print(f"Two responses today: {a} and {b}")
    case [a, b, *rest]:
            print(f"All responses: {a}, {b}, {rest}")
All responses: 200, 300, [404, 500]

Default value

The underscore symbol (_) is used to define a default case:

response_code = 800
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
    case _:
        print("Invalid Code")
Invalid Code

Matching Builtin Classes

response_code = "300"
match response_code:
    case int():
            print('Code is a number')
    case str():
            print('Code is a string')
    case _:
            print('Code is neither a string nor a number')
Code is a string

Guarding Match-Case Statements

response_code = 300
match response_code:
    case int() if response_code > 99 and response_code < 500:
            print('Code is a valid number')
    case _:
            print('Code is an invalid number')
Code is a valid number

while Loop Statements

The while statement is used for repeated execution as long as an expression is True:

# while loop: repeat code as long as condition is True
spam = 0
while spam < 5:  # Continue while spam is less than 5
    print('Hello, world.')
    spam = spam + 1  # Increment counter to avoid infinite loop
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Quiz

Sign in to answer this quiz and track your learning progress

What does a while loop do?
A. Repeats code as long as the condition is True
B. Executes code exactly once
C. Executes code a fixed number of times
D. Skips code execution

break Statements

If the execution reaches a break statement, it immediately exits the while loop’s clause:

# break statement: exit loop immediately when encountered
while True:  # Infinite loop
    name = input('Please type your name: ')
    if name == 'your name':
        break  # Exit the loop immediately

print('Thank you!')
Please type your name: your name
Thank you!

continue Statements

When the program execution reaches a continue statement, the program execution immediately jumps back to the start of the loop.

# continue statement: skip rest of loop iteration and start next iteration
while True:
    name = input('Who are you? ')
    if name != 'Joe':
        continue  # Skip to next iteration, don't ask for password
    password = input('Password? (It is a fish.): ')
    if password == 'swordfish':
        break  # Exit loop when password is correct

print('Access granted.')
Who are you? Charles
Who are you? Debora
Who are you? Joe
Password? (It is a fish.): swordfish
Access granted.

For loop

The for loop iterates over a list, tuple, dictionary, set or string:

# for loop: iterate over each item in a sequence
pets = ['Bella', 'Milo', 'Loki']
for pet in pets:  # Loop through each pet in the list
    print(pet)  # Print each pet name
Bella
Milo
Loki
Quiz

Sign in to answer this quiz and track your learning progress

What does a for loop iterate over?
A. Only numbers
B. Only strings
C. Any iterable sequence (list, tuple, dictionary, set, string, etc.)
D. Only lists

The range() function

The range() function returns a sequence of numbers. It starts from 0, increments by 1, and stops before a specified number:

for i in range(5):
    print(f'Will stop at 5! or 4? ({i})')
Will stop at 5! or 4? (0)
Will stop at 5! or 4? (1)
Will stop at 5! or 4? (2)
Will stop at 5! or 4? (3)
Will stop at 5! or 4? (4)
Quiz

Sign in to answer this quiz and track your learning progress

What does range(5) generate?
A. Numbers from 1 to 5
B. Numbers from 0 to 4
C. Numbers from 0 to 5
D. Five random numbers

The range() function can also modify its 3 defaults arguments. The first two will be the start and stop values, and the third will be the step argument. The step is the amount that the variable is increased by after each iteration.

# range(start, stop, step)
for i in range(0, 10, 2):
   print(i)
0
2
4
6
8

You can even use a negative number for the step argument to make the for loop count down instead of up.

for i in range(5, -1, -1):
    print(i)
5
4
3
2
1
0

For else statement

This allows to specify a statement to execute in case of the full loop has been executed. Only useful when a break condition can occur in the loop:

for i in [1, 2, 3, 4, 5]:
   if i == 3:
       break
else:
   print("only executed when no item is equal to 3")

Ending a Program with sys.exit()

exit() function allows exiting Python.

import sys

while True:
    feedback = input('Type exit to exit: ')
    if feedback == 'exit':
        print(f'You typed {feedback}.')
        sys.exit()
Type exit to exit: open
Type exit to exit: close
Type exit to exit: exit
You typed exit.