Jednoduché posloupnosti

O čem si budeme povídat?

Nejjednodušší program, který můžete napsat, se skládá z jednoduché posloupnosti příkazů. Nejjednodušší posloupnost je taková, která obsahuje jediný příkaz. Některé příkazy si teď vyzkoušíme. Nadpis bude říkat, co máme napsat za vyzývacími znaky překladače '>>> ' a následující odstavec nám objasní, co se stane.

>>> print 'Ahoj, vy tam!'

Příkaz print zajistí, aby nám Python zobrazil výsledek na orazovku. V tomto případě se tiskne posloupnost znaků A, h, o, j, ,,  , v, y,  , t, a, m, !. Takové posloupnosti znaků se v programátorských kruzích říká řetězec znaků, znakový řetězec nebo prostě jen řetězec.

Řetězec zapisujeme mezi uvozovky. V Pythonu můžeme použít buď jednoduché uvozovky (apostrofy, tak jako ve výše uvedeném případě), nebo dvojité uvozovky: "toto je řetězec". Díky tomu můžeme do řetězce vložit jeden ze zmíněných znaků, pokud pro ohraničení řetězce použijeme druhý z nich. Může se námto hodit například v případech, kdy věta obsahuje apostrofy (v anglických větách — viz ukázka — je tento jev poměrně častý):

>>> print "Monty Python's Flying Circus has a ' within it..."

Ale tisknout nemusíme jen znaky:

>>> print 6 + 5

Zde jsme vytiskli výsledek aritmetické operace — sečetli jsme šest a pět. Python rozpoznal zapsaná čísla a znak plus a zajistil sečtení čísel. Zobrazí se výsledek součtu (tedy 11).

Python tedy můžeme využít jako kapesní kalkulačku. Vyzkoušejte si pár dalších součtů. Vyzkoušejte si také další aritmetické operátory:

Vyzkoušejte si i kombinované výrazy, jako například:

>>> print ((8 * 4) + (7 - 3)) / (2 + 4)

Povšimněte si, jak byly pro vymezení podvýrazů použity závorky. Co by se stalo, kdybychom napsali stejný výraz bez závorek? Python preferuje násobení a dělení před sčítáním a odčítáním a proto by tedy uskutečnil tyto operace jako první. V matematice je to běžné, ale u programovacích jazyků to nemusí platit vždy. Všechny programovací jazyky definují pravidla, která určují posloupnost vyhodnocování operací. Tato pravidla jsou známa pod pojmem priorita operátorů. Pokud chcete přesně zjistit, jak bude výraz v konkrétním jazyce vyhodnocován, musíte se podívat do jeho referenční příručky. U jazyka Python je tomu většinou tak, jak bychom očekávali na základě logiky a intuice. Ale občas je to trochu jinak…

Pokud pracujeme s dlouhými výrazy a chceme si být jistí, že dostaneme výsledek podle našeho očekávání, pak bychom obecně měli použít závorek.

Další poznámka:

>>> print 5/2

výsledkem je celé číslo (integer) — v našem případě 2. Je to dáno tím, že Python zjistil, že jste ve výrazu uvedli pouze celá čísla a předpokládá, že chcete získat výsledek jako číslo stejného typu. (Jinými slovy, operátor dělení má celočíselné operandy, a proto Python předpokládá, že máte na mysli celočíselné dělení.) Pokud budeme chtít výsledek v podobě desetinného čísla, zapište alespoň jeden z operandů v podobě desetinného čísla:

>>> print 5/2.0
2.5

Python našel zápis čísla 2.0 a zjistil, že nám práce s desetinnými čísly nečiní problémy, takže nám vrátí výsledek v podobě desetinného čísla. (Desetinná čísla se v souvislosti s programováním označují také jako reálná čísla nebo čísla v plovoucí řádové čárce.) V posledních verzích Pythonu můžete popsané chování změnit tak, aby výsledkem dělení bylo vždy reálné číslo. Dosáhnete toho přidáním následujícího řádku na začátek vašeho programu (povšimněte si, že kolem slova future píšeme z obou stran dvojici znaků podtržení):

>>> from __future__ import division

Dá se očekávat, že tento způsob dělení se v některé z budoucích verzí systému Python stane standardem. Prozatím musíme Pythonu říci, že toto chování chceme zapnout.

