Cykly a vstupně-výstupní operace

V dnešním díle našeho seriálu se ještě v krátkosti
podíváme na cykly v Jythonu, vstupně-výstupní operace
a na spouštění Jythonovských modulů z příkazové
řádky.

Cyklus for

Cyklus for je v Jythonu používán
častěji než while a chová se zde zcela
jinak než v Javě. Je používán pro iteraci přes
sekvence.

Syntaxe je následující:

for název_proměnné in sekvece_nebo_výraz:

blok

else:

blok

 

Klausule else se chová stejně, jako
v prípadě cyklu while. Následující
fragmenty kódu jsou si zcela rovnocenné:

>>>for x in [1,2,3]:

... print x

...

1

2

3



>>>for x in range(1,4):

... print x

...

1

2

3

 

>>>seznam = [1,2,3]

>>>index = 0

>>>while index < len(seznam):

... print seznam[index]

... index += 1

...

1

2

3

Sdružený seznam, aneb List
comprehension

Jednou z velmi často vykonávaných operací je
vytváření nových seznamů ze seznamů již existujících.
Takto vytvořeného nového seznamu lze dosáhnout
například následující konstrukcí:

>>>seznam = ['prvni', 'druhy', 'treti']

>>>vysledek = []

>>>for x in seznam:

... vysledek.append(x + 'A')

...

>>>vysledek

['prvniA', 'druhyA', 'tretiA']

Tento příklad je přímočarý, ale je možné jej zapsat
pomocí konstrukce zvané anglicky list
comprehension
:

[vyraz for promenna in sekvence]

 

Výše uvedený fragment je možné přepsat následovně:

>>>seznam = ['prvni', 'druhy', 'treti']

>>>[x + 'A' for x in seznam]

['prvniA', 'druhyA', 'tretiA']

Nadále budeme místo anglického termínu list
comprehension
používat pojem sdružený
seznam
.

Sdružený seznam můžeme používat všude tam, kde lze
použít obyčejný seznam. Často se používá na pravé
straně přiřazovacího příkazu a v cyklech for. Následující konstrukce setřídí seznam
řetězců podle jejich délky:

>>>seznam = ['a', 'ab', 'abc', 'abcd']

>>>dvojice = [(-len(x), x) for x in seznam]

>>>dvojice

[(-4, 'abcd'), (-3, 'abc'), (-2, 'ab'), (-1, 'a')]

>>>setridSeznam = [x[1] for x in dvojice]

>>>setridSeznam

['abcd', 'abc', 'ab', 'a']

Konstrukci sdruženého seznamu lze rozšířit přidáním
filtrovací podmínky:

[vyraz for promenna in sekvence if testovaci_podminka]


Pokud chceme setřídit seznam řetězců tak, abychom
získali pouze prvky splňující určité podmínky
postupujeme následovně:

>>>seznam = ['a', 'ab', 'abc', 'abcd']

>>>dvojice = [(-len(x), x) for x in seznam if len(x) >= 3]

>>>

>>>dvojice

[(-3, 'abc'), (-4, 'abcd')]

>>>

>>>setridSeznam = [x[1] for x in dvojice]

>>>setridSeznam

['abc', 'abcd']

Nyní si ukážeme nejjednodušší nástroje, které nám
umožní předkládat našim programům data ke zpracování
s následným zobrazením výsledků:

Vstup

Pro interaktivní zadávání údajů nám poslouží
vestavěná funkce raw_input, která má
následující syntaxi:

raw_input([prompt])


Tato funkce přečte ze standardního vstupu řádek,
převede ho na řetězec (odřízne znaky konce řádku
‘\n'), a poskytne tento řetězec
jako návratovou hodnotu. Pokud bude při volání funkce
vyplněn nepovinný argument prompt, vypíše
se na standardní výstup.

>>>s = raw_input("Zadejte vstupni udaje: ")

Zadejte vstupni udaje: Ahoj svete!!!

>>>

>>>s

'Ahoj svete!!!'
Výstup

Jython umožňuje tisknout výstupní hodnoty na
standardní výstup prostřednictvím příkazu print, jehož nejjednodušší forma je:

	print výraz


Při vykonávání tohoto příkazu se nejprve vyhodnotí
výraz a poté je tisknut na standardní výstup
následovaný znakem pro novou řádku:

>>>print 3

3

>>>print 1 + 2

3

>>>print ['a', 'b']

['a', 'b']

Je možné tisknout současně i několik výrazů, pokud
použijete jako oddělovač čárku:

>>>print 'Vysledek je: ', 123, ' a dalsi je: ', [1,2,3]

Vysledek je: 123 a dalsi je: [1, 2, 3]

Pokud je poslední výraz v příkazu print zakončen čárkou, nevloží se za výstup
znak nové řádky:

>>>#print ukoncen novou radkou

>>>print 1; print 2

1

2

>>>#nyni se vytiskne vse na jednu radku

>>>print 1, ; print 2

1

2

Zápis programu

Až do tohoto okamžiku jsme si při předvádění
vlastností jazyka Jython vystačili s interaktivním
módem, který nám umožňoval vkládat jednotlivé
konstrukce jazyka přímo a zároveň nám hned zobrazil
výsledky našeho snažení. Tato vlastnost je výhodná
tehdy, kdy vytváříme nějaký prototyp našeho programu
a potřebujeme interaktivně testovat jeho chování.

Pro opětovné využití našeho kódu však tato
vlastnost příliš vhodná není. Abychom mohli naše
programy spouštět kdykoliv to potřebujeme, je
vhodnější je ukládat do textových souborů. Na rozdíl
od Javy, názvy textových souborů nejsou žádným
způsobem svázány s jejich obsahem. Slouží jen jako
úložiště našich zdrojových kódů. Později, až se
seznámíme s dalšími koncepty jazyka Jython, ukážeme
si jak tyto soubory organizovat do složitějších
struktur, jako například knihoven a balíčků.

Soubor, který obsahuje zdrojový kód, se nazývá modul. Moduly jazyka Jython mají extenzi .py. Pokud chceme náš modul spustit, stačí na
příkazové řádce zadat příkaz:

jython mujmodul.py


D:\Jython\Source codes>jython mujmodul.py

Vytiskne 10 cisel po sobe:

0

1

2

3

4

5

6

7

8

9

D:\Jython\Source codes>

Co se týče obsahu modulu, moduly mohou v
nejjednodušším případě obsahovat spustitelný kód,
který je okamžitě vykonán. Moduly většinou kromě
tohoto kódu obsahují odkazy na jiné moduly, definice
funkcí a tříd, které jsou pak dále využívány. Příště
si ukážeme malou ukázku jednoduchého modulu, který
nám spočítá nejmenšího společného dělitele dvou
čísel.