Další posloupnosti a jiné v>ci

O čem si budeme povídat?

Takže… Nyní už víme, jak v jazyce Python zapisujeme jednotlivé příkazy. Začali jsme také brát v úvahu data a to, co s nimi můžeme d>lat. Napsali jsme při tom pár delších posloupností s rozsahem, dejme tomu, 5 až 10 řádků. Přibližujeme se k tomu, abychom začali psát opravdu užitečné programy. Je tu ale jeden háček. Naše programy se ztrácejí, kdykoliv skončíme práci s Pythonem. Pokud jste zkoušeli příklady v jazycích VBScript a JavaScript, museli jste si je uložit do souboru. Proto jste je mohli spoušt>t opakovan>. Totéž bychom potřebovali u programů v jazyce Python. Už jsem se zmínil o tom, že k tomu můžete použít libovolný textový editor, jako je například Notepad nebo pico, a výsledek uložit do souboru s příponou .py. Poté můžete výsledek spustit z příkazového řádku — viz kapitola Začínáme. Ale existuje jednodušší způsob.

The joy of being IDLE[1]

Když jste si instalovali Python, nainstalovala se vám současn> užitečná aplikace, která je sama napsána v jazyce Python. Nazývá se IDLE a je tím, čemu se říká integrované vývojové prostředí. To znamená, že jde o jednu aplikaci, která v sob> zahrnuje n>kolik programátorských nástrojů. Co se týká IDLE, nemíním zde zabíhat do hloubky. Chci vyzvednout jen dv> z jeho vlastností. Najdete v n>m zdokonalenou verzi toho, čemu jsme říkali pythonovský příkazový řádek (>>>), s podporou zvýrazňování syntaxe (anglicky syntax highlighting [syntax hailaiting] — různé prvky jazyka zobrazuje různými barvami) a s dalšími šikovnými vlastnostmi. A naleznete zde také dobrý textový editor (specializovaný na pythonovské zdrojové texty), který vám zprostředkuje spoušt>ní vašich programů přímo z IDLE.

Pokud jste tak již neučinili, pak vám vřele doporučuji, abyste si IDLE vyzkoušeli. Jakmile zjistíte, jak se ve vašem operačním systému IDLE spouští, pak za nejlepší považuji shlédnout vynikající příručku Dannyho Yoo (anglicky).

Na domovských stránkách systému Python naleznete pod heslem IDLE úplnou učebnici. (Je ale v angličtin> a místy může být pon>kud zastaralá. Odpovídá verzi IDLE 0.5, přičemž s instalací Python 2.3.4 byla k dispozici již verze IDLE 1.0.3.)

Pokud používáte MS Windows je tu ješt> další možnost v podob> aplikace Pythonwin, kterou lze stáhnout samostatn> nebo jako součást balíku pywin32. 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é — představuje 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.

Pokud dáváte přednost jednoduššímu přístupu, můžete použít n>který z textových editorů, které různým způsobem programování v Pythonu podporují. Editor vim podporuje zvýrazňování syntaxe (barevné zobrazování klíčových slov, atd.), editor emacs definuje pro Python plnohodnotný editační režim, malý editor SciTE podporuje zvýrazňování syntaxe a má další p>kné rysy. Poznámka překladatele: Za vyzkoušení určit> stojí i v Jav> napsaný editor jEdit.

Pokud půjdete cestou používání textového editoru, pak pravd>podobn> zjistíte, že nejšikovn>jší bude používat tři najednou otevřená okna:

  1. Editor, kde píšete zdrojový text a ukládáte jej do souboru,
  2. okno s interaktivn> spušt>ným Pythonem, ve kterém si na příkazovém řádku (>>>) zkoušíte v>ci, které poté přidáváte do zdrojového textu, a
  3. okno s příkazovým řádkem operačního systému, ve kterém spoušt>ním testujete vytvářený program.

Autor této učebnice dává přednost výše popsanému způsobu používání tří oken, ale zdá se, že v>tšina začátečníků dává přednost stylu vše v jednom v podob> IDLE nebo Pythonwin. Výb>r je pouze na vás.

