Nauč se Python > Kurzy > Začátečnický kurz PyLadies > Funkce a řetězce > Zpětná vazba k domácím projektům

Feedback k domácím projektům

Počet znaků v textu

In [1]:
text = """Python je oblíbený programovací jazyk"""

count_of_char = 0
for char in text:
    if char == "p":
        count_of_char = count_of_char + 1

print(f"Písmeno p je v textu {count_of_char}x")
Písmeno p je v textu 1x
In [2]:
text = """Python je oblíbený programovací jazyk"""
text = text.lower()

count_of_char = 0
for char in text:
    if char == "p":
        count_of_char += 1

print(f"Písmeno p je v textu {count_of_char}x")
Písmeno p je v textu 2x
In [1]:
text = """Python je oblíbený programovací jazyk"""
pismeno = "p"

count_of_char = text.lower().count(pismeno)

print(f"Písmeno p je v textu {count_of_char}x")
Písmeno p je v textu 2x
In [3]:
sentence = """Python je oblíbený programovací jazyk"""
letter = "p"

def count_of_char(text, char):
    """ 
    The function returns count of char in the text.
    """
    return text.lower().count(pismeno)

result = count_of_char(sentence, letter)

print(f"Písmeno p je v textu {result}x")
Písmeno p je v textu 2x

Funkce ano_nebo_ne()

4x strip().lower()

In [ ]:
def ano_nebo_ne(otazka):
    "Vrátí True nebo False, podle odpovědi uživatele"
    while True:
        odpoved = input(otazka)

        if odpoved.strip().lower() == 'ano' or odpoved.strip().lower() == 'a':
            return True
        elif odpoved.strip().lower() == 'ne' or odpoved.strip().lower() == 'n':
            return False
        else:
            print('Nerozumím! Odpověz "ano" nebo "ne".')

if ano_nebo_ne('Chceš si zahrát hru?  '):
    print('OK! Ale napřed si ji musíš naprogramovat.')
else:
    print('Škoda.')
In [ ]:
def ano_nebo_ne(otazka):
    "Vrátí True nebo False, podle odpovědi uživatele"
    while True:
        odpoved = input(otazka).lower().strip()
        if odpoved == 'ano' or odpoved == "a":
            return True
        elif odpoved == 'ne' or odpoved == "n":
            return False
        else:
            print('Nerozumím! Odpověz "ano" nebo "ne".')

Piškvorky

In [ ]:
from random import randrange

def vyhodnot(pole):
    """Vyhodnotí stav pole."""
    if 'xxx' in pole:
        return "x"
    elif 'ooo' in pole:
        return "o"
    elif '-' not in pole:
        return "!"
    else:
        return '-'

def tah(pole, pozice, symbol):
    """Vrátí herní pole s daným symbolem
       umístěným na danou pozici."""
    return pole[:pozice] + symbol + pole[pozice + 1:]

def tah_hrace(pole):
    """Ptá se hráče na kterou pozici chce hrát a vrací
       herní pole se zaznamenaným tahem"""
    while True:
        pozice = int(input("Na kterou pozici chceš hrát? "))
        if pozice >= 0 and pozice < len(pole) and pole[pozice] == "-":
            return tah(pole, pozice, "x")
        else:
            print("Špatná pozice, zkus to znovu. ")

def tah_pocitace(pole):
    "Vrátí herní pole se zaznamenaným tahem počítače. "
    while True:
        pozice = randrange(len(pole))
        if pole[pozice] == "-":
            return tah(pole, pozice, "o")

def piskvorky():
    "Vygeneruje prázdné pole a střídá tah hráče a počítače. "
    pole = "-" * 20
    while True:
        print(pole)
        pole = tah_hrace(pole)
        print(pole)
        if vyhodnot(pole) != '-':
            break
        pole = tah_pocitace(pole)
        if vyhodnot(pole) != '-':
            break

    print(pole)
    if vyhodnot(pole) == '!':
        print('Remíza!')
    elif vyhodnot(pole) == 'x':
        print('Vyhrála jsi!')
    elif vyhodnot(pole) == 'o':
        print('Vyhrál počítač!')

piskvorky()

Chyby v programu a jejich řešení

Nejdříve chyby v syntaxi, na které si Python stěžuje ihned po přečtení programu.

