---
title: Flow Control
description: The basics of python. We discuss about flow control here.
---
## Comparison Operators
| Operator | Meaning |
| -------- | ------------------------ |
| `==` | 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:
```python
>>> 42 == 42
True
>>> 40 == 42
False
>>> 'hello' == 'hello'
True
>>> 'hello' == 'Hello'
False
>>> 'dog' != 'cat'
True
>>> 42 == 42.0
True
>>> 42 == '42'
False
```
## Boolean (Logical) Operators
There are three Boolean operators: `and`, `or`, and `not`.
The `and` Operator’s _Truth_ Table:
| Expression | Evaluates to |
| ----------------- | ------------ |
| `True and True` | `True` |
| `True and False` | `False` |
| `False and True` | `False` |
| `False and False` | `False` |
The `or` Operator’s _Truth_ Table:
| Expression | Evaluates to |
| ---------------- | ------------ |
| `True or True` | `True` |
| `True or False` | `True` |
| `False or True` | `True` |
| `False or False` | `False` |
The `not` Operator’s _Truth_ Table:
| Expression | Evaluates to |
| ----------- | ------------ |
| `not True` | `False` |
| `not False` | `True` |
## Mixing Operators
You can mix boolean and comparison operators:
```python
>>> (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:
```python
>>> 2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
True
```
## `if` Statements
The `if` statement evaluates an expression, and if that expression is `True`, it then executes the following indented code:
```python
>>> name = 'Debora'
>>> if name == 'Debora':
... print('Hi, Debora')
...
# 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`:
```python
>>> name = 'Debora'
>>> if name == 'George':
... print('Hi, George.')
... else:
... print('You are not George')
...
# You are not George
```
Only after the `if` statement expression is `False`, the `elif` statement is evaluated and executed:
```python
>>> name = 'George'
>>> if name == 'Debora':
... print('Hi Debora!')
... elif name == 'George':
... print('Hi George!')
...
# Hi George!
```
the `elif` and `else` parts are optional.
```python
>>> 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:
```python
>>> age = 15
>>> # this if statement:
>>> if age < 18:
... print('kid')
... else:
... print('adult')
...
# output: kid
>>> # is equivalent to this ternary operator:
>>> print('kid' if age < 18 else 'adult')
# output: kid
```
Ternary operators can be chained:
```python
>>> age = 15
>>> # this ternary operator:
>>> print('kid' if age < 13 else 'teen' if age < 18 else 'adult')
>>> # is equivalent to this if statement:
>>> if age < 18:
... if age < 13:
... print('kid')
... else:
... print('teen')
... else:
... print('adult')
...
# output: teen
```
:::info
:bulb: Note that Python introduce [`match`](https://learnpython.com/blog/python-match-case-statement/) statement as another control statement in Python 3.10 to implement `switch` statement
:::
## `while` Loop Statements
The while statement is used for repeated execution as long as an expression is `True`:
```python
>>> spam = 0
>>> while spam < 5:
... print('Hello, world.')
... spam = spam + 1
...
# Hello, world.
# Hello, world.
# Hello, world.
# Hello, world.
# Hello, world.
```
## `break` Statements
If the execution reaches a `break` statement, it immediately exits the `while` loop’s clause:
```python
>>> while True:
... name = input('Please type your name: ')
... if name == 'your name':
... break
...
>>> print('Thank you!')
# Please type your name: your name
# Thank you!
```
It also works for the `for` loop
```python
>>> for i in range(5):
... if i == 3:
... break
... print(i)
# 0
# 1
# 2
```
## `continue` Statements
When the program execution reaches a `continue` statement, the program execution immediately jumps back to the start of the loop.
```python
>>> while True:
... name = input('Who are you? ')
... if name != 'Joe':
... continue
... password = input('Password? (It is a fish.): ')
... if password == 'swordfish':
... break
...
>>> print('Access granted.')
# Who are you? Charles
# Who are you? Debora
# Who are you? Joe
# Password? (It is a fish.): swordfish
# Access granted.
```
It also works for the `For` loop
```python
>>> for i in range(5):
... if i == 3:
... continue
... print(i)
# 0
# 1
# 2
# 4
```
## `For` loop
The `for` loop iterates over an iterable object like `range()`, `list`, `tuple`, `dictionary`, `set` or `string`:
```python
>>> pets = ['Bella', 'Milo', 'Loki']
>>> for pet in pets:
... print(pet)
...
# Bella
# Milo
# Loki
```
## The `range()` function
The `range()` function returns a sequence of numbers. It starts from 0, increments by 1, and stops before a specified number:
```python
>>> for i in range(5):
... print('Will stop at 5! or 4 ?'+str(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
```
The `range()` function can also modify it's 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.
```python
# 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.
```python
>>> for i in range(5, -1, -1):
... print(i)
...
# 5
# 4
# 3
# 2
# 1
# 0
```
## Ending a Program with `sys.exit()`
`exit()` function allows exiting Python.
```python
>>> import sys
>>> while True:
... feedback = input('Type exit to exit: ')
... if feedback == 'exit':
... print('You typed '+ feedback)
... sys.exit()
...
# Type exit to exit: open
# Type exit to exit: close
# Type exit to exit: exit
# You typed exit
```
## The [random](https://docs.python.org/3/library/random.html) module
## `seed()`
The `seed` method is used to initialize the random number generator.
```python
>>> random.seed(1)
>>> random.random()
# 0.13436424411240122
```
Setting the seed to a number will always return the same random number:
```python
>>> random.seed(1)
>>> random.random()
# 0.13436424411240122
>>> random.seed(1)
>>> random.random()
# 0.13436424411240122
>>> random.seed(1)
>>> random.random()
# 0.13436424411240122
>>> random.seed(1)
>>> random.random()
# 0.13436424411240122
>>> random.seed(1)
>>> random.random()
# 0.13436424411240122
```
## `randint()`
```python
random.randint(start: int, stop: int)
```
This method returns a random number between a given start and stop parameters:
```python
>>> random.randint(1, 5)
# 3
>>> random.randint(1, 5)
# 2
>>> random.randint(1, 5)
# 5
>>> random.randint(1, 5)
# 1
>>> random.randint(1, 5)
# 3
>>> random.randint(1, 5)
# 1
```
## `shuffle()`
The `shuffle` method takes in an iterable and shuffle it:
```python
>>> my_list = [1, 2, 3, 4]
>>> random.shuffle(my_list)
>>> my_list
# [1, 4, 3, 2]
>>> random.shuffle(my_list)
>>> my_list
# [2, 4, 3, 1]
>>> random.shuffle(my_list)
>>> my_list
# [4, 2, 3, 1]
```