Poznámka překladatele: Důvodem k používání přístupu se třemi okny bývá skutečnost, že pokročilejší uživatelé jsou již zvyklí na svůj oblíbený textový editor, ve kterém dokáží pracovat efektivn>ji, než v jiných editorech. Při jeho výb>ru se uplatňuje tolik vlivů, že prakticky o žádném editoru nelze tvrdit, že je nejlepší či horší. Je to jako s auty. N>kdo má rád pohodln>jší limuzíny s automatickou převodovkou a s posilovačem řízení, n>komu vyhovují standardní přibližovadla s ne příliš výraznými rysy v žádném sm>ru, n>kdo vyznává rychlé sportovní modely, ze kterých vymačká maximální akceleraci a výkon, i za cenu toho, že se mu od řadicí páky d>lají mozoly.

Osobn> jsem prošel používáním editorů vi/vim, emacs, JED (v režimu emacs) až k momentáln> používanému jEdit. Krom> toho jsem používal n>kolik editorů z integrovaných prostředí různých jazyků, pár editorů integrovaných do nástrojů typu Norton Commander a další malé editory typu Notepad a podobné. Ačkoliv bych se asi nechal přesv>dčit k vyzkoušení n>jakého nového editoru, necht>jte po m>, abych se vracel k vim. Nesedí mi, tak jako vi-kingům nebude sed>t emacs nebo jEdit. Nepřemlouvejte m>. Já taky nebudu nikoho přemlouvat.

Pokud ve v>ci editoru dosud nemáte jasno, vyzkoušejte výše zmín>ny SciTE. Zdá se, že má v režimu pro Python docela p>kné vlastnosti. Krom> toho se v kapitole o používání grafického uživatelského rozhraní zmíníme o balíku wxPython, který mimo jiné obsahuje modul stc. Nemám s nimi velké zkušenosti, ale jak SciTe, tak modul stc využívají stejnou editační komponentu, která se vyvíjí v rámci projektu Scintilla. To jinými slovy znamená, že do svých pythonovských programů můžete zakomponovat okno fungující podobn>, jako jinak samostatná aplikace SciTE. Když si spustíte demo k wxPython, pak v pravém okn> pod záložkou Demo Code uvidíte modul stc v akci.

Za zmínku stojí další nástroj, nazývaný PyCrust. Svého času se jednalo o samostatný projekt, který m>l být ve vztahu k wxPython tím samým, čím je IDLE ve vztahu Tkinter. Z původn> samostatného projektu se stala součást wxPython. V dob> psaní tohoto textu existoval ve verzi 0.9.4 a na první pohled se jevil velice slibn>. Konečným cílem projektu je kvalitn>jší náhrada IDLE: Python shell, editor (využívající modul stc) a další nástroje, které usnadňují vývoj.

Pokud zkoušíte příklady v JavaScript nebo VBScript, doporučuji využít n>který z výše zmín>ných editorů a n>jaký vhodný prohlížeč, dejme tomu Internet Explorer, ve kterém si soubor otevřete. Když budete chtít vyzkoušet v editoru provedené úpravy, jednoduše stiskn>te tlačítko prohlížeče Aktualizovat (Reload). Poznámka překladatele: Nezapomeňte nejdříve soubor po úpravách v editoru uložit.

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. Komentáře ovšem 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. Komentáře byly použity již u n>kterých dříve uvedených úryvků kódu. Jsou to ony jinou barvou zvýrazn>né části řádků, které začínají symbolem # pro Python nebo symbolem ' pro VBScript. Od tohoto okamžiku budu části programu komentovat pečliv>ji. Množství okolního vysv>tlujícího textu se bude postupn> zmenšovat, protože vysv>tlení budou uvedena práv> v komentářích.

Každý jazyk definuje svůj způsob zápisu komentářů. V jazyce VBScript komentář začíná slovem REM (zkratka slova remark [rimák] = komentář) nebo, což je b>žn>jší, apostrofem '. Ignoruje se vše, co se nachází za uvedenou značkou (do konce řádku):

REM print "Tento text se nikdy nevytiskne."
' Toto je také komentářový řádek.
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šimn>te si, že možnost používání apostrofu pro označení komentářů zabraňuje tomu, aby se apostrof mohl ve VBScript používat pro vymezování řet>zců. VBScript si prost> myslí, že jde o komentář.

Python používá 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ší.

JavaScript používá v roli komentářové značky dvojici lomítek //. A jako v předchozích případech, vše za touto značkou se ignoruje.

