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