Opstap

Deze pagina bevat uitvoerbare code.

Canonieke uitwerking van de opstap.

Opdracht 1

Eén cel wijzigen is één toewijzing; de andere cellen komen er niet aan te pas.

bord = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
bord[1][2] = 1
assert bord == [[0, 0, 0], [0, 0, 1], [0, 0, 0]]

Opdracht 2

ander = bord maakt geen nieuwe lijst maar een tweede naam voor dezelfde lijst, en daarom zie je een wijziging via de ene naam ook via de andere.

bord = [[0, 0], [0, 0]]
ander = bord
ander[0][0] = 1
assert bord[0][0] == 1

Opdracht 3

Een onafhankelijke kopie vraagt twee nieuwe lijsten: een nieuwe buitenlijst én met rij[:] een nieuwe lijst per rij.

bord = [[0, 0], [0, 0]]
kopie = []
for rij in bord:
    kopie = kopie + [rij[:]]
kopie[0][0] = 1
assert bord == [[0, 0], [0, 0]]
assert kopie == [[1, 0], [0, 0]]

Opdracht 4

De functie geeft de twee waarden als één tuple terug, zodat je ze in één regel kunt uitpakken; de try-except laat zien dat je zo’n tuple daarna niet meer op een positie kunt wijzigen.

def midden_van(bord):
    """Geeft de middelste positie van het bord terug als (rij, kolom)."""
    return (len(bord) // 2, len(bord[0]) // 2)


rij, kolom = midden_van([[0, 0, 0], [0, 1, 0], [0, 0, 0]])
assert (rij, kolom) == (1, 1)

positie = midden_van([[0, 0, 0], [0, 1, 0], [0, 0, 0]])
try:
    positie[0] = 9
except TypeError:
    print("Een tuple is onveranderlijk: een element kan niet worden toegewezen.")
assert positie == (1, 1)
Een tuple is onveranderlijk: een element kan niet worden toegewezen.