List comprehensions

Jedná se o zápis s Pythonu s jehož pomocí se dají jednoduše vytvářet seznamy.

In [1]:
[x for x in range(10)]
Out[1]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [2]:
[x**2 for x in range(10)]
Out[2]:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
In [3]:
[x**2 for x in range(10) if x % 2 == 0]
Out[3]:
[0, 4, 16, 36, 64]
In [4]:
[(x, x**2) for x in range(10)]
Out[4]:
[(0, 0),
 (1, 1),
 (2, 4),
 (3, 9),
 (4, 16),
 (5, 25),
 (6, 36),
 (7, 49),
 (8, 64),
 (9, 81)]
In [5]:
[[y for y in range(3)] for x in range(10)]
Out[5]:
[[0, 1, 2],
 [0, 1, 2],
 [0, 1, 2],
 [0, 1, 2],
 [0, 1, 2],
 [0, 1, 2],
 [0, 1, 2],
 [0, 1, 2],
 [0, 1, 2],
 [0, 1, 2]]

Tabulka s hracím polem

Řešení 1

In [ ]:
def vytvor_tabulku():
    zap_tabulka = []

    for rada_x in '.', '.', '.', '.', '.', '.', '.', '.', '.', '.':
        radek = []
        for rada_y in '.', '.', '.', '.', '.', '.', '.', '.', '.', '.':
            radek.append(rada_y)
        zap_tabulka.append(radek)
    return zap_tabulka

Řešení 2

In [ ]:
def vytvor_prazdne_herni_pole(r,s):
    seznam_radku = []
    for a in range(r):
        radek = ["."]
        for b in range(s-1):
            radek.append(".")
        seznam_radku.append(radek)
    return seznam_radku

Správné řešení

In [ ]:
def vytvor_tabulku(velikost):
    seznam_radku = []
    for a in range(velikost):
        radek = []
        for b in range(velikost):
            radek.append(".")
        seznam_radku.append(radek)
    return seznam_radku

Krátké řešení

In [ ]:
def vytvor_tabulku(velikost):
    tabulka = []
    for x in range(velikost):
        radek = ['.' for x in range(velikost)]
        tabulka.append(radek)
    return tabulka

Nejkratší řešení (je nejlepší?)

In [ ]:
def vytvor_tabulku(velikost):
    return [list('.' * velikost) for x in range(velikost)]

Zvířátka

Najdi chyby, nejasnosti či nepřesnosti v tomto kódu:

In [ ]:
zvirata = [ "pes", "kočka", "králík", "had", "ježek"]
znak = "k"

def pismeno(jmeno):
    for i in range(5):
        if znak in jmeno[i][0]:
            print(jmeno[i])
    return

pismeno(zvirata)

Takto by to mohlo vypadat přehlednější a pochopitelnější

In [ ]:
zvirata = [ "pes", "kočka", "králík", "had", "ježek"]

def s_prvnim_pismenem(seznam_zvirat, pismeno):
    for zvire in seznam_zvirat:
        if zvire.startswith(pismeno):
            print(zvire)

s_prvnim_pismenem(zvirata, 'k')

Další podobná funkce:

In [ ]:
def kratke(jmeno = zvirata):
    for i in range(len(jmeno)):
        if len(jmeno[i]) < 5:
            print(jmeno[i])
        else:
            print(end = "")
    return jmeno

kratke(zvirata)

A její přehlednější varianta:

In [ ]:
def kratke(seznam_zvirat):
    for jmeno in seznam_zvirat:
        if len(jmeno) < 5:
            print(jmeno)

kratke(zvirata)

Je možné tuto funkci zkrátit a zjednodušit?

In [ ]:
def overeni(seznam):
    "ověří, zda je zadané slovo v seznamu a vrátí True/False"
    otazka = input("Zadej název zvířete, jež chceš ověřit: ")
    if otazka in seznam:
        return True
    else:
        return False

Ano, je to možné

In [ ]:
def overeni(seznam):
    "ověří, zda je zadané slovo v seznamu a vrátí True/False"
    otazka = input("Zadej název zvířete, jež chceš ověřit: ")
    return otazka in seznam

Rubber duck problem solving

Gumová kačenka

Jde o techniku řešení problému, při které se svůj problém snažíte vysvětlit někomu (nebo v případě gumové kachny něčemu), kdo programování nemusí vůbec rozumět. Když řešenou problematiku a vaše současné řešení popisujete nahlas, uvědomíte si, co váš program aktuálně dělá a co by dělat měl, což zpravidla vede k vyřešení problému.

Obecné rady a poznatky

  • Je zakázáno používat klíčové slovo global
  • Prosím, nedávejte programy do Wordu ani jiných dokumentů