# for/else, while/else#

In loops `for` and `while` you may optionally use `else` block.

## for/else#

In loop `for`:

• block `else` is executed if loop has completed iteration of list

• but it does not execute if `break` was applied in loop.

Example of loop `for` with `else` (block `else` is executed after loop `for`):

```In [1]: for num in range(5):
....:     print(num)
....: else:
....:     print("Run out of numbers")
....:
0
1
2
3
4
Run out of numbers
```

An example of loop `for` with `else` and `break` in loop (because of `break`, block `else` is not applied):

```In [2]: for num in range(5):
....:     if num == 3:
....:         break
....:     else:
....:         print(num)
....: else:
....:     print("Run out of numbers")
....:
0
1
2
```

Example of loop `for` with `else` and `continue` in loop (`continue` does not affect `else` block):

```In [3]: for num in range(5):
....:     if num == 3:
....:         continue
....:     else:
....:         print(num)
....: else:
....:     print("Run out of numbers")
....:
0
1
2
4
Run out of numbers
```

## while/else#

In loop `while`:

• block `else` is executed if loop has completed iteration of list

• but it does not execute if `break` was applied in loop.

Example of a loop `while` with `else` (block `else` runs after loop `while`):

```In [4]: i = 0
In [5]: while i < 5:
....:     print(i)
....:     i += 1
....: else:
....:     print("The End")
....:
0
1
2
3
4
The End
```

An example of a loop `while` with `else` and `break` in loop (because of `break`, block `else` is not applied):

```In [6]: i = 0

In [7]: while i < 5:
....:     if i == 3:
....:         break
....:     else:
....:         print(i)
....:         i += 1
....: else:
....:     print("The End")
....:
0
1
2
```