Opstap¶
Leerdoel: je kunt de uitvoer van een geneste lus voorspellen, en je bouwt zelf een lijst en een 2D-lijst op.
Opdracht 1 tot en met 8: lezen. Wat is de output van onderstaande programma’s? Gebruik Python Tutor of de cellen op deze pagina om je antwoorden te controleren.
Opdracht 1¶
name = "harry"
for x in range(3):
for x in range(3):
print(name)
# controleer jouw antwoord
Opdracht 2¶
lst = [1, 2, 3]
for ix1 in range(3):
for ix2 in lst:
print(ix2)
# controleer jouw antwoord
Opdracht 3¶
nested_lst = [[1, 2, 3], [9, 8, 7]]
for ix1 in nested_lst:
for ix2 in ix1:
print(ix2)
# controleer jouw antwoord
Opdracht 4¶
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])
# controleer jouw antwoord
Opdracht 5¶
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])
# controleer jouw antwoord
Opdracht 6¶
for i in range(5):
for j in range(i):
print(i * j)
# controleer jouw antwoord
Opdracht 7¶
n = 5
for i in range(n):
for j in range(i):
print("*", end="")
print("")
# controleer jouw antwoord
Opdracht 8¶
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("")
# controleer jouw antwoord
Opdracht 9 tot en met 12: schrijven. Bij de volgende vier opdrachten voorspel je niets, maar schrijf je zelf de lus. Onder elke opdracht staat een cel met een assert. Slaagt die zonder foutmelding, dan klopt je antwoord.
Opdracht 9¶
Bouw met een lus de lijst [0, 1, 4, 9, 16] op: de kwadraten van 0 tot en met 4. Begin met een lege lijst en voeg er per ronde één element aan toe met row = row + [...]. Gebruik daarbij het lusrecept uit lectures/4a_lussen: de lijst is je verzamelvariabele en de lus is klaar na de laatste waarde van range(5).
# jouw oplossing
row = []
assert row == [0, 1, 4, 9, 16]
Opdracht 10¶
Bouw een 2D-lijst van 3 rijen en 4 kolommen op, waarin op rij r en kolom k de waarde r * k staat. Je hebt twee geneste lussen nodig: de binnenste bouwt een rij op met new_row = new_row + [...], de buitenste plakt die rij aan het raster met grid = grid + [new_row].
Gebruik bij deze twee bereiken het lusrecept uit lectures/4a_lussen: de binnenste lus is klaar na de laatste kolom van de huidige rij; de buitenste lus is klaar na de laatste rij.
Het resultaat ziet er zo uit:
kolom 0 |
kolom 1 |
kolom 2 |
kolom 3 |
|
|---|---|---|---|---|
rij 0 |
0 |
0 |
0 |
0 |
rij 1 |
0 |
1 |
2 |
3 |
rij 2 |
0 |
2 |
4 |
6 |
# jouw oplossing
grid = []
assert grid == [[0, 0, 0, 0], [0, 1, 2, 3], [0, 2, 4, 6]]
Opdracht 11¶
Zet twee scalarwaarden klaar voor een gegeven raster: n_rows = len(grid) en n_cols = len(grid[0]). Je hebt hier geen lus voor nodig en gebruikt geen tuple of unpacking. We werken hier met een niet-lege rechthoekige 2D-lijst.
# jouw oplossing
grid = [[1, 2, 3], [4, 5, 6]]
n_rows = len(grid)
n_cols = len(grid[0])
assert n_rows == 2
assert n_cols == 3
Opdracht 12¶
Schrijf een functie column(grid, k) die kolom k als lijst teruggeeft. Loop met één lus over de rijen en pak uit elke rij het element op kolom k, dus grid[r][k].
Voor het raster [[1, 2, 3], [4, 5, 6]] is kolom 1 de lijst [2, 5].
# jouw oplossing
def column(grid, k):
"""Geeft kolom k van grid terug als lijst."""
...
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]