N>které jazyky umožnují používání víceřádkových komentářů, které jsou uzavřeny párem komentářových značek. Pokud ovšem není korektn> vložena značka pro ukončení komentáře, může to vést k podivným chybám. V jazyce JavaScript víceřádkové komentáře používat lze. Zahajují se komentářovou značkou /*. Následuje text komentáře a vše je uzavřeno značkou */:

<script type="text/javascript">
document.write("Tohle se vytiskne.<br>");

// Toto je jednořádkový komentář

/* Toto je víceřádkový komentář. Pokračuje od tohoto řádku 
dále přes tento řádek a dokonce
na tento, třetí řádek. Neobjeví se na výstupu skriptu.
Komentář je ukončen zrcadlovým obrazem otevírací značky. */

document.write("Tento text se také vytiskne.");
</script>

Poznámka překladatele: Pokud používáme editor se zvýrazňováním syntaxe, pak bývají komentáře zobrazovány jinou barvou nebo jiným typem písma. V takovém případ> se pravd>podobnost toho, že si nevšimneme neuzavřeného víceřádkového komentáře, výrazn> snižuje.

Na komentářích je důležité především to, aby vysv>tlovaly význam částí programu komukoliv, kdo se program snaží číst. M>li byste na to vždy pamatovat a vysv>tlovat všechny záhadné úseky, jako je například používání n>jakých na první pohled podivných hodnot, složitých matematických výrazů a podobn>. A myslete na to, že oním zmateným čtenářem můžete být za pár týdnů nebo m>síců práv> vy.

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

V kapitole Data, datové typy a prom>nné jsme se seznámili s prom>nnými. Zmiňovali jsme se o nich jako o nálepkách, kterými si označujeme naše data, abychom se na n> mohli pozd>ji odkazovat. V různých příkladech se seznamy a v příkladu kódu pro ukládání adres jsme mohli pozorovat příklady použití prom>nných. Nicmén>, prom>nné mají při programování tak podstatnou důležitost, že před probíráním dalších v>cí rad>ji používání prom>nných znovu shrneme.

Nyní použijte IDLE nebo příkazový řádek Pythonu spušt>ného v okn> MS-DOS nebo v terminálovém okn> systému Unix. 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 tuto 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

Příkaz print se tím velmi zkrátí, a to především v případech, kdy pracujeme s mnoha hodnotami najednou. Na druhou stranu se tím příkaz více zatemní. Rozhodnutí, zda jsou velmi dlouhé řádky lépe nebo hůře čitelné (ve srovnání s variantou uložení formátovacího řet>zce do prom>nné), musíte učinit sami. Pokud formátovací řet>zec najdete poblíž příkazu print, jako v našem případ>, pak to není tak špatné. Můžeme si pomoci ješt> jedním způsobem. Prom>nné pojmenováváme takovým způsobem, aby vysv>tlovaly účel svého použití. Místo jména s bych například mohl přid>lit naší prom>nné pro uložení formátovacího řet>zce jméno formatProSoucet. Potom by příklad vypadal takto:

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

Pokud pak v programu používáme n>kolik různých formátovacích řet>zců, můžeme snadn>ji předepsat, který z formátů se má při tisku použít. Používání výstižných názvů prom>nných je užitečné za všech okolností. V dalších příkladech se toho budeme držet. Prozatím naše prom>nné nem>ly zrovna význam, který by určoval, jak by se prom>nná m>la jmenovat.

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).

V kapitole Data, datové typy a prom>nné bylo uvedeno n>kolik dalších příkladů používajících prom>nné a uvád>jících různé posloupnosti příkazů — a to zejména na příkladech s adresami lidí. A proč byste si vlastn> nemohli vymyslet pár vlastních příkladů? Jakmile s tím budete hotovi, budeme pokračovat sm>rem k případové studii. Budeme ji budovat postupn> a vylepšovat ji vždy, když se při probírání dalších témat naučíme n>jakou novou techniku.

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
4 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, 4*12)

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

>>> 

Poznámka překladatele: 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 interaktivní režim překladače Python (Python spušt>ný v okn> s příkazovým řádkem operačního systému), 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 budou do dopisu automaticky vloženy informace o tomto HTML dokumentu.

$Id: cztutseq2.html,v 1.7 2004/09/06 06:04:27 prikryl Exp $