Pokud byste chtěli zůstat u počítání v celých číslech, pak můžete získat hodnotu zbytku po celočíselném dělení pomocí operátoru % (znak procenta). Python pak zobrazí tento zbytek.

>>> print 7/2 
3 
>>> print 7%2 
1
>>> print 7%4 
3

Operátor % je znám pod názvem modulo nebo mod a v jiných jazycích se často zapisuje jako MOD nebo podobně.

Experimentujte a brzy vám bude jasné, o co jde.

>>> print 'Soucet je: ', 23+45

Již jsme si předvedli, že dokážeme tisknout řetězce a čísla. Nyní jsme oba případy zkombinovali do jednoho příkazu pro tisk s tím, že jsme je oddělili čáskou. Tento rys můžeme dále rozšířit o další trik jazyka Python pro výstup dat, který se nazývá formátovací řetězec:

>>> print "Soucet cisla %d a cisla %d je: %d" % (7,18,7+18)

V tomto příkazu obsahuje formátovací řetězec uvnitř značky uvozené znakem '%' (procento). Písmeno 'd' za % překladači jazyka Python říká, že zde má být umístěno dekadické číslo (tj. celé číslo vyjádřené v desítkové řádové soustavě). Hodnoty, které mají být dosazeny místo značek uvnitř řetězce, jsou získány z hodnot uvnitř výrazu v závorkách, který následuje samostatně umístěný znak % za formátovacím řetězcem.

Pro značky ve formátovacím řetězci lze použít i kombinace % s jinými znaky. Některé z nich jsou uvedeny níže:

V příručce jazyka Python jich naleznete mnohem více…

Ve skutečnosti můžete v jazyce Python příkazem print vytisknout libovolný objekt. Někdy výsledek neodpovídá tomu, co byste očekávali (někdy se zobrazí jen popis, který říká, o jaký druh objektu jde), ale objekt můžete vytisknout vždy.

>>> import sys

Tento příkaz je nějaký podivný. Pokud jste jej vyzkoušíte, uvidíte, že zjevně nedělá vůbec nic. Ale ve skutečnosti to není pravda. Abychom rozuměli tomu, co se děje, potřebujeme nahlédnout do architektury jazyka Python. (Pokud programujete v jiném jazyce, mějte chvíli strpení. Určitě používáte nějaký podobný mechanismus.).

Když Python spustíte, máte k dispozici skupinu příkazů, které jsou označovány jako zabudované (built-in), protože jsou zabudovány přímo do jádra překladače jazyka Python. Ale Python může rozšiřovat seznam dostupných příkazů tím, že k jádru přičleňuje rozšiřující moduly. Trochu to připomíná situaci, kdy si ve vašem oblíbeném obchodě Udělej si sám koupíte nový nástroj a přidáte jej do své bedny s nářadím. Nástroj zde představuj část příkazu sys a operace import jej přidá k dosud užívaným nástrojům.

Ve skutečnosti tento příkaz zpřístupní celou skupinu nových 'nástrojů' v podobě dalších příkazů jazyka Python, které jsou ve výše uvedeném případě definovány v souboru 'sys.py'. Toto je tedy způsob, jakým lze Python rozšiřovat, aby uměl provádět všechny možné důmyslné věci, které nejsou zabudovány do základního systému. Můžete dokonce vytvořit své vlastní moduly, naimportovat je (příkazem import) a potom je používat naprosto stejným způsobem, jako se používají moduly, které jsou dodávané s instalací jazyka Python.

Takže jak vlastně máme tyto nové nástroje používat?

>>> sys.exit()

Ale! Co se to stalo? Prostě jsme spustili příkaz exit, který je definován v modulu sys. Tento příkaz způsobí ukončení práce s interpretem jazyka Python. (Poznámka: Obvykle Python ukončujeme tím, že za vyzývací posloupnost >>> zadáme znak EOF (End Of File — konec souboru) — v systému DOS je to znak Ctrl-Z, v systému Unix je to znak Ctrl-D.)

Všimněte si, že za příkazem exit jsou uvedeny dvě závorky. To proto, že se jedná o funkci definovanou v sys. A pokud v jazyce Python voláme funkci, musíme závorky psát, i když v nich není nic uvedeno.

