Loops
Loops
Imagine you peel potatoes. You take the first potato from the bag, peel it, put it in the pot. Then take another potato, peel it, put it away - until all the potatoes are peeled. Now, imagine that you have to program the robot that does this. How do you get down to it?
The simplest yet least effective idea is to write as many operations of this sort: take the potato - peel - put in a pot, as there are potatoes in the bag. It's a bad idea, because:
-
first of all, it is a one-time action (because next time we will have a different number of potatoes and we will have to modify the program),
-
Secondly, this is not efficient because if you peel potatoes for an army regiment, you have to write several hundred such repetitions* manually.
The easiest and most effective way is to write the program the following way:
- if there are still potatoes in the bag:
-
Take a potato,
-
peel it,
-
put it in the pot,
-
- go back to point one.
This way will always work, no matter if we have three potatoes to peel, ten or one hundred and fifty.
* Cyclic repetition of a set of actions, e.g. take a potato - peel it - put it in the pot, is called an iteration.
Loop structure
In the Python language (and in all others too) there are special structures called loops. Loops are the repetitions of a set of actions. There are many ways to write loops, but we Python coders, most often use for-in constructions.
To explain how such a loop works, let's consider an example:
# a bag of potatoes
bag = [“potato 1”, “potato 2”, “potato 3”, “potato 4”,
“potato 5”]
# we make a loop
for potato in bag:
print(potato, “peeled!”)
Creating for-in loops
The for - in loop is created as follows:
-
First, we have the keyword for,
-
then we declare the variable in which successive elements from the collection will be placed; in our case it is the potato variable, in which successive values from the bag list will be placed,
-
then we write the keyword in,
-
At the end we state the collection, which we iterate through.
# For each potato in the bag, do the following
for potato in bag:
Pay attention to the colon at the end of the code line. It is mandatory!
Print instruction
What is to happen as the next step in the loop (peel the potato) is written in the code block (where there is the print instruction). This block of code is the so-called loop body, all the instructions are to be repeated as long as the potatoes are in the bag. Note that the print line is indented in relation to the for instructions. This indentation is mandatory. It can be 1 tab (it will work, but is reluctantly accepted by programmers), or several spaces (good solution - preferably 4 spaces). All the instructions inside the loop should be indented!
The loop will take another element from the list and this element will be assigned to the potato variable. Then the body of the loop (i.e. the code in the indentation) will be executed. After the indented code is finished, another list element will be taken and assigned to the potato variable. This will be done as long as there are some other elements in the bag list.
This solution is universal! If the bag list contains 100 potatoes, it will be done 100 times. If only one, it will be done only once. If the list is empty - it won't be done even once, because there won't be any potatoes in the bag! :)
Task 1
We are not going to peel potatoes in the tasks. We will work with cooler things, namely The Beatles band. Take a look at the code. You will find there a list of songs from the album "Please Please Me". In a for - in loop, iterate through the song list and display each song separately.
Go to task one: Task 1
See solution: Solution to Task 1
Task 2
Look at the code. You will find there a list named please_please_me_time, which contains the duration of each song from the album "Please Please Me" in seconds. In a for - in loop, iterate through this list and sum up all the times. Display the result on the screen.
How to do this?
First declare a variable, name it somehow, e.g. result, and assign the initial value of 0 to it. Then, in the body of the loop, add the value of the next loop element to the variable result.
Go to the second task: Task 2
See solution: Solution to Task 2
Task 3
It's time for something more difficult: repeat the code from the first task, but instead of displaying subsequent strings from the please_please_me list, do the following:
Display the title of the song, the text "\t" (the character \t means tab) and the duration of the song on a single line.
Go to task three: Task 3
See solution: Solution to Task 3