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.
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:
>>>) zkoušíte v>ci, které poté přidáváte do
zdrojového textu, aAutor 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.
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.
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.
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:
<h1>text</h1> pro první (nejvyšší) úroveň nadpisů,<h2>text</h2> pro druhou úroveň nadpisů,<h3>text</h3> pro třetí úroveň nadpisů, atd.
(Norma HTML 4.01 definuje
značky pro 6 úrovní nadpisů.)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.
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 $