Opstap

Deze pagina bevat uitvoerbare code.

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 dit notebook 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 + [...].

# 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].

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

Schrijf een functie size(grid) die het aantal rijen en het aantal kolommen van grid teruggeeft, in die volgorde. Het aantal rijen is len(grid); het aantal kolommen is de lengte van de eerste rij, dus len(grid[0]). Je hebt hier geen lus voor nodig.

# jouw oplossing
def size(grid):
    """Geeft het aantal rijen en het aantal kolommen van grid terug."""
    ...


assert size([[1, 2, 3], [4, 5, 6]]) == (2, 3)
assert size([[7]]) == (1, 1)

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]