For loops 7 - nested loops
Download exercises zip
It’s possible to include a for
cycle inside another one, for example we could visit all the words of a list of strings and for each word we could print all its characters:
[2]:
lst = ["some",
"light",
"ahead"]
for string in lst:
for char in string:
print(char)
print()
s
o
m
e
l
i
g
h
t
a
h
e
a
d
Nested for
What we said previously about variable names is even more important with nested loops:
II COMMANDMENT Whenever you insert a variable in a for
cycle, such variable must be new
If you defined a variable in an external for
, you shall not reintroduce it in an internal for
, because this would bring a lot of confusion. For example here s
is introduced both in the external and in the internal loop:
[3]:
for s in ['volleyball', 'tennis', 'soccer', 'swimming']:
for s in range(3): # debugging hell, you lose the external cycle s
print(s)
print(s) # prints 2 instead of a sport!
0
1
2
2
0
1
2
2
0
1
2
2
0
1
2
2
Questions - nested for
Look at the following code fragments , and for each try guessing the result it produces (or if it gives an error):
for y in for x in range(3): print(x,y)
for y in for x in range(2) in range(3): print(x,y)
for y in range(3): for x in range(2): print(x,y)
for x in range(2): for x in range(3): print(x) print(x)
for x in range(2): for y in range(3): print(x,y) print(x,y)
for x in range(1): for y in range(1): print(x,y)
for x in range(2): for y in range(3): print(x,y)
la = 'abc' for x in la: for y in la: print(x)
for x in 'ab': for y in 'cd': print(x,y) for y in 'ef': print(x,y)
for x in 'abc': for y in 'abc': if x == y: print(x)
for x in 'abc': for y in 'abc': if x != y: print(x,y)
lst = [] for x in 'a': for y in 'bc': lst.append(x) lst.append(y) print(lst)
lst = [] for x in 'abc': for y in 'de': lst.append('z') print(len(lst))
c = 1 for x in range(1,4): s = '' for y in range(1,4): s = s + str(c) c += 1 print(s)
Exercise - casting
✪ A new USA-Japanese videocultural production is going to be launched, so actors are called for casting. The director wants to try a scene with all the possible couples which can be formed among actors and actresses. Write some code which prints all the couples, also putting introduction messages.
NOTE: the number of actors and actresses may be different
Example - given:
actresses = ['Leela','Wilma']
actors = ['Captain Harlock', 'Lupin', 'Kenshiro']
prints:
Leela enters the scene!
Captain Harlock enters the scene!
Leela and Captain Harlock get ready ... ACTION!
Thanks Captain Harlock - next one !
Lupin enters the scene!
Leela and Lupin get ready ... ACTION!
Thanks Lupin - next one !
Kenshiro enters the scene!
Leela and Kenshiro get ready ... ACTION!
Thanks Kenshiro - next one !
Thanks Leela - next one !
Wilma enters the scene!
Captain Harlock enters the scene!
Wilma and Captain Harlock get ready ... ACTION!
Thanks Captain Harlock - next one !
Lupin enters the scene!
Wilma and Lupin get ready ... ACTION!
Thanks Lupin - next one !
Kenshiro enters the scene!
Wilma and Kenshiro get ready ... ACTION!
Thanks Kenshiro - next one !
Thanks Wilma - next one !
Casting is over for today!
[4]:
actresses = ['Leela','Wilma']
actors = ['Captain Harlock', 'Lupin', 'Kenshiro']
# write here
Exercise - cover the plane
✪ Given the integers a
and b
, write some code which prints all the possible couples of numbers \(x\) and \(y\) such that \(1 \leq x \leq a\) and \(1 \leq y \leq b\)
For example, given:
a,b = 5,3
it must print:
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
4 1
4 2
4 3
5 1
5 2
5 3
[5]:
a,b = 5,3
# write here
Exercise - triangular
✪ Given the integer a
, write some code which prints all the possible couples of numbers \(x\) and \(y\) such that \(0 \leq x \leq y < a\)
For example, for
a = 5
it must print:
0 0
0 1
0 2
0 3
0 4
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4
[6]:
a = 5
# write here
Exercise - port
✪ Write some code which given a list words
and a list characters
, for each word calculates how many characters it contains
ONLY count the characters present in
characters
ONLY print the result if the number is greater than zero
Example - given:
words = ['ships','pier','oar','fish trap','sails','trawling net']
characters = ['n','i','s']
prints:
ships contains 1 i
ships contains 2 s
pier contains 1 i
fish trap contains 1 i
fish trap contains 1 s
sails contains 1 i
sails contains 2 s
trawling net contains 2 n
trawling net contains 1 i
[7]:
words = ['ships','pier','oar','fish trap','sails','trawling net']
characters = ['n','i','s']
# write here
Exercise - polygons
✪✪ Given a list polygons
with polygon names ordered by sides number starting from a triangle, write some code which prints all the possible questions we can form regarding the number of sides. Start from a minimum of 3 sides until a maximum corresponding to the number of sides of the last polygon (remember names are ordered by number of sides!)
Example - given:
# 0 1 2 3
polygons = ["triangle","square","pentagon", "hexagon"]
prints:
Does the triangle have 3 sides? True
Does the triangle have 4 sides? False
Does the triangle have 5 sides? False
Does the triangle have 6 sides? False
Does the square have 3 sides? False
Does the square have 4 sides? True
Does the square have 5 sides? False
Does the square have 6 sides? False
Does the pentagon have 3 sides? False
Does the pentagon have 4 sides? False
Does the pentagon have 5 sides? True
Does the pentagon have 6 sides? False
Does the hexagon have 3 sides? False
Does the hexagon have 4 sides? False
Does the hexagon have 5 sides? False
Does the hexagon have 6 sides? True
[8]:
# 0 1 2 3
polygons = ["triangle","square","pentagon", "hexagon"]
# write here
Exercise - bon jour
✪✪✪ Given two strings sa
and sb
in lowercase, write some code which prints single letters from sa
as upper case, followed by all possible combinations of sb
where ONLY ONE character is uppercase.
Example - given:
sa = 'bon'
sb = 'jour'
Must print:
B Jour
B jOur
B joUr
B jouR
O Jour
O jOur
O joUr
O jouR
N Jour
N jOur
N joUr
N jouR
[9]:
sa = 'bon'
sb = 'jour'
# write here
Continue
Go on with for challenges
[ ]: