Bouwsteen 1 — initial_state()
Leerdoel: je schrijft de eenvoudigste functie van het hoofdstuk: een leeg bord teruggeven.
Wat doet deze functie?
initial_state() geeft het bord terug zoals het er aan het begin van
het spel uitziet: een 3×3-bord waar nog niets is gespeeld, alle negen
cellen op None. De functie heeft geen input, want er is maar één
antwoord.
Specificatie
- Input: geen.
- Output: een lijst van 3 lijsten, elk met 3×
None. - Voorbeeld:
initial_state()→[[None, None, None],[None, None, None],[None, None, None],]
Voorspel
Als initial_state() correct werkt, wat denk je dat dit print?
bord = initial_state()
print(len(bord))
print(bord[1][1])
Antwoord
3
None
len(bord) is het aantal rijen (3). bord[1][1] is de middencel, en
die hoort leeg te zijn (None).
Bouw zelf en test
Vul de functie in. Onder de functie staan tests: regels die met
assert beginnen. Een assert controleert of wat erachter staat waar
is. Is dat niet zo, dan stopt het programma met een AssertionError en
de boodschap achter de komma, zodat je ziet welke test faalde. Halen
alle tests het, dan zie je onderaan "Alle tests gehaald ✓". Zo werkt het
op elke bouwsteen-pagina.
Tip
Schrijf de drie rijen letterlijk uit, als een lijst met daarin drie
lijsten van drie keer None. Precies zoals het bord op
het bord in Python eruitzag, maar dan leeg.
⚠ Pas op met [[None] * 3] * 3. Dat lijkt handig, maar het geeft drie
keer dezelfde rij; de laatste test hierboven vangt dat, want een
wijziging in rij 0 zou dan ook rij 1 raken.
Antwoord
def initial_state():
return [
[None, None, None],
[None, None, None],
[None, None, None],
]
In de startcode van latere bouwstenen staat de kortere schrijfwijze
[[None] * 3 for _ in range(3)]: die maakt óók drie losse rijen. Je
hoeft hem niet zelf te schrijven.
Door naar bouwsteen 2: player →.