We learned how we can change the flow of our program with the conditional statements if and else. Another way to control the flow is by using a Python for-loop or a Python while-loop. Loops, in essence, allow you to repeat a piece of code.
There are two ways to create a loop in Python. Let’s first look at Python’s for-loop. A for-loop iterates over the individual elements of the object you feed it. Sound difficult, but an example will hopefully clarify this:
>>> for letter in 'Hello': ... print(letter) ... H e l l o
We stumbled upon two concepts here that need and explanation: iterability and objects.
- An iterable is an object in Python that can return its members one at a time.
As you can see in the example code, a string of text is iterable. Most of Python’s data types are iterable in some way or another. If you want all the nitty-gritty details, head over to the page about iterators. Don’t forget to come back here after, though.
The next thing we need to tackle: objects. This is a big subject, and it has its own chapter in this tutorial: Python classes and objects. You don’t need to learn about it now in order to understand Python for-loops. It’s enough to know that everything in Python is an object, and objects have a certain type and certain properties. Being iterable is one of those properties.
So we know that a for-loop can loop over iterable objects. By returning its members one by one, you can loop over each element of an iterable with a for-statement.
The general template for a for-loop in Python is:
for <variable> in <iterable>: ... do something with variable
On each iteration, an element from
iterable is assigned to
variable. This variable exists and can be used only inside the loop. In Python, a string is iterable, and it returns one letter at a time. Hence, our for-loop prints ‘Hello,’ one letter at a time.
Python for-loops and lists
This is the ideal time to look at one more new data type. It’s the list, and it also happens to be iterable, hence it works very well with a for-loop:
>>> mylist = [1, 'a', 'Hello'] >>> for item in mylist: ... print(item) ... 1 a Hello
A list can be created with block quotes. Its contents are objects of whatever type you like, separated by commas, and they don’t need to be of the same type. A list can contain all the types we’ve seen so far: numbers, strings, booleans, and even other lists (creating a list of lists). You can get to the individual elements of a list manually too:
>>> mylist = [1, 2, 'Hello', ['a', 'b'] ] >>> mylist 1 >>> mylist + mylist 3 >>> mylist 'Hello' >>> mylist 'a'
From the last example, you can see how to access nested lists also.
while <expression>: do something
You should read this as: “while this expression is
True, keep doing the stuff below”.
Let’s take a look at an actual example:
>>> i = 1 >>> while i <= 4: ... print(i) ... i = i + 1 ... 1 2 3 4
Again, we seen an expression that follows the
while statement. As long as this expression evaluates to
True, the block inside of the while-loop executes repeatedly.
In the example above, we start with
i = 1. In the first iteration of the loop, we print
i and increase it by one. This keeps happening as long as
i is smaller than or equal to 4. The output of the print statement confirms that this loop runs four times.
Getting out of an Infinite loop
It’s easy to make a mistake here and find yourself caught in an infinite while-loop. This means the expression never evaluates to
True. It happens to the best of us. You can get out of this situation by pressing control+ c at the same time. Let’s artificially create such a situation:
>>> while True: ... print("Help I'm stuck in a loop!") ...
The output will look like this:
Help I'm stuck in a loop! Help I'm stuck in a loop! Help I'm stuck in a loop! Help I'm stuck in a loop! Help I'm stuck in a loop! Help I'm stuck in a loop!^C Traceback (most recent call last): File "<stdin>", line 2, in <module> KeyboardInterrupt
If you look closely, you see the characters
^C right before the error, meaning
control + c was pressed at that point. This key combination will get you out of most situations where your program runs indefinitely, so it’s good to remember it!
Infinite loops are less common in for-loops, because most iterable objects will at some point run out of elements to iterate over. However, if you ever find yourself in an infinite for-loop, you can use this same trick to get out of it.