Coding for KidsCoding for Kids
Kreativní ÚrovněVýzvyPrůvodce pro Učitele
Hlasovat pro funkce
Pokročilý kurz vývoje v Pythonu
Kapitola
>
Úroveň

Řetězcové a časové moduly
Řetězcový modul

Cíl

Shromážděte data aplikací a odešlete odpovědní dopisy pomocí modulu string.

Nyní, když byly zajištěny materiály pro výstavbu nové farmy, je čas zaměřit se na nový personál pro farmu. Máme několik dopisů, které je třeba odeslat v rámci žádostí o zaměstnání; přirozeně by to vyžadovalo hodně psaní, ale můžeme použít modul string, který nám umožní vytvářet šablony a formátovat text, což usnadní práci s většími textovými bloky.

Importování modulu string tentokrát proběhne trochu odlišně než u jiných modulů, protože budeme importovat třídy, které modul rozšiřují, a budou spuštěny následujícím způsobem:

import string from string import Template from string import Formatter

Tím získáme přístup nejen k samotnému modulu, ale i k šablonovým a formátovacím třídám, které obsahují vlastní funkce. Pro naše účely budeme používat následující funkce a třídy:

  • string.capwords(): Tato funkce převádí slova v řetězci tak, aby byla správně kapitalizována; první písmeno slova bude velké a ostatní malá, bez ohledu na původní formátování řetězce.
  • Template(): Tato třída se používá k vytvoření objektu šablony. Využívá funkci substitute(), která umožňuje nastavit řetězec a vyznačit místo pomocí znaku $ pro nahrazení dat. Tímto způsobem lze vytvářet modulární řetězce, které můžete libovolně využívat.
  • Formatter(): Tato třída slouží k formátování nebo sestavení řetězce. Funguje podobně jako třída Template(), ale je robustnější a vhodnější pro delší řetězcové sekvence. Využívá funkci format(), která umožňuje vytvořit řetězec a do něj vložit data pomocí {}.

Začněte tím, že přejdete k světle označenému X a použijete funkci read(), zatímco budete čelit archivu. Tím získáte přístup ke složkám s jmény různých uchazečů. Tyto složky jsou definovány jako tři konstantní seznamy s názvy: folder_a, folder_b a folder_c.

Přejděte k tmavému označenému X přes zelený koberec a postavte se čelem ke stolu. Vytvořte tři seznamy pojmenované: names_a, names_b a names_c. Použijte list comprehensions ve spojení s funkcí string.capwords() pro správné kapitalizování jmen. Seznamy spárujte s konstantami, které mají stejná písmena v názvu – například pro names_a použijte string.capwords() s folder_a, takto: names_a = [string.capwords(x) for x in folder_a]. Použijte stejný vzorec pro naplnění names_b a names_c.

Vytvořte seznam s názvem all_names a sečtěte do něj tři seznamy jmen následovně: all_names = names_a + names_b + names_c. Tímto se všechny seznamy spojí do jednoho většího seznamu. Následně použijte funkci join() v Pythonu, která spojí všechny položky seznamu do řetězce. Můžete také uvést, co se má vkládat mezi jednotlivé položky, například: all_names = ", ".join(all_templates). Použijte předpřipravenou funkci write() s tímto seznamem all_names, aby byla vypsána všechna jména se správnou kapitalizací.

Dále přejděte ke zlatému X a postavte se čelem ke stolu, kde nastavíme šablony. Zde budeme mít dva předpřipravené objekty šablon nazvané red_templates a blue_templates:

red_template = Template( "Hello, $name , thank you for applying for this position.") blue_template = Template( "Esteemed , $name , your application has been approved.")

Každá z těchto šablon má jedinečnou zprávu, nicméně mají společný prvek, kterým je zástupný symbol označený jako $name. Symbol $ slouží k vyznačení zástupného místa, které lze nahradit libovolným řetězcem – v tomto případě se jedná o jméno, jak název napovídá. Pokud nebude hodnota nahrazena, šablona použije pouze samotný zástupný prvek. Pro doplnění vytvořte seznam s názvem all_templates.

Vytvořte cyklus for se čtyřmi (4) iteracemi, ve kterém nahradíte jména ve všech třech seznamech pomocí šablon, do kterých budou vložena jména. Například aplikujete red_template na seznam names_a. Použijte funkci substitute() pro třídu Template() k nahrazení zástupného prvku $name ve šabloně jmény ze seznamu.

for x in range(4): names_a[x] = red_template.substitute(name=names_a[x])

Udělejte totéž pro names_b a names_c – pro names_b použijte také red_template a pro names_c blue_template.

Jakmile jsou všechny seznamy jmen naplněny novými šablonami, je čas je zkontrolovat. Vytvořte nový seznam s názvem all_templates a spojte do něj všechny seznamy jmen následovně: all_templates = names_a + names_b + names_c. Použijte stejnou funkci join() jako předtím k vytvoření čitelné podoby všech šablon, například: all_templates = "\n".join(all_templates). Použijte předpřipravenou funkci write() s all_templates k vypsání všech hlaviček pro jednotlivá jména.

Dále přejděte k tmavému X přes červený koberec a postavte se čelem ke stolu, kde budeme formátovat a psát první sadu dopisů. Začněte vytvořením dvou (2) objektů formátovače s názvy red_1 a red_2 použitím příslušné třídy, například: red_1 = Formatter(), red_2 = Formatter(). Pro sestavení dopisů vytvořte seznam s názvem red_letters.

Podobně jako dříve vytvoříme cyklus for se čtyřmi (4) iteracemi; budeme mít dvě sady předpřipravených řetězců, které budou formátovány pomocí funkce format() a do kterých budou vloženy proměnné s jmény. Tyto formátované řetězce budou přidány do seznamu red_letters a vytvoří tak kompletní seznam dopisů, které budou odeslány. Například objekt red_1 bude zformátován pomocí seznamu names_a a přidán do seznamu red_letters.

for x in range(4): red_letters.append(red_1.format( "{} Orientation will begin next week, please report to the office..." , names_a[x]))

Stejně tak proveďte totéž s objektem formátovače red_2, který využijete s jeho předpřipraveným řetězcem a přidáte jména ze seznamu names_b do cyklu. Jakmile bude vše nastaveno, použijte funkci join() se seznamem red_letters k sestavení dat do jediného souboru, například: red_letters = "\n".join(red_letters). Použijte funkci write() s red_letters k vypsání všech formátovaných dopisů, které budou odeslány.

Nakonec přejděte k tmavému X přes modrý koberec a postavte se čelem ke stolu, kde budeme formátovat a sestavovat poslední sadu dopisů. Stejně jako dříve vytvořte dva (2) objekty formátovače s názvy blue_1 a blue_2, například: blue_1 = Formatter(), blue_2 = Formatter(). Vytvořte seznam blue_letters, do kterého budete formátovat a sestavovat všechny dopisy.

Opět vytvořte cyklus for se čtyřmi (4) iteracemi a použijte předpřipravené řetězce k formátování seznamů jmen, které následně přidáte do seznamu blue_letters pomocí funkce format(). V tomto případě spárujte objekty formátovače blue_1 se seznamem names_c a objekty blue_2 se seznamem names_b. Vše je provedeno stejným způsobem jako u červeného koberce, avšak s různými hodnotami, což ukazuje všestrannost použití formátů a šablon. Po dokončení použijte funkci write() s blue_letters, aby byl poslední dopis uložen a úroveň byla dokončena.

Kniha Kódu