Nauč se Python > Kurzy > Začátečnický kurz PyLadies > Moduly a testování > Zpětná vazba k domácím projektům

Feedback k domácím projektům

Importy

V domácích projektech po rozdělení piškvorek na několik souborů byl problém s importy a následném volání importovaných funkcí (NameError). Ukázka importu modulu random a použití funkce randrange().

In [1]:
import random

nahodne_cislo = randrange(10)
print(nahodne_cislo)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-ce52a365cc9f> in <module>
      1 import random
      2 
----> 3 nahodne_cislo = randrange(10)
      4 print(nahodne_cislo)

NameError: name 'randrange' is not defined

Jak to opravit?

In [2]:
from random import randrange

nahodne_cislo = randrange(10)
print(nahodne_cislo)
2

Další možnost

In [3]:
import random

nahodne_cislo = random.randrange(10)
print(nahodne_cislo)
2

Úkol 1:

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.

Funkce tah_pocitace() před úpravou:

In [4]:
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")

Jedna z možností, jak funkci tah_pocitace() upravit:

In [5]:
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)

Ukázka testu, zda se umí tah_pocitace() vyrovnat s různou délkou herního pole.

In [6]:
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')

Obecné rady a postřehy

  • Evergreen = ptejte se!
  • Dokumentační řetězce se píšou do třech uvozovek a patří na první řádky do těla funkce. Pokud si chcete poznamenat nějakou poznámku na jiném místě, používejte komentáře (#).

Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.