For loops 1 - intro
Download exercises zip
If we want to perform some actions for each element of a collection, we will need the so-called for
loop, which allows to iterate any sequence.
What to do
Unzip exercises zip in a folder, you should obtain something like this:
for
for1-intro.ipynb
for1-intro-sol.ipynb
for2-strings.ipynb
for2-strings-sol.ipynb
for3-lists.ipynb
for3-lists-sol.ipynb
for4-tuples.ipynb
for4-tuples-sol.ipynb
for5-sets.ipynb
for5-sets-sol.ipynb
for6-dictionaries.ipynb
for6-dictionaries-sol.ipynb
for7-nested.ipynb
for7-nested-sol.ipynb
for8-chal.ipynb
jupman.py
WARNING: to correctly visualize the notebook, it MUST be in an unzipped folder !
open Jupyter Notebook from that folder. Two things should open, first a console and then a browser. The browser should show a file list: navigate the list and open the notebook
for1-intro.ipynb
Go on reading the exercises file, sometimes you will find paragraphs marked Exercises which will ask to write Python commands in the following cells.
Shortcut keys:
to execute Python code inside a Jupyter cell, press
Control + Enter
to execute Python code inside a Jupyter cell AND select next cell, press
Shift + Enter
to execute Python code inside a Jupyter cell AND a create a new cell aftwerwards, press
Alt + Enter
If the notebooks look stuck, try to select
Kernel -> Restart
Iteration by element
If we have a sequence like this list:
[2]:
sports = ['volleyball', 'tennis', 'soccer', 'swimming']
and we want ito use every element of the list in some way (for example to print them), we can go through them (more precisely, iterate) with a for
cycle:
[3]:
for element in sports:
print('Found an element!')
print(element)
print('Done!')
Found an element!
volleyball
Found an element!
tennis
Found an element!
soccer
Found an element!
swimming
Done!
Let’s see what happens in Python Tutor:
[4]:
# WARNING: FOR PYTHON TUTOR TO WORK, REMEMBER TO EXECUTE THIS CELL with Shift+Enter
# (it's sufficient to execute it only once)
import jupman
[5]:
sports = ['volleyball', 'tennis', 'soccer', 'swimming']
for element in sports:
print('Found an element!')
print(element)
print('Done!')
jupman.pytut()
Found an element!
volleyball
Found an element!
tennis
Found an element!
soccer
Found an element!
swimming
Done!
[5]:
Names of variables in for
At each iteration, an element of the list is assigned to the variable element
.
As variable name we can choose whatever we like, for example this code is totally equivalent to the previous one:
[6]:
sports = ['volleyball', 'tennis', 'soccer', 'swimming']
for name in sports:
print('Found an element!')
print(name)
print('Done!')
Found an element!
volleyball
Found an element!
tennis
Found an element!
soccer
Found an element!
swimming
Done!
We need to be careful about one thing:
II COMMANDMENT: Whenever you insert a variable in a for
cycle, such variables must be new
If you defined the variable before, you shall not reintroduce it in a for
, as this would bring confusion in the readers’ mind.
For example:
[7]:
sports = ['volleyball', 'tennis', 'soccer', 'swimming']
my_var = 'hello'
for my_var in sports: # you lose the original variable
print(my_var)
print(my_var) # prints 'swimming' instead of 'hello'
volleyball
tennis
soccer
swimming
swimming
Iterating strings
Strings are sequences of characters, so we can iterate them with for
:
[8]:
for character in "hello":
print(character)
h
e
l
l
o
Iterating tuples
Tuples are also sequences so we can iterate them:
[9]:
for word in ("I'm", 'visiting', 'a', 'tuple'):
print(word)
I'm
visiting
a
tuple
Questions - iteration
Look at the following code fragments, and for each try guessing the result it produces (or if it gives an error):
for i in [1,2,3]: print(i)
for x in 7: print(x)
for x in [7]: print(x)
for x in ['a','b','c']: x
for i in []: print('GURB')
for i in [1,2,3]: print(type(i))
for i in '123': print(type(i))
for i in 'abc': print(i)
for x in ((4,5,6)): print(x)
for x in [[1],[2,3],[4,5,6]]: print(x)
x = 5 for x in ['a','b','c']: print(x) print(x)
for x in ['a','b','c']: pass print(x)
for x in [1,2,3,4,5,6,7,8]: if x % 2 == 0: print(x)
la = [4,5,6] for x in la: print(x) la.reverse() for x in la[1:]: print(x)
Exercise - magic carpet
✪ Months ago you bought a carpet from a pitchman. After some time, after a particularly stressful day, you say ‘I wish I went on vacation to some exotic places, like say, Marrakesh!’ To your astonishment, the carpet jumps in the air and answers: ‘I hear and obey!’
Write some code which given the lists of places trip1
and trip2
prints all the visited stops.
Example - given:
trip1 = ['Marrakesh','Fez','Bazaar','Kasbah']
trip2 = ['Koutoubia', 'El Badii', 'Chellah']
Prints:
The first trip starts
You: Let's go to Marrakesh !
Carpet: I hear and obey
You: Let's go to Fez !
Carpet: I hear and obey
You: Let's go to Bazaar !
Carpet: I hear and obey
You: Let's go to Kasbah !
Carpet: I hear and obey
End of second trip
The second trip starts
You: Let's go to Koutoubia !
Carpet: I hear and obey
You: Let's go to El Badii !
Carpet: I hear and obey
You: Let's go to Chellah !
Carpet: I hear and obey
End of second trip
[10]:
trip1 = ['Marrakesh','Fez','Bazaar','Kasbah']
trip2 = ['Koutoubia', 'El Badii', 'Chellah']
# write here
Esercise - evensum
✪ Given the list numbers
, write some code which calculates and prints the sum of the even elements (not the elements at even indexes !)
Example - given:
numbers = [3,4,1,5,12,7,9]
finds 4
and 12
so it must print:
16
[11]:
numbers = [3,4,1,5,12,7,9]
# write here
Exercise - birbantello
✪ Given a string in lowercase, write some code which prints each character in uppercase followed by the character as lowercase.
HINT: to obtain uppercase characters use the
.upper()
method
Example - given:
s = "birbantello"
Prints:
B b
I i
R r
B b
A a
N n
T t
E e
L l
L l
O o
[12]:
s = "birbantello"
# write here
Exercise - articulate
✪ A new word is taught to a kid. He knows a lot of characters from the alphabet, but not all of them. To remember the known ones, he treats them as they where actors divided in three categories: the good
, bad
ad ugly
. Write some code which given a word
prints all the characters and for each of them tells whether it is good, bad or ugly. If a character is not recognized by the kid, prints ‘not interesting’.
Example - given:
word = 'articulate'
good = 'abcde'
bad = 'ru'
ugly = 'ijklmn'
Prints:
a is good
r is bad
t is not interesting
i is ugly
c is good
u is bad
l is ugly
a is good
t is not interesting
e is good
[13]:
word = 'articulate'
good = 'abcde'
bad = 'ru'
ugly = 'ijklmn'
# write here
Exercise - gala
✪ At a gala event, many high-society people are invited. At the beginning of the evening, doors are opened and guests enter a queue
. Unfortunately, during these occasions uninvited guests always show up, so the concierge in the atrium is given a list of unwelcome
ones. Whenever a guest is recognized as unwelcome, he will be taken care by the strong hands of Ferruccio the bouncer. Illustrious guests will be written instead in the list admitted
.
Write some code which prints the various passages of the event.
Example - given:
queue = ['Consul','Notary','Skeleton','Dean','Goblin','Vampire', 'Jeweller']
unwelcome = {'Vampire','Goblin','Skeleton'}
admitted = []
Prints:
Open the doors!
Good evening Mr Consul
This way, Your Excellence
Next in line !
Good evening Mr Notary
This way, Your Excellence
Next in line !
Good evening Mr Skeleton
Ferruccio, would you please take care of Mr Skeleton ?
Next in line !
Good evening Mr Dean
This way, Your Excellence
Next in line !
Good evening Mr Goblin
Ferruccio, would you please take care of Mr Goblin ?
Next in line !
Good evening Mr Vampire
Ferruccio, would you please take care of Mr Vampire ?
Next in line !
Good evening Mr Jeweller
This way, Your Excellence
Next in line !
These guests were admitted: Consul, Notary, Dean, Jeweller
[14]:
queue = ['Consul','Notary','Skeleton','Dean','Goblin','Vampire', 'Jeweller']
unwelcome = {'Vampire','Goblin','Skeleton'}
admitted = []
# write here
Exercise - balance
✪✪ A crop of seeds has been harvested, and seeds will be poured in a certain number of bags
of a given capacity
each (i.e. 15
kilograms).
The seeds arrive in containers
of variable capacity. Each container is placed on a weight scale and its content is poured in the current bag. As soon as the quantity capacity
is reached, the scale weight is emptied, the bag is substituted with a new one which starts being filled from what remains from the previous fill. Write some code which prints the procedure.
Example - given:
containers = [5,1,7,4,3,9,5,2,7,3]
capacity = 15
Prints:
Take 5 kg
The scale weight shows 5 kg
Take 1 kg
The scale weight shows 6 kg
Take 7 kg
The scale weight shows 13 kg
Take 4 kg
The scale weight shows 17 kg
We reached the capacity of 15 kg, there remain 2 kg
Take 3 kg
The scale weight shows 5 kg
Take 9 kg
The scale weight shows 14 kg
Take 5 kg
The scale weight shows 19 kg
We reached the capacity of 15 kg, there remain 4 kg
Take 2 kg
The scale weight shows 6 kg
Take 7 kg
The scale weight shows 13 kg
Take 3 kg
The scale weight shows 16 kg
We reached the capacity of 15 kg, there remain 1 kg
We filled 3 bags
[15]:
containers = [5,1,7,4,3,9,5,2,7,3]
capacity = 15
# write here
Counting with range
If we need to keep track of the iteration number, we can use the iterable sequence range
, which produces a series of integer numbers from 0
INCLUDED until the specified number EXCLUDED:
[16]:
for i in range(5):
print(i)
0
1
2
3
4
Note it did not print the limit 5
When we call range
we can also specify the starting index, which is INCLUDED in the generated sequence, while the arrival index is always EXCLUDED:
[17]:
for i in range(3,7):
print(i)
3
4
5
6
Counting intervals: we can specify the increment to apply to the counter at each iteration by passing a third parameter, for example here we specify an increment of 2
(note the final 18
index is EXCLUDED from the sequence):
[18]:
for i in range(4,18,2):
print(i)
4
6
8
10
12
14
16
Reverse order: we can count in reverse by using a negative increment:
[19]:
for i in range(5,0,-1):
print(i)
5
4
3
2
1
Note how the limit 0
was not reached, in order to arrive there we need to write
[20]:
for i in range(5,-1,-1):
print(i)
5
4
3
2
1
0
Questions - range
Look at the following code fragments, and for each try guessing the result it produces (or if it gives an error):
for x in range(1): print(x)
for i in range(3): i
for i in range(3): print(i)
for x in range(-1): print(x)
for 'm' in range(3): print('m')
for i in range(3): i-1
for x in range(6,4,-1): print(x)
for x in range(1,0,-1): print(x)
for x in range(3,-3,-2): print(x)
for x in 3: print(x)
x = 3 for i in range(x): print(i) for i in range(x,2*x): print(i)
for x in range(range(3)): print(x)
Exercise - printdoubles
✪ Given a positive number n
(i.e. n=4
) write some code which prints:
The double of 0 is 0
The double of 1 is 2
The double of 2 is 4
The double of 3 is 6
[21]:
n = 4
# write here
Exercise - multiples or not
✪✪ Write some code which given two integer positive numbers k
and b
:
first prints all the numbers from
k
INCLUDED tob
INCLUDED which are multiples ofk
the prints all the numbers from
k
EXCLUDED tob
EXCLUDED which are NOT multiples ofk
Example - given:
k,b = 3,15
it prints:
Multiples of 3
3
6
9
12
15
Not divisible by 3
4
5
7
8
10
11
13
14
[22]:
k,b = 3,15
# write here
Exercise - ab interval
✪✪ Given two integers a
and b
greater or equal than zero, write some code which prints all the integer numbers among the two bounds INCLUDED.
NOTE:
a
may be greater, equal or less thanb
, your code must handle all the cases.
Example 1 - given:
a,b = 5,9
it must print:
5
6
7
8
9
Example 2 - given:
a,b = 8,3
it must print:
3
4
5
6
7
8
[23]:
a,b = 5,9 # 5 6 7 8 9
#a,b = 8,3 # 3 4 5 6 7 8
#a,b = 6,6 # 6
# write here
Exercise - FizzBuzz
Write some code which prints the numbers from 1 to 35 INCLUDED, but when a number is divisible by 3 prints instead FIZZ, when it is divisible by 5 prints BUZZ, and when it is divisible by 3 and 5 prints FIZZBUZZ.
Expected output:
1
2
FIZZ
4
BUZZ
FIZZ
7
8
FIZZ
BUZZ
11
FIZZ
13
14
FIZZBUZZ
16
17
FIZZ
19
BUZZ
FIZZ
22
23
FIZZ
BUZZ
26
FIZZ
28
29
FIZZBUZZ
31
32
FIZZ
34
BUZZ
[24]:
# write here
Iterating by index
If we have a sequence like a list, sometimes during the iteration it is necessary to know in which cell position we are. We can generate the indexes with range
, and use them to access a list:
[25]:
sports = ['volleyball', 'tennis', 'soccer', 'swimming']
for i in range(len(sports)):
print('position', i)
print(sports[i])
position 0
volleyball
position 1
tennis
position 2
soccer
position 3
swimming
Note we passed to range
the dimension of the list obrained with len
.
Exercise - kitchen
✪ Write some code which given a list of an even number of strings kitchen
, prints the couples of elements we can find in sequences, one row at a time
Example - given:
kitchen = ['oil', 'soup', 'eggs', 'pie', 'tomato sauce', 'pasta', 'meat sauce', 'lasagna']
Prints:
oil, soup
eggs, pie
tomato sauce, pasta
meat sauce, lasagna
[26]:
kitchen = ['oil', 'soup', 'eggs', 'pie', 'tomato sauce', 'pasta', 'meat sauce', 'lasagna']
# write here
Exercise - neon
✪ Given two lists la
and lb
of equal length \(n\), write some code which prints their characters separated by a space on \(n\) rows
Example - given:
la = ['n','e','o','n']
lb = ['s','h','o','w']
prints:
n s
e h
o o
n w
[27]:
la = ['n','e','o','n']
lb = ['s','h','o','w']
# write here
Exercise - emotions
✪ Given the list of strings emotions
and another one grade
containing the numbers -1
and 1
, write some code which prints the emotions followed with ‘positive’ if their corresponding grade is a number greater than zero or ‘negative’ otherwise
Example - given:
emotions = ['Fear', 'Anger','Sadness','Joy','Disgust','Ecstasy']
grade = [-1, -1, -1, 1, -1, 1]
prints:
Fear : negative
Anger : negative
Sadness : negative
Joy : positive
Disgust : negative
Ecstasy : positive
[28]:
emotions = ['Fear', 'Anger','Sadness','Joy','Disgust','Ecstasy']
grade = [-1, -1, -1, 1, -1, 1]
# write here
Exercise - organetto
✪ Given a string s
, write some code which prints all the substrings you can obtain from the position of the character 'n'
and which terminates with the last character of s
.
Example - given:
s = 'organetto'
Prints:
netto
etto
tto
to
o
[29]:
s = 'organetto'
# write here
Exercise - sghiribizzo
Write some code which given the string s
prints all the possible combinations of row couples such that a row begins with the first characters of s
and the successive continues with the following characters.
Example - given:
s = 'sghiribizzo'
prints:
s
ghiribizzo
sg
hiribizzo
sgh
iribizzo
sghi
ribizzo
sghir
ibizzo
sghiri
bizzo
sghirib
izzo
sghiribi
zzo
sghiribiz
zo
sghiribizz
o
sghiribizzo
[30]:
s = 'sghiribizzo'
# write here
Exercise - dna
Given two DNA strings s1
and s2
of equal length, write some code which prints among the first and second string another string made by spaces ` ` and pipe \(|\) where equal characters are found.
HINT: create a list containing the characters space or the character \(|\), and only at the end convert the string by using strings
join
method (doing so is much more efficient than keep generating strings with+
operator)
Example - given:
s1 = "ATACATATAGGGCCAATTATTATAAGTCAC"
s2 = "CGCCACTTAAGCGCCCTGTATTAAAGTCGC"
Prints:
ATACATATAGGGCCAATTATTATAAGTCAC
|| || | | | | ||||| |
CGCCACTTAAGCGCCCTGTATTAAAGTCGC
[31]:
s1 = "ATACATATAGGGCCAATTATTATAAGTCAC"
s2 = "CGCCACTTAAGCGCCCTGTATTAAAGTCGC"
# write here
Exercise - sportello
✪✪ Given a string s
, prints the first half of the characters as lowercase and the following half as uppercase.
if the string is of odd length, the first half must have one character more than the second string.
Example - given:
s = 'sportello'
Your code must print:
s
p
o
r
t
E
L
L
O
(note that ‘sportello’ has odd length and there are five characters in the first half and four in the second
Show solution[32]:
s = 'sportello' # sportELLO
#s = 'maglia' # magLIA
# write here
Exercise - farm
✪✪ Given a dictionary sounds
which associates animal names to the sounds they produce, and a list rooms
of tuples of 2 elements containing the animal names, write some code that for each room prints the sounds you hear while passing in front of it.
NOTE: the rooms to print are numbered from 1
Example - given:
sounds = {'dog':'Bark!',
'cat':'Mew!',
'cow':'Moo!',
'sheep':'Bleat!'}
rooms = [('dog', 'sheep'),
('cat','cow'),
('cow', 'dog')]
Prints:
In the room 1 we hear Bark! and Bleat!
In the room 2 we hear Mew! and Moo!
In the room 3 we hear Moo! and Bark!
[33]:
sounds = {'dog':'Bark!',
'cat':'Mew!',
'cow':'Moo!',
'sheep':'Bleat!'}
rooms = [('dog', 'sheep'),
('cat','cow'),
('cow', 'dog')]
# write here
Exercise - pokemon
✪✪✪ Given a list pokemon
and a number g
of groups, write some code which prints g
rows showing all the group components. Group the pokemons in the order you find them in the list.
HINT 1: To obtain the number of group components you should use integer division
//
HINT 2: to print group components use the method
join
of strings
Example 1 - given:
# 0 1 2 3 4 5
pokemon = ['Charizard','Gengar','Arcanine','Bulbasaur','Blaziken','Umbreon',
# 6 7 8 9 10 11
'Lucario','Gardevoir','Eevee','Dragonite', 'Volcarona', 'Sylveon' ]
g = 3
prints:
group 1 : Charizard and Gengar and Arcanine and Bulbasaur
group 2 : Blaziken and Umbreon and Lucario and Gardevoir
group 3 : Eevee and Dragonite and Volcarona and Sylveon
Example 2 - given:
# 0 1 2 3 4 5
pokemon = ['Charizard','Gengar','Arcanine','Bulbasaur','Blaziken','Umbreon',
# 6 7 8 9 10 11
'Lucario','Gardevoir','Eevee','Dragonite', 'Volcarona', 'Sylveon' ]
g = 4
prints:
group 1 : Charizard and Gengar and Arcanine
group 2 : Bulbasaur and Blaziken and Umbreon
group 3 : Lucario and Gardevoir and Eevee
group 4 : Dragonite and Volcarona and Sylveon
[34]:
# 0 1 2 3 4 5
pokemon = ['Charizard','Gengar','Arcanine','Bulbasaur','Blaziken','Umbreon',
# 6 7 8 9 10 11
'Lucario','Gardevoir','Eevee', 'Dragonite', 'Volcarona', 'Sylveon' ]
g = 3
#g = 4
# write here
Modifying during iteration
Suppose you have a list la
containing characters, and you are asked to duplicate all the elements, for example if you have
lst = ['a','b','c']
after your code it must result
>>> print(lst)
['a','b','c','a','b','c']
Since you gained such great knowledge about iteration,you might be tempted to write something like this:
for char in lst:
lst.append(char) # WARNING !
QUESTION: Do you see any problem?
Show answerX COMMANDMENT: You shall never ever add nor remove elements from a sequence you are iterating with a for
!
Falling into such temptations would produce totally unpredictable behaviours (do you know the expression pulling the rug out from under your feet ? )
What about removing? We’ve seen that adding is dangerous, but so is removing. Suppose you have to eliminate all the elements from a list, you might be tempted to write something like this:
[35]:
my_list = ['a','b','c','d','e']
for el in my_list:
my_list.remove(el) # VERY BAD IDEA
Have a close look at the code. Do you think we removed everything, uh?
[36]:
my_list
[36]:
['b', 'd']
O_o'
The absurd result is given by the internal implementation of Python, our version of Pyhton gives this result, yours might give a completely different one. So be careful!
If you really need to remove elements from a sequence you are iterating, use a while cycle or duplicate first a copy of the original sequence.
Exercise - duplicate
✪ Try writing some code which MODIFIES a list la
by duplicating the elements
use a
for
cycleDO NOT use list multiplication
Example - given:
la = ['a','b','c']
after your code, it must result:
>>> la
['a','b','c','a','b','c']
[37]:
la = ['a','b','c']
# write here
Exercise - hammers
✪ Given a list of characters la
, MODIFY the list by changing all the characters at even indeces with the character z
Example - given:
la = ['h', 'a', 'm', 'm', 'e', 'r', 's']
after your code, it must result:
>>> print(la)
['z', 'a', 'z', 'm', 'z', 'r', 'z']
NOTE: here we are not adding nor removing cells from the list
[38]:
la = ['h', 'a', 'm', 'm', 'e', 'r', 's']
# write here
Exercise - Orangutan
✪✪ Given two strings sa
and sb
, write some code which places in the string sc
a string composed by alternating all the characters in sa
and sb
.
if a string is shorter than the other one, at the end of
sc
put all the remaining characters from the other string.HINT: even if it is possible to augment a string a character at a time at each iteration, each time you do so a new string is created (because strings are immutable). So it’s more efficient to keep augmenting a list, and then convert to string only at the very end.
Example - given:
sa,sb = 'gibbon', 'ORANGUTAN'
after your code it must result:
>>> print(sc)
gOiRbAbNoGnUTAN
[39]:
sa,sb = 'gibbon', 'ORANGUTAN' # gOiRbAbNoGnUTAN
#sa,sb = 'cruise ship', 'BOAT' # cBrOuAiTse ship
# write here
Exercise - basket
✪✪✪ There is a basket
full of fruits, which we represent as a list of strings. We want to take all the fruits and put them in a plate, in the same order we find them in the basket. We must take only the fruits contained in the set preferences
.
The
basket
may contain duplicates, if they are in the preferences you must take them allthe fruits are to be taken in the same order in which they were found
Example - given:
basket = ['strawberry', 'melon', 'cherry', 'watermelon', 'apple', 'melon','watermelon', 'apple', ]
preferences = {'cherry', 'apple', 'strawberry'}
plate = []
after your code, it must result:
>>> print(basket)
['melon', 'watermelon', 'melon', 'watermelon']
>>> print(plate)
['strawberry', 'cherry', 'apple', 'apple']
You can solve the problem in two ways:
Way 1 (simple and recommended): create a list
new_basket
and finally assign the variablebasket
to itWay 2 (hard, slow, not recommended but instructive): MODIFY the original
basket
list, using the pop method and without ever reassigningbasket
, so no rows beginning withbasket =
Try solving the exercise in both ways.
Either way, always remember the sacred X COMMANDMENT:
You shall never ever add nor remove elements from a sequence you are iterating with a for
!
[40]:
# WAY 1
basket = ['strawberry', 'melon', 'cherry', 'watermelon', 'apple', 'melon','watermelon', 'apple', ]
preferences = {'cherry', 'apple', 'strawberry'}
plate = []
# write here
[41]:
# WAY 2
basket = ['strawberry', 'melon', 'cherry', 'watermelon', 'apple', 'melon','watermelon', 'apple', ]
preferences = {'cherry', 'apple', 'strawberry'}
plate = []
# write here
break
and continue
commands
We can use the commands break
and continue
to have even more control on loop execution.
NOTE: Please use sparingly!
When there is a lot of code in the cycle it’s easy to ‘forget’ about their presence and introduce hard-to-discover bugs. On the other hand, in some selected cases these commands may increase code readability, so as everything use your judgement.
Terminate with break
To immediately exit a cycle you can use the break
command:
[42]:
for x in 'PARADE':
if x == 'D':
print('break, exits the loop!')
break
print('After the break')
print(x)
print('Loop is over !')
P
A
R
A
break, exits the loop!
Loop is over !
Note how the instruction which prints 'After the break'
was not executed
Jumping with continue
By calling continue
execution is immediately brough to the next iteration , so we jump to the next element in the sequence without executing the instructions after the continue
.
[43]:
i = 1
for x in 'PARADE':
if x == 'A':
print("continue, jumps to next element")
continue
print(x)
print('Loop is over !')
P
continue, jumps to next element
R
continue, jumps to next element
D
E
Loop is over !
Combining break
and continue
Let’s see both in Python Tutor:
[44]:
i = 1
for x in 'PARADE':
if x == 'A':
print("continue, jumps to next element")
continue
if x == 'D':
print('break, exits loop!')
break
print(x)
print('Loop is over !')
jupman.pytut()
P
continue, jumps to next element
R
continue, jumps to next element
break, exits loop!
Loop is over !
[44]:
Questions - break and continue
Look at the following code fragments, and for each try guessing the result it produces (or if it gives an error):
for x in ['a','b','c']: print(x) break
for x in ['a','b','c']: print(x) break print('GLAM')
for x in ['a','b','c']: print(x) break break
for x in ['a','b','c']: break print(x)
break for x in ['a','b','c']: print(x)
for x in ['a','b','c']: print(x) break
for x in ['a','b','c']: continue print(x)
for x in ['a','b','c']: print(x) continue
for x in ['a','b','c']: print(x) continue print('BAM')
continue for x in ['a','b','c']: print(x)
for x in ['a','b','c']: print(x) continue
for x in ['a','b','c']: break 1/0 print('BAD KARMA')
for x in ['a','b','c']: 1/0 break print('BAD KARMA')
for x in range(8): if x < 4: continue print('ZAM', x)
for x in range(8): if x >= 4: break print('ZUM', x)
for x in range(6): if x % 2 == 0: continue print(x)
for x in ['M','C','M']: print(x) for y in ['S','P','Q','R']: print(y) break
for x in ['M','C','M']: print(x) break for y in ['S','P','Q','R']: print(y)
for x in ['M','C','M']: print(x) for y in ['S','P','Q','R']: print(y) continue
for x in ['M','C','M']: print(x) continue for y in ['S','P','Q','R']: print(y)
Exercise - autonomous walking
✪ Write some code which given a string phrase
, prints all the characters except the vocals.
Example - given:
phrase = 'autonomous walking'
prints:
t
n
m
s
w
l
k
n
g
[45]:
phrase = 'autonomous walking'
#phrase='continuous'
# write here
Exercise - breaking bad
✪ Write some code which prints all the charactes from string
until it finds the string 'bad'
.
Example - given:
string = 'cascapirillabadgnippobadzarpogno'
prints
c
a
s
c
a
p
i
r
i
l
l
a
[46]:
string = 'cascapirillabadgnippobadzarpogno' # cascapirilla
#string = 'sobad' # 'so'
#string = 'bad' # ''
#string = 'badso' # ''
# write here
Exercise - breaking point
✪✪ Given a phrase, prints all the words one per row until it finds a dot, and in that case it stops.
DO NOT use
phrase.split('.')
. Splits on other characters are allowed.
Example - given:
phrase = 'At some point you must stop. Never go beyond the limit.
prints:
At
some
point
you
must
stop
[47]:
phrase = 'At some point you must stop. Never go beyond the limit.'
#phrase = "Respect the halt. Do you want to have us arrested?"
#phrase = 'Stop.'
#phrase = 'No stop'
# write here
Exercise - breakdance
✪✪ As a skilled breakdancer, you’re given music
as a list of sounds. You will have to perform a couple of dances:
during the first one, you will have to repeat the music sounds until you find exactly
3
sounds'pa'
, then you will shoutBREAKDANCE!
.during the second one, you will have to repeat the music sounds in reverse until you find exactly
3
sounds'pa'
, then you will shoutBREAKDANCE!
DO NOT modify
music
, so nomusic.reverse()
Example - given:
music = ['unz','pa','pa','tud','unz','pa','pa','tud','unz','boom','boom','tud']
Prints:
unz
pa
pa
tud
unz
pa
BREAKDANCE!
tud
boom
boom
unz
tud
pa
pa
unz
tud
pa
BREAKDANCE!
[48]:
music = ['unz','pa','pa','tud','unz','pa','pa','tud','unz','boom','boom','tud']
# write here
unz
pa
pa
tud
unz
pa
BREAKDANCE!
tud
boom
boom
unz
tud
pa
pa
unz
tud
pa
BREAKDANCE!
Continue
Go on with exercises on iterating strings