In [10]:
def piskvorky1d(symbol):
    symbol_hrac = input('Chces o nebo x?)
    pole= '-' * 20
    print(pole)
    vysledek == '-'

    while vysledek =='-'
    tah_hrace(pole,symbol_hrac)
    print(pole)
    if symbol_hrac == 'o':
        symbol_pocitac == 'x'
    else:
        symbol_pocitac == 'o'
    tah_pocitace(pole,symbol_pocitac)
    print(pole)
    vysledek == vyhodnot(pole)
    print(vysledek)
  File "<ipython-input-10-ccb09551c24e>", line 2
    symbol_hrac = input('Chces o nebo x?)
                                         ^
SyntaxError: EOL while scanning string literal
In [11]:
def piskvorky1d(symbol):
    symbol_hrac = input('Chces o nebo x?')
    pole= '-' * 20
    print(pole)
    vysledek == '-'

    while vysledek =='-'
    tah_hrace(pole,symbol_hrac)
    print(pole)
    if symbol_hrac == 'o':
        symbol_pocitac == 'x'
    else:
        symbol_pocitac == 'o'
    tah_pocitace(pole,symbol_pocitac)
    print(pole)
    vysledek == vyhodnot(pole)
    print(vysledek)
  File "<ipython-input-11-caf4662f8092>", line 7
    while vysledek =='-'
                        ^
SyntaxError: invalid syntax
In [12]:
def piskvorky1d(symbol):
    symbol_hrac = input('Chces o nebo x?')
    pole= '-' * 20
    print(pole)
    vysledek == '-'

    while vysledek =='-':
    tah_hrace(pole,symbol_hrac)
    print(pole)
    if symbol_hrac == 'o':
        symbol_pocitac == 'x'
    else:
        symbol_pocitac == 'o'
    tah_pocitace(pole,symbol_pocitac)
    print(pole)
    vysledek == vyhodnot(pole)
    print(vysledek)
  File "<ipython-input-12-849da4aa383b>", line 8
    tah_hrace(pole,symbol_hrac)
            ^
IndentationError: expected an indented block
In [13]:
def piskvorky1d(symbol):
    symbol_hrac = input('Chces o nebo x?')
    pole= '-' * 20
    print(pole)
    vysledek == '-'

    while vysledek =='-':
        tah_hrace(pole,symbol_hrac)
        print(pole)
        if symbol_hrac == 'o':
            symbol_pocitac == 'x'
        else:
            symbol_pocitac == 'o'
        tah_pocitace(pole,symbol_pocitac)
        print(pole)
        vysledek == vyhodnot(pole)
        print(vysledek)

Pro řešení těch dalších už musíme kód v naší funkci spustit, jinak se o jeho chování nic nedozvíme.

In [14]:
def piskvorky1d(symbol):
    symbol_hrac = input('Chces o nebo x?')
    pole= '-' * 20
    print(pole)
    vysledek == '-'

    while vysledek =='-':
        tah_hrace(pole,symbol_hrac)
        print(pole)
        if symbol_hrac == 'o':
            symbol_pocitac == 'x'
        else:
            symbol_pocitac == 'o'
        tah_pocitace(pole,symbol_pocitac)
        print(pole)
        vysledek == vyhodnot(pole)
        print(vysledek)

piskvorky1d()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-38c9f4d5522f> in <module>
     17         print(vysledek)
     18 
---> 19 piskvorky1d()

TypeError: piskvorky1d() missing 1 required positional argument: 'symbol'
In [15]:
def piskvorky1d():
    symbol_hrac = input('Chces o nebo x?')
    pole= '-' * 20
    print(pole)
    vysledek == '-'

    while vysledek =='-':
        tah_hrace(pole,symbol_hrac)
        print(pole)
        if symbol_hrac == 'o':
            symbol_pocitac == 'x'
        else:
            symbol_pocitac == 'o'
        tah_pocitace(pole,symbol_pocitac)
        print(pole)
        vysledek == vyhodnot(pole)
        print(vysledek)

piskvorky1d()
Chces o nebo x?
--------------------
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-15-7bbdc769e0fd> in <module>
     17         print(vysledek)
     18 
---> 19 piskvorky1d()

<ipython-input-15-7bbdc769e0fd> in piskvorky1d()
      3     pole= '-' * 20
      4     print(pole)
----> 5     vysledek == '-'
      6 
      7     while vysledek =='-':

NameError: name 'vysledek' is not defined
In [16]:
def piskvorky1d():
    symbol_hrac = input('Chces o nebo x?')
    pole= '-' * 20
    print(pole)
    vysledek = '-'

    while vysledek =='-':
        tah_hrace(pole,symbol_hrac)
        print(pole)
        if symbol_hrac == 'o':
            symbol_pocitac == 'x'
        else:
            symbol_pocitac == 'o'
        tah_pocitace(pole,symbol_pocitac)
        print(pole)
        vysledek = vyhodnot(pole)
        print(vysledek)

piskvorky1d()
Chces o nebo x?x
--------------------
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-16-5eb14ce02964> in <module>
     17         print(vysledek)
     18 
---> 19 piskvorky1d()

<ipython-input-16-5eb14ce02964> in piskvorky1d()
      6 
      7     while vysledek =='-':
----> 8         tah_hrace(pole,symbol_hrac)
      9         print(pole)
     10         if symbol_hrac == 'o':

NameError: name 'tah_hrace' is not defined

Plagiáty?

bart

Obecné rady a doporučení

  • U funkcí vždy používáme dokumentační řetězce s trojtými uvozovkami. K popisu funkcí nepoužíváme komentáře.
  • Nezapomeňte kontrolovat svůj kód před odesláním
  • Dělejte i složitější úlohy. I když se vám třeba nakonec nepodaří dokončit, je to lepší než je neudělat vůbec a je se alespoň o čem bavit a co řešit.
  • Ptejte se na Slacku !!!
  • Posílejte i nefunkční kód, ale napište to, jinak vám to vracíme, že je to nefunkční. Když se na nic nezeptáte, nemáme na co odpovědět.

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