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 $