Níže uvedený text pochází z prvního vydání. Nad tímto textem se nachází aktuální stav po revizi směřující k druhému vydání.

Další posloupnosti a jiné věci

O čem si budeme povídat?

Seznámíme se s novým nástrojem pro psaní programů v jazyce Python. Ukážeme si, jak využívat proměnné k uložení informací, které budeme chtít použít později. A ukážeme si také, jak můžeme kombinovat posloupnosti příkazů způsobem, který nám umožní vyřešení nějakého úkolu.

Takže… Nyní už víme, jak v jazyce Python zapisujeme jednotlivé příkazy. Začali jsme také uvažovat o datech a co s nimi můžeme dělat. Podívejme se, co se stane, když překladači jazyka Python předáme více příkazů najednou.

The joy of being IDLE[1]

Ale dříve než se do toho pustíme, pokud máte nainstalovanou verzi Pythonu 1.5.2 nebo novější, měli byste být schopni najít nástroj IDLE, který se dodává jako součást instalace (v podadresáři Tools/idle najdete idle.py). V podstatě se dá říct, že se vám vyzývací řádek překladače jazyka Python bude zobrazovat ve vyhrazeném okně. Proti verzi překladače, která pracuje v okně MS-DOS, má IDLE několik výhod:

Používání IDLE je na domovských stránkách systému Python věnován celý kurs. Naleznete jej pod tématem IDLE (v angličtině). Existuje také jemnější kurs, který se mimo jiné zabývá podobnými věcmi, kterými se zabýváme zde. Nalezne te jej na Danny Yoo's web site. Doporučuji, abyste začali Dannyho stránkami. Jakmile se budete s IDLE cítit jistěji, vraťte se k oficiálním stránkám na www.python.org.

Pokud používáte MS Windows je tu ještě další možnost v podobě aplikace PythonWin, která se dodává jako součást balíku win32all. Tento balík vám zpřístupní všechny nízkoúrovňové funkce architektury MFC pro MS Windows (Microsoft Foundation Classes) a — což je důležité — velmi dobrou alternativu k IDLE. PythonWin lze použít pouze pod MS Windows, ale podle mého názoru je o něco lepší, než IDLE. Na druhou stranu, IDLE je standardní součástí instalace systému Python, takže jej používá více lidí. Navíc funguje na většině platforem. Ať už je to jakkoliv, vždy je lepší mít možnost volby.

Krátce o komentářích

K jednomu z nejdůležitějších programátorských nástrojů patří jeden, který začátečníci často při prvním seznámení vnímají jako zbytečný — komentáře. Komentáře jsou prostě jen řádky v programu, které popisují, o co jde. Nemají žádný vliv na funkčnost programu, jsou v něm na ozdobu. Ale ony hrají velmi důležitou roli! Říkají programátorovi, o co v daném místě jde. A co je ještě důležitější, říkají proč to tak má být. Zvlášť důležité je to v případě, kdy programátor, který zdrojový text studuje, není tím, kdo jej napsal. Případně může jít o jeho dílo, ale od jeho vzniku už uplynula dlouhá doba. Význam dobrých komentářů po určitých programátorských zkušenostech jistě sami doceníte. Od tohoto okamžiku budu části programu komentovat. Množství okolního vysvětlujícího textu se bude postupně zmenšovat, protože vysvětlení budou uvedena již v komentářích.

Každý jazyk definuje svůj způsob zápisu komentářů. V jazyce BASIC komentář začíná slovem REM. Ignoruje se vše, co se nachází za tímto slovem do konce řádku:

REM print "Tento text se nikdy nevytiskne"
print "Tento text se vytiskne"

Pokud jste někdy psali dávkové soubory v systému MS-DOS (ty s příponou .bat), může vám být slovo REM povědomé, protože v dávkových souborech se používá stejný způsob označování komentářů.

Většina implementací překladače jazyka BASIC dovoluje použít místo slova REM znak ' (apostrof), což sice zjednodušuje zápis, ale zhoršuje viditelnost komentáře. Můžete si vybrat. (Poznámka překladatele: Pokud používáte vhodný textový editor, bývá tato nevýhoda odstraněna možností barevného odlišení komentářů. Problémy s výrazností komentáře ale mohou nastat v okamžiku, kdy takový zdrojový text vytisknete, nebo kdy si jej prohlížíte prostředkem, který barevné zvýraznění komentářů neprovádí.)

Jak Python, tak Tcl používají pro označení komenářů znak #. Následující znaky, až do konce řádku, se ignorují:

v = 12  # přiřaď do v hodnotu 12
x = v*v # x je v na druhou

Uvedený příklad shodou okolností používá velmi špatný styl komentování. Vaše poznámka by neměla jenom znovu popisovat význam (sémantiku) příkazu. To přece vidíme na první pohled ze zápisu samotného příkazu! Komentář by měl vysvětlovat proč se to dělá:

v = 3600   # 3600 je počet sekund za jednu hodinu
s = t*3600 # t obsahuje čas v hodinách, s v sekundách

Takové komentáře jsou mnohem prospěšnější.

Posloupnosti příkazů používajících proměnné

Nyní použijte IDLE nebo vyzývací řádek překladače jazyka Python spuštěného v okně MS-DOS nebo v terminálovém okně systému Unix a napište následující příkazy:

>>> v = 7
>>> w = 18
>>> x = v + w # využíváme naše proměnné při výpočtu
>>> print x

V této ukázce jsme vytvořili proměnné (v, w a x) a manipulovali jsme s jejich obsahem. Podobá se to použití tlačítka M na vaší kalkulačce. Výsledek uložíme do paměti s cílem použít jeho hodnotu někdy později.

Tisk výsledku můžeme vylepšit použitím formátovacího řetězce:

>>> print "Soucet cisel %d a %d je: %d" % (v,w,x)

Jednou z výhod formátovacího řetězce je to, že jeho obsah můžeme také uložit do proměnné:

>>> s = "Soucet cisel %d a %d je: %d"
>>> print s % (v,w,x) # užitečné pro stejný výstup různých hodnot

Na pořadí záleží

V tomto okamžiku byste si mohli myslet, že postup konstruování posloupnosti příkazů je zřejmý a že mu věnujeme zbytečně velkou pozornost. V této chvíli můžete mít pravdu, protože v našem případě je poměrně jasné, o co jde. Ale ne vždy je to tak jednoduché, jak to vypadá. Můžeme narazit na skrytou léčku. Uvažujme případ, kdy chceme posunout úroveň všech nadpisů v HTML dokumentu o jeden stupeň výše.

V HTML vytváříme nadpisy tím, že jejich text obalíme značkami:

Problém spočívá v tom, že jakmile se dostanete na pátou úroveň nadpisů, text v nadpisu je často menší, než text odstavců — což vypadá divně. Takže se můžete například rozhodnout, že posunete všechny úrovně nadpisů o jednu nahoru (tj. směrem k menšímu číslu ve značce). Můžete to poměrně snadno provést v textovém editoru při využití funkce náhrady jednoho řetězce jiným: všechny řetězce <h2 nahradíte řetězcem <h1, řetězce </h2 nahradíte řetězcem </h1 a tak dále.

Ale uvažte, co se stane, když začnete nahrazovat značky s nejvyššími čísly — řekněme h4 značkou h3, potom h3 značkou h2 a nakonec h2 značkou h1. Všechny nadpisy by se posunuly na první úroveň! Takže pořadí provedení posloupnosti akcí je důležité. Totéž by platilo, pokud bychom napsali program, který by zmíněné náhrady řetězců prováděl za nás (což bychom docela dobře mohli chtít udělat, protože posunování úrovní nadpisů může být úkol, který potřebujeme řešit velmi často).

Tabulka násobků

Nyní uvedu příklad, který budeme rozvíjet v průběhu několika následujících kapitol. Tak jak se budeme učit novým programovacím technikám, řešení příkladu se bude postupně vylepšovat

Vzpomínáte si, že můžeme psát dlouhé řetězce uzavřené v trojitých uvozovkách? Využijeme toho k vytvoření tabulky násobků:

>>> s = """
1 x 12 = %d
2 x 12 = %d
3 x 12 = %d
"""
>>> # Pozor - komentáře nemůžeme psát dovnitř
>>> # řetězce. Staly by se jeho součástí!
>>> print s % (12, 2*12, 3*12)

1 x 12 = 12
2 x 12 = 24
3 x 12 = 36

>>> 

Poznámka: Uvedený tvar vstupu a výstupu můžete pozorovat, pokud použijete IDLE. Ve skutečnosti by byl zobrazený obsah okna o něco barevnější, protože IDLE zvýrazňuje význam různých částí zdrojového textu různými barvami. Pokud pro stejný příklad použijete Python spuštěný z příkazového řádku, bude se vzhled lišit tím, že Python vypisuje vyzývací řetězec neukončeného příkazu ve tvaru '... '. Teprve za tímto řetězcem se zobrazuje text, který vkládáte z klávesnice.

Rozšířením tohoto příkladu bychom mohli dosáhnout vytištění celé tabulky násobků čísla 12 od 1 do 12. Ale neexistuje nějaký lepší způsob? Odpověď zní ano. Podívejme se, jak na to.

Zapamatujte si

Pokud vás napadne, co by se dalo na překladu této kapitoly vylepšit, zašlete e-mail odklepnutím . Tím bude do subjektu dopisu automaticky vložena informace o jméně a verzi tohoto HTML dokumentu.

$Id: cztutseq2.html,v 1.2 2004/05/14 10:22:47 prikryl Exp $