Opstap¶
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 tweede cel 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]])
positie[0] = 9
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[5], line 2
1 positie = midden_van([[0, 0, 0], [0, 1, 0], [0, 0, 0]])
----> 2 positie[0] = 9
TypeError: 'tuple' object does not support item assignment
De foutmelding zegt dat een tuple onveranderlijk is: een element kan niet worden
toegewezen. positie is daarna nog steeds (1, 1).
assert positie == (1, 1)