Seznamy a n-tice  4. listopadu 2019

Materiály

Nejste účastníkem kurzu
Pro zápis do kurzu se nejprve přihlašte a následně použijte tlačítko v přehledu kurzu.

Domácí projekty

0.

Zvládneš pro počítač naprogramovat lepší strategii? Třeba aby se snažil hrát vedle svých existujících symbolů nebo aby bránil protihráčovi? Stačí jen docela malé vylepšení!

Testy by stále měly procházet.

Odevzdej celý soubor ai.py.

1.

Napiš funkci vytvor_seznam_zvirat(), která vrátí nově vytvořený seznam domácích zvířat. Domácí zvířata známe tato: "pes", "kočka", "králík", "had".

Tuto funkci použiješ pro otestování dalších úloh. Nehledej v ní nic složitého.

Příklad:

>>> vytvor_seznam_zvirat()
['pes', 'kočka', 'králík', 'had']

Každé zavolání funkce by mělo vytvořit nový, nezávislý seznam. Vyzkoušej si to následujícím „dialogem“:

>>> zvirata = vytvor_seznam_zvirat()
>>> zvirata.pop()
'had'
>>> vytvor_seznam_zvirat()
['pes', 'kočka', 'králík', 'had']
>>> zvirata
['pes', 'kočka', 'králík']
2.

Napiš funkci filtruj_kratka_jmena, která dostane seznam řetězců a vrátí seznam těch, která jsou kratší než 5 písmen.

Například:

>>> zvirata = vytvor_seznam_zvirat()
>>> filtruj_kratka_jmena(zvirata)
['pes', 'had']

Vzpomeň si, jak se vytváří seznam: začni s prázdným seznamem a postupně přidávej prvek po prvku.

Funkce by měla opět vracet nový seznam a svůj argument nechat nezměněný. Vyzkoušej si to následujícím „dialogem“:

>>> zvirata = vytvor_seznam_zvirat()
>>> filtruj_kratka_jmena(zvirata)
['pes', 'had']
>>> zvirata
['pes', 'kočka', 'králík', 'had']
3.

Napiš funkci filtruj_k, která dostane seznam řetězců a vrátí seznam těch, která začínají na k.

Například:

>>> zvirata = vytvor_seznam_zvirat()
>>> filtruj_k(zvirata)
['kočka', 'králík']

Funkce by měla opět vracet nový seznam a svůj argument nechat nezměněný.

4.

Napiš funkci obsahuje, která dostane seznam a slovo a zjistí, jestli je to slovo v daném seznamu. Podle toho vrátí True nebo False.

Například:

>>> zvirata = vytvor_seznam_zvirat()
>>> obsahuje(zvirata, 'pes')
True
>>> obsahuje(zvirata, 'vodováha')
False
5.

Napiš funkci zrus_prvni, která dostane seznam jmen a vrátí seznam se všemi jeho prvky kromě prvního.

>>> zvirata = vytvor_seznam_zvirat()
>>> zvirata
['pes', 'kočka', 'králík', 'had']
>>> zrus_prvni(zvirata)
['kočka', 'králík', 'had']

Funkce by opět neměla změnit původní seznam:

>>> zvirata
['pes', 'kočka', 'králík', 'had']

A měla by fungovat i pro prázdný seznam:

>>> zrus_prvni([])
[]
6.

Složitější, nepovinný úkol!

Had byl pyšný na to, že je v abecedě první. Dokud nepřiletěla "andulka".

Abys hada uklidnila, vytvoř funkci serad_od_druheho, která zvířata seřadí podle abecedy, ale bude ignorovat první písmeno. Například:

>>> zvirata = vytvor_seznam_zvirat()
>>> serad_od_druheho(zvirata)
["had", "pes", "andulka", "kočka", "králík"]
>>> # (barvy jsou tu jen pro přehlednost, tvůj program vypisuje bez barev)

Máš tady seznam hodnot, které chceš seřadit podle nějakého klíče. Klíč se dá z každé hodnoty vypočítat – v našem případě je to hodnota kromě prvního písmenka (tedy od druhého písmenka dál).

Postup:

  • Vytvoř seznam dvojic (klíč, hodnota).
  • Seřaď tento seznam dvojic – dvojice se řadí nejdřív podle prvního prvku, pak druhého atd.
  • Nakonec vytvoř ze seznamu dvojic výsledný seznam hodnot.

Vytvoření seznamu se dělá tak, že začneš s prázdným seznamem a postupně do něj přidáváš hodnoty jednu po druhé.

7.

Napiš funkci vytvor_balicek, která vrátí nový zamíchaný seznam hracích karet pro hru Prší. Každá položka seznamu bude dvojice hodnota-barva.

Hodnoty karet jsou 2-10, 'J', 'Q', 'K', 'A'. Barvy jsou '♥' '♦' '♠' '♣'. (Symboly si můžeš zkopírovat jako text. Nezobrazují-li se ti správně, použij S, K, P, +.)

Například:

>>> vytvor_balicek()
[(2, '♥'), (10, '♠'), ('A', '♣'), ...