Opstap¶
De uitwerkingen staan in dezelfde volgorde als de twaalf opdrachten in problems/5_opstap.
Opdracht 1¶
De binnenste lus draait drie keer voor elke ronde van de buitenste lus: harry verschijnt negen keer.
name = "harry"
for x in range(3):
for x in range(3):
print(name)
harry
harry
harry
harry
harry
harry
harry
harry
harry
Opdracht 2¶
De binnenste lus loopt drie keer langs lst, voor elk van de drie rondes van de buitenste lus.
lst = [1, 2, 3]
for ix1 in range(3):
for ix2 in lst:
print(ix2)
1
2
3
1
2
3
1
2
3
Opdracht 3¶
De uitvoer loopt eerst door de eerste rij en daarna door de tweede rij.
nested_lst = [[1, 2, 3], [9, 8, 7]]
for ix1 in nested_lst:
for ix2 in ix1:
print(ix2)
1
2
3
9
8
7
Opdracht 4¶
Deze versie gebruikt indices en heeft dezelfde uitvoer als opdracht 3: 1, 2, 3, 9, 8, 7.
nested_lst = [[1, 2, 3], [9, 8, 7]]
for ix1 in range(len(nested_lst)):
for ix2 in range(len(nested_lst[ix1])):
print(nested_lst[ix1][ix2])
1
2
3
9
8
7
Opdracht 5¶
De eerste print geeft [[40, 50], [800, 900]]. grid[2][0] leest het eerste element van de derde rij en de tweede print geeft daarom 1.
grid = [[4, 5], [8, 9], [1, 2]]
k = 1
new_grid = []
for i in range(2):
k = k * 10
new_row = []
for j in range(2):
new_row = new_row + [grid[i][j] * k]
new_grid = new_grid + [new_row]
print(new_grid)
print(grid[2][0])
[[40, 50], [800, 900]]
1
Opdracht 6¶
De uitvoer is 0, daarna 0 en 2, daarna 0, 3, 6, en ten slotte 0, 4, 8, 12.
for i in range(5):
for j in range(i):
print(i * j)
0
0
2
0
3
6
0
4
8
12
Opdracht 7¶
De eerste regel is leeg; daarna verschijnen *, **, *** en ****.
n = 5
for i in range(n):
for j in range(i):
print("*", end="")
print("")
*
**
***
****
Opdracht 8¶
Na de oplopende driehoek volgt een regel met vijf tekens, daarna vier, drie, twee en één.
n = 5
for i in range(n):
for j in range(i):
print("*", end="")
print("")
for i in range(n, 0, -1):
for j in range(i):
print("*", end="")
print("")
*
**
***
****
*****
****
***
**
*
Opdracht 9¶
row is de verzamelvariabele. Het lusrecept uit lectures/4a_lussen geeft de startwaarde, de stap en het stopmoment.
row = []
for number in range(5):
row = row + [number * number]
assert row == [0, 1, 4, 9, 16]
Opdracht 10¶
De binnenste lus bouwt per rij een new_row; de buitenste lus verzamelt die rijen in de 2D-lijst grid.
grid = []
for r in range(3):
new_row = []
for k in range(4):
new_row = new_row + [r * k]
grid = grid + [new_row]
assert grid == [[0, 0, 0, 0], [0, 1, 2, 3], [0, 2, 4, 6]]
Opdracht 11¶
Het aantal rijen en kolommen staat direct in de 2D-lijst; daarom is geen lus nodig.
def size(grid):
"""Geeft het aantal rijen en het aantal kolommen van grid terug."""
return len(grid), len(grid[0])
assert size([[1, 2, 3], [4, 5, 6]]) == (2, 3)
assert size([[7]]) == (1, 1)
Opdracht 12¶
column_values is de verzamelvariabele. De lus loopt langs de rijen en voegt uit elke rij het element op kolom k toe.
def column(grid, k):
"""Geeft kolom k van grid als lijst terug."""
column_values = []
for r in range(len(grid)):
column_values = column_values + [grid[r][k]]
return column_values
assert column([[1, 2, 3], [4, 5, 6]], 1) == [2, 5]
assert column([[1, 2, 3], [4, 5, 6]], 0) == [1, 4]
assert column([[7]], 0) == [7]