Ga naar hoofdinhoud

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.

Python
Code-omgeving wordt voorbereid…
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 →.