Doplň funkci tah_pocitace tak, aby brala jako argument symbol, za který má počítač hrát – buď 'x',nebo 'o'. Ověř, že se funkce tah_pocitace umí vyrovnat s jinou délkou hracího pole než 20. Ověř si,že se tah_pocitace chová rozumně když dostane plné hrací pole, nebo pole s délkou 0. Rozumné chování v tomto případě znamená vyvolání rozumné výjimky.
def tah_pocitace(herni_pole):
"""Vrátí herní pole se zaznamenaným tahem počítače."""
while True:
cislo_pozice = randrange(20)
if herni_pole[cislo_pozice] == "-":
return tah(herni_pole, cislo_pozice, "o")
def tah_pocitace(herni_pole, symbol):
"""Vrátí herní pole se zaznamenaným tahem počítače."""
if len(herni_pole) == 0:
raise ValueError("Nelze hrát, herní pole má délku 0")
if "-" not in herni_pole:
raise ValueError("Nelze hrát, herní pole je plné")
while True:
cislo_pozice = randrange(len(herni_pole))
if herni_pole[cislo_pozice] == "-":
return tah(herni_pole, cislo_pozice, symbol)
def test_tah_PC_ruzna_delka_pole():
'''
Test funkce tah_pocitace: program se umí vyrovnat s různou délkou hracího
pole = nedojde k chybě, po tahu počítače se nezmění délka hracího pole
a nové hrací pole bude obsahovat 1 znak symbolu "x" a zbytek bude prázdný.
'''
for delka_pole in range (1, 100):
pole = '-' * delka_pole
pole = ai.tah_pocitace(pole, 'x')
assert len(pole) == delka_pole
assert pole.count('x') == 1
assert pole.count('-') == delka_pole - 1
def test_tah_PC_vyjimky():
'''
Testuje vyvolání vyjímky v případě herního pole nulové délky a herního pole
bez prázdných míst.
'''
pole = '' # prázné herní pole
with pytest.raises(ValueError):
pole = ai.tah_pocitace(pole, 'x')
pole = 'xoxoxox' # pole, kde není kam hrát
with pytest.raises(ValueError):
pole = ai.tah_pocitace(pole, 'x')
def test_tah_PC_zapln_pole():
'''
Test funkce tah_pocitace: při opakovaném tahu počítač zaplní celé pole
'''
pole = '----------'
for i in range(10):
pole = ai.tah_pocitace(pole,'o')
assert pole == 'xxxxxxxxxx'
def test_tah_vyjimka():
'''
Test funkce tah: funkce vyvolá výjimku:
--> ValueError - když dostane prázné pole nebo když jako symbol dostane
více znaků,
--> IndexError - když má zapsat symbol na pozici mimo pole, když jako pozice
není INT,
--> TypeError - když dostane jako symbol, který má zapsat INT místo STR
'''
with pytest.raises(ValueError):
ai.tah('',0,'x')
ai.tah('---',0,'abc')
with pytest.raises(IndexError):
ai.tah('---',10,'x')
ai.tah('---------','A', 'x')
ai.tah('---------',10.5, 'x')
with pytest.raises(TypeError):
ai.tah('---------',0,5)
ai.tah('---------',0,10.5)
def test_tah_PC_ruzna_delka_pole():
'''
Test funkce tah_pocitace: program se umí vyrovnat s různou délkou hracího
pole = nedojde k chybě, po tahu počítače se nezmění délka hracího pole
a nové hrací pole bude obsahovat 1 znak symbolu "x" a zbytek bude prázdný.
'''
for delka_pole in range (1, 10000):
pole = ai.tah_pocitace('-'*delka_pole,'o')
assert len(pole) == delka_pole
assert pole.count('x') == 1
assert pole.count('-') == delka_pole - 1