## Flow control

Conditions, if statements, loops.

## Conditions

```
True # boolean True (capitalised)
False # boolean False (capitalised)
x > 3 # True if x is greater than 3, else False
x < 3 # True if x is less than 3, else False
x == 3 # True if x is equal to 3, else False
x >= 3 # True if x is greater than or equal to 3,
# else False
x <= 3 # True if x is less than or equal to 3,
# else False
x != 3 # True if x is not equal to 3, else False
k = [2, 4, 6, 8]
x in k # True if value x is present in
# sequence k, else False
x not in k # True if value x is not present in
# sequence k, else False
a is b # True is a and b are the same object
# equivalent to id(a)==id(b)
a is not # True is a and b are not the same object
```

## Compound conditions

```
not x > 3 # True if x is NOT greater than 3
# equivalent to x <= 3
x < 3 and y < 2 # True if x is less than 3 AND y is less than 2
x < 3 or y < 2 # True if x is less than 3 OR y is less than 2
5 <= z < 10 # True if z is greater than or equal to 5 AND
# z is less than 10
```

## Falsey and truthy values

```
0 # 0 or 0.0 count as False
# Any non-zero number counts as True
[] # Any empty collection counts as False
# Any non-empty collection counts as True
# Collections include lists, tuples, dicts, sets
None # The value None counts as False
```

## If statements

```
if x > 10:
print('big') # Only executed if x is greater than 10
if x > 10:
print('big') # Only executed if x is greater than 10
else:
print('small') # Executed if x is less than or equal to 10
if x > 10:
print('big') # Only executed if x is greater than 10
elif x > 5:
print('mid') # Only executed if x is greater than 5 but
# less than or equal to 10
else:
print('small') # Executed if x is less than or equal to 5
```

## While loops

```
a = 0
while a < 3:
print(a) # prints 0 1 2
a += 1
while True:
print('.') # prints . . . forever
# useful with a break statement
```

## For loops

```
for i in range(5): # from 0 up to but not including 5
print(i) # prints:
# 0
# 1
# 2
# 3
# 4
for i in range(2, 5): # from 2 up to but not including 5
print(i) # prints:
# 2
# 3
# 4
for i in range(1, 9, 2): # from up to but not including 9
print(i) # in steps of 2
# prints:
# 1
# 3
# 5
# 7
k = [20, 50, 30 10]
for x in k: # loops over each element in k
print(x) # prints:
# 20
# 30
# 50
# 10
for i, x in enumerate(k): # loops over each element in k
print(i, x) # prints:
# 0 20
# 1 30
# 2 50
# 3 10
m = ['ab', 'cd', 'ef', 'gh']
n = [10, 20, 30, 40]
for a, b in zip(m, n): # loops over each element in m, n
print(i, x) # prints:
# ab 10
# cd 20
# ef 30
# gh 40
```