Intro to Loops¶
In this section we are going to introduce the for
loop and while loop. Loops can be used to iterate
over sequences (strings and lists for example)
and to execute statements of code multiple times.
As usual, create a Jupyter Notebook named intro_to_loops and follow along with the code examples.
For Loop¶
The general syntax for the for loop is
for <var> in <iterable>:
block_of_statements
The iterable is something that can be iterated over such as a string, or a list, or a range.
We will learn about other objects that are iterable throughout this course and we will learn about range
in this section later. The var is any variable name you chose which represents the object in the iterable.
The value of it changes each time through the loop. Looking at a specific
example will make it easier to understand.
family_names = ["Chris", "Joanna", "Penelope", "Isaac", "Hazel"]
print(family_names)
['Chris', 'Joanna', 'Penelope', 'Isaac', 'Hazel']
We will write a for loop to iterate over
the list family_names and print each name one at a time.
for name in family_names:
print(name)
Chris
Joanna
Penelope
Isaac
Hazel
The variable name changed each time through the for loop.
The first time through the loop name was assigned 'Chris',
the second time through the loop name was assigned 'Joanna',
and so on. On the last time through the loop
name was assigned 'Hazel'. In fact, name is still assigned
the string object 'Hazel'.
print(type(name))
print(name)
<class 'str'>
Hazel
There is nothing special about the variable name we use
which changes each time through the loop. In this case we chose
name because it makes sense to use that since we were iterating
over names in a list. However, we could of chosen x for example or
any valid name for a variable.
for x in family_names:
print(x)
Chris
Joanna
Penelope
Isaac
Hazel
Notice also that we are using indented blocks of code within the loop.
Anything that gets indented within the for loop is executed from
top to bottom each time through the loop. Here is another example.
for name in family_names:
print(f"{name} is a person in my family.")
print(f"Their full name is {name} Levy.")
print(f"1 + 1 is 2")
1 + 4 # this line is executed but we are not printing it
print("DONE!")
Chris is a person in my family.
Their full name is Chris Levy.
1 + 1 is 2
Joanna is a person in my family.
Their full name is Joanna Levy.
1 + 1 is 2
Penelope is a person in my family.
Their full name is Penelope Levy.
1 + 1 is 2
Isaac is a person in my family.
Their full name is Isaac Levy.
1 + 1 is 2
Hazel is a person in my family.
Their full name is Hazel Levy.
1 + 1 is 2
DONE!
Notice in the above example, any statements within the indented code block
inside the for loop are executed each time through the loop.
Whereas the print('DONE!') is only executed once
because it was outside the for loop.
Let’s look at an example of iterating over a string
object with a for loop. This is possible because
string objects in Python are also iterable.
hello = "Hello World"
print(hello)
Hello World
for letter in hello:
print(letter)
H
e
l
l
o
W
o
r
l
d
for letter in hello[::-1]: # reversed string
print(letter)
d
l
r
o
W
o
l
l
e
H
Apending In Loops¶
It is sometimes useful to create an empty list [],
and to keep appending to it within a loop while iterating over some other
iterable. This will also be a good example to show some if statements
within a for loop.
Here we define a list called numbers.
We want to iterate over numbers
and check if the number is greater than 6.
If so, append the number to a list new_numbers.
numbers = [9, 6, 4, 3, 6, 10, 12, 65, 8, 4, -10, -6, 7, -8]
new_numbers = [] # we create an empty list so we can append items to it
for num in numbers:
if num > 6:
print(f"Adding the item {num} to the list new_numbers.")
new_numbers.append(num)
print(f"The list new_numbers is now {new_numbers}.")
Adding the item 9 to the list new_numbers.
The list new_numbers is now [9].
Adding the item 10 to the list new_numbers.
The list new_numbers is now [9, 10].
Adding the item 12 to the list new_numbers.
The list new_numbers is now [9, 10, 12].
Adding the item 65 to the list new_numbers.
The list new_numbers is now [9, 10, 12, 65].
Adding the item 8 to the list new_numbers.
The list new_numbers is now [9, 10, 12, 65, 8].
Adding the item 7 to the list new_numbers.
The list new_numbers is now [9, 10, 12, 65, 8, 7].
new_numbers
[9, 10, 12, 65, 8, 7]
Here is another example of using a for loop to get the unique set of numbers from a list.
numbers = [
1,
1,
1,
2,
6,
7,
8,
8,
8,
8,
8,
10,
10,
10,
9,
9,
9,
0,
0,
0,
2,
2,
3,
3,
3,
4,
5,
]
unique_numbers = []
for x in numbers:
if x not in unique_numbers:
unique_numbers.append(x)
print(f"There are {len(unique_numbers)} unique numbers and they are {unique_numbers}")
There are 11 unique numbers and they are [1, 2, 6, 7, 8, 10, 9, 0, 3, 4, 5]
range()¶
The range() function is used to create an iterable
that is a sequence of numbers.
x = range(10)
x
range(0, 10)
print(type(x))
<class 'range'>
print(x)
range(0, 10)
You can iterate over the range with a for loop.
for i in x:
print(i)
0
1
2
3
4
5
6
7
8
9
for num in range(5):
print(num)
0
1
2
3
4
The general syntax for range is range(start, stop, step)
for x in range(10, 20):
print(x)
10
11
12
13
14
15
16
17
18
19
for x in range(5, 15, 2):
print(x)
5
7
9
11
13
# Using a range to sum up the numbers from 1 to 100
answer = 0
for i in range(1, 101): # up to but not including 101
answer = answer + i
print(answer) # 1 + 2 + 3 + 4 + ..... + 100
5050
Nested Loops¶
You can nest any number of for loops within a for loop.
Here is an example.
for i in range(3):
for j in range(3):
print(i, j)
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
# the multiplication table (using digits 0 through 9)
for i in range(10):
for j in range(10):
print(f"{i} multiplied by {j} is {i * j}")
print("----------------------")
0 multiplied by 0 is 0
----------------------
0 multiplied by 1 is 0
----------------------
0 multiplied by 2 is 0
----------------------
0 multiplied by 3 is 0
----------------------
0 multiplied by 4 is 0
----------------------
0 multiplied by 5 is 0
----------------------
0 multiplied by 6 is 0
----------------------
0 multiplied by 7 is 0
----------------------
0 multiplied by 8 is 0
----------------------
0 multiplied by 9 is 0
----------------------
1 multiplied by 0 is 0
----------------------
1 multiplied by 1 is 1
----------------------
1 multiplied by 2 is 2
----------------------
1 multiplied by 3 is 3
----------------------
1 multiplied by 4 is 4
----------------------
1 multiplied by 5 is 5
----------------------
1 multiplied by 6 is 6
----------------------
1 multiplied by 7 is 7
----------------------
1 multiplied by 8 is 8
----------------------
1 multiplied by 9 is 9
----------------------
2 multiplied by 0 is 0
----------------------
2 multiplied by 1 is 2
----------------------
2 multiplied by 2 is 4
----------------------
2 multiplied by 3 is 6
----------------------
2 multiplied by 4 is 8
----------------------
2 multiplied by 5 is 10
----------------------
2 multiplied by 6 is 12
----------------------
2 multiplied by 7 is 14
----------------------
2 multiplied by 8 is 16
----------------------
2 multiplied by 9 is 18
----------------------
3 multiplied by 0 is 0
----------------------
3 multiplied by 1 is 3
----------------------
3 multiplied by 2 is 6
----------------------
3 multiplied by 3 is 9
----------------------
3 multiplied by 4 is 12
----------------------
3 multiplied by 5 is 15
----------------------
3 multiplied by 6 is 18
----------------------
3 multiplied by 7 is 21
----------------------
3 multiplied by 8 is 24
----------------------
3 multiplied by 9 is 27
----------------------
4 multiplied by 0 is 0
----------------------
4 multiplied by 1 is 4
----------------------
4 multiplied by 2 is 8
----------------------
4 multiplied by 3 is 12
----------------------
4 multiplied by 4 is 16
----------------------
4 multiplied by 5 is 20
----------------------
4 multiplied by 6 is 24
----------------------
4 multiplied by 7 is 28
----------------------
4 multiplied by 8 is 32
----------------------
4 multiplied by 9 is 36
----------------------
5 multiplied by 0 is 0
----------------------
5 multiplied by 1 is 5
----------------------
5 multiplied by 2 is 10
----------------------
5 multiplied by 3 is 15
----------------------
5 multiplied by 4 is 20
----------------------
5 multiplied by 5 is 25
----------------------
5 multiplied by 6 is 30
----------------------
5 multiplied by 7 is 35
----------------------
5 multiplied by 8 is 40
----------------------
5 multiplied by 9 is 45
----------------------
6 multiplied by 0 is 0
----------------------
6 multiplied by 1 is 6
----------------------
6 multiplied by 2 is 12
----------------------
6 multiplied by 3 is 18
----------------------
6 multiplied by 4 is 24
----------------------
6 multiplied by 5 is 30
----------------------
6 multiplied by 6 is 36
----------------------
6 multiplied by 7 is 42
----------------------
6 multiplied by 8 is 48
----------------------
6 multiplied by 9 is 54
----------------------
7 multiplied by 0 is 0
----------------------
7 multiplied by 1 is 7
----------------------
7 multiplied by 2 is 14
----------------------
7 multiplied by 3 is 21
----------------------
7 multiplied by 4 is 28
----------------------
7 multiplied by 5 is 35
----------------------
7 multiplied by 6 is 42
----------------------
7 multiplied by 7 is 49
----------------------
7 multiplied by 8 is 56
----------------------
7 multiplied by 9 is 63
----------------------
8 multiplied by 0 is 0
----------------------
8 multiplied by 1 is 8
----------------------
8 multiplied by 2 is 16
----------------------
8 multiplied by 3 is 24
----------------------
8 multiplied by 4 is 32
----------------------
8 multiplied by 5 is 40
----------------------
8 multiplied by 6 is 48
----------------------
8 multiplied by 7 is 56
----------------------
8 multiplied by 8 is 64
----------------------
8 multiplied by 9 is 72
----------------------
9 multiplied by 0 is 0
----------------------
9 multiplied by 1 is 9
----------------------
9 multiplied by 2 is 18
----------------------
9 multiplied by 3 is 27
----------------------
9 multiplied by 4 is 36
----------------------
9 multiplied by 5 is 45
----------------------
9 multiplied by 6 is 54
----------------------
9 multiplied by 7 is 63
----------------------
9 multiplied by 8 is 72
----------------------
9 multiplied by 9 is 81
----------------------
break statement¶
The break statement can be used within a loop
to stop the execution of the loop before it is finished.
For example, you might want to “search” for something
each time through the loop and stop looping over the additional
items once you have found it.
Here is an example of looking the the number 0 in a list
using a for loop. We use break to stop the iterations
if the 0 is found.
some_stuff = [1, 9, 5, 7, 5.53, 5, 0, "a", "b", True, False]
print("starting the search")
for x in some_stuff:
print(x)
if x == 0:
break # this will stop the execution of the for loop and go the next section of code
print("ending the search")
starting the search
1
9
5
7
5.53
5
0
ending the search
continue statement¶
The continue statement can be used to stop the current iteration of
a loop and continue with the next iteration. So unlike the break
statement it does not stop the entire loop. It just skips the rest of the
code for the current iteration and moves to the next iteration in the loop.
Here is an example.
print(some_stuff)
[1, 9, 5, 7, 5.53, 5, 0, 'a', 'b', True, False]
print("starting the loop")
for thing in some_stuff:
if thing == "a" or thing == "b" or thing == 5.53:
continue # skips the rest of the code in the indented block and moves to the next item in the list
print(thing)
print("ending the loop")
starting the loop
1
9
5
7
5
0
True
False
ending the loop
while loop¶
Now that we know a little about the for loop we are going to
learn about the while loop. The general syntax is
while condition:
block_of_statements
The condition is a boolean expression or variable.
As long as the condition is True, the code within
the block_of_statements will be executed. As soon
as the condition is False, the code within the while
loop (which is the block_of_statements) will not be executed.
So you have to be careful with while loops because if the
condition is always True it will become an infinite loop
and loop forever!
Let’s look at this example.
The variable i is initially 0.
So the condition i < 10 is True. Therefore
the code indented within the loop is executed.
It prints 0 is less than 10 and then changes
the variable i to 1. Then it goes back
to the top and the condition is now i < 10 with
the value of i as 1 so the condition is True
and that code in the loop is repeated again.
Each time through the loop the value of i is
incremented by 1. Eventually i will be 10 and
the condition i < 10 will be False so the the code
within while loop will not be executed anymore.
print('start')
i = 0
while i < 10:
print(f'{i} is less than 10')
i = i + 1
print('end')
start
0 is less than 10
1 is less than 10
2 is less than 10
3 is less than 10
4 is less than 10
5 is less than 10
6 is less than 10
7 is less than 10
8 is less than 10
9 is less than 10
end
If the condition for a while loop is False to begin with, the code within
the loop is never executed. So the condition is always checked before
starting the loop. For example, nothing here will be printed.
i = -1
while i > 0: # is never True
print(i) # does not get executed
You can use the break and continue statements with
while loops just like with for loops. Here are some examples.
# break statement example
print('starting')
n = 10
while n > 0:
n = n - 1
if n == 3 or n == 1:
break
print(n)
print('ending')
starting
9
8
7
6
5
4
ending
# continue statement example
print('starting')
n = 10
while n > 0:
n = n - 1
if n == 3 or n == 1:
continue
print(n)
print('ending')
starting
9
8
7
6
5
4
2
0
ending
infinite while loops¶
If the condition within the while loop
is always True the loop will never terminate
and the code will execute forever. For example,
this loop would never terminate.
x = 1
while x > 0:
print(x)
x = x + 1
You would have to stop it manually by killing the program. If this ever happens in a Jupyter Notebook you can press the stop (square) button at the top of the notebook to stop the execution of the code.
pass statement¶
The pass statement is not related to loops but this is a good place to learn about it because
we have just learned about the break and continue statements.
The pass statement can be used as a fill in for future code that is not written yet.
You can use the pass statement to avoid getting an error when empty code is not allowed in
indented code blocks. Here are some examples.
a = 2
if a == 2:
# some code to be written at a later time
print('I am done')
File "<ipython-input-31-6c997b82b4d7>", line 5
print('I am done')
^
IndentationError: expected an indented block
Notice that the above code returns a IndentationError. This is because
we have an indented code block and no code is in the block.
It may be the case that we have some complex logic to write but
we want to do it at a later time without the code breaking.
That is, if condition a == 2 is True then we want to skip that indented
code block and continue on with the code. This is what the pass statement is used
for.
a = 2
if a == 2:
# some code to be written at a later time
pass
print('I am done')
I am done
Here is another example using pass.
for i in range(10):
if i > 5:
print(i)
else:
# come back to this code later
pass
6
7
8
9