Zkuste napsat sys.exit bez závorek. Místo toho, aby Python funkci provedl, zareaguje pouze výpisem sdělení, že exit je funkce.

A nakonec bychom si měli povšimnout, že poslední dva příkazy jsou ve skutečnosti užitečné pouze v kombinaci. To znamená, že pokud chceme Python ukončit jinak, než napsáním EOF, musíme napsat:

import sys 
sys.exit()

A to je přece posloupnost dvou příkazů! Takže jsme se zase dostali o krůček blíže k opravdovému programování…

A teď v jazyce JavaScript

Narozdíl od Pythonu nemůžeme při použití JavaScript zkoušet příkazy tak, že bychom je jednoduše psali a pozorovali okamžité důsledky jejich provedení. Příkazy ale můžeme vepsat do html souboru a ten zobrazit v prohlížeči. Tím zjistíme, jak fungují:

<html><body>
<script type="text/javascript">
document.write('Hello there!<br>');
document.write("Monty Python's Flying Circus has a ' within it<br>");
document.write(6+5);
document.write("<br>");
document.write(  ((8 * 4) + (7 - 3)) / (2 + 4)  );
document.write("<br>");
document.write( 5/2 );
document.write("<br>");
document.write( 5 % 2 );
</script>
</body></html>

Výsledek by měl vypadat takto:

Hello there!
Monty Python's Flying Circus has a ' within it
11
6
2.5
1 

Povšimněte si, že přechody na nové řádky si musíme vynutit zápisem <br>. Je to dáno tím, že JavaScript produkuje svůj výstup v podobě HTML a formát HTML definuje, že se zobrazované řádky mají zalamovat na takovou šířku, jakou dovolí okno prohlížeče. Abychom vynutili přechod na nový řádek, musíme použít příslušný HTML symbol, kterým je právě <br> (br z anglického break [brejk] — zalomit).

A ještě v jazyce VBScript…

Podobně jako v případě JavaScript musíme i v případě VBScript vepsat příkazy do souboru a otevřít jej v prohlížeči. V jazyce VBScript budou mít příkazy z předchozího příkladu následující podobu:

<html><body>
<script type="text/vbscript">
MsgBox "Hello There!"
MsgBox "Monty Python's Flying Circus has a ' in it"
MsgBox 6 + 5
MsgBox ((8 * 4) + (7 - 3)) / (2 + 4)
MsgBox 5/2
MsgBox 5 MOD 2
</script>
</body></html>

Výstupem by mělo být zobrazení dialogových oken, z nichž každé zobrazuje výstup z jednoho řádku programu.

Zmiňme se ještě o jedné věci. Jazyk VBScript neumožňuje zápis řetězců v apostrofech (v dalších tématech si ozřejmíme důvod). Uvnitř řetězce, který musí být obklopen uvozovkami, můžeme apostrof normálně použít. Pokud ovšem chceme do řetězce vložit uvozovky, musíme použít funkci Chr(), která pro zadaný ASCII kód znaku vrací příslušný znak. Výsledný kód není zrovna přehledný, ale následující příklad by měl ukázat, jak na to:

<script type="text/vbscript">
Dim uv
uv = Chr(34)
MsgBox uv & "Vypadni!" & uv & " zařval"
</script>

Pokud potřebujete zjistit ASCII kód pro libovoný znak, můžete ve Windows použít aplikaci Mapa znaků. Můžete se také podívat na úvodní stránku www.asciitable.com, kde vás bude (pro náš účel) zajímat dekadická hodnota kódu. Můžete použít i následující kousek programu zapsaný v JavaScript a případně nahradit znak uvozovek tím znakem, jehož kód vás zajímá:

<script type="text/javascript">
var code, chr = '"';
code = chr.charCodeAt(0);
document.write("<br>ASCII kód znaku  " + chr + "  je " + code);
</script>

Nemusíte si lámat hlavu s tím, co to znamená. Ještě se k tomu dostaneme. Prozatím skript prostě použijte v situaci, kdy budete chtít zjistit ASCII kód hledaného znaku.

Náš první pohled na programování máme za sebou. Ani to moc nebolelo, že ne? Než se pustíme dál, budeme se muset podívat na suroviny využívané při programování — zejména na data a na to, co s nimi můžeme dělat.

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: cztutseq1.html,v 1.12 2005/01/09 19:44:09 petr Exp $