Zdá se vám to zmatené? Chování bloků vyzkoušíme na cyklu for. Spusťte python a zadejte následující text: Nejdříve napište for i in range(2):, potom vytvořte blok libovolným počtem mezer (tabulátorů) před příkazy print 'a', a stejným počtem mezer (tabulátorů) print 'b', Tělo cyklu ukončíte ENTRem (tím se vrátíte do nadřazeného bloku, který začíná na začátku řádky) a cykus for se provede.
Doporučuji pro vytváření bloku používat jeden způsob odsazování (např. 1 tabulátor) a toho se držet při psaní všech programů. Některé oditory zaměňují tabulátory za mezery, jiné ne, ale pamatujte, že Python mezi mezerami a tabulátory rozlišuje!>>> for i in range(2): ... print 'a', ... print 'b', ... a b a b
Nyní trochu složitější konstrukce - vnořený cyklus:
>>> for i in range(2): ... print 'cyklus %i' % i ... for j in range(2): ... print 'a', ... print 'b', ... print 'konec cyklu %i' % i ... cyklus 0 a b a b konec cyklu 0 cyklus 1 a b a b konec cyklu 1
Zatímco v prvním příkladě vznikla v druhém cyklu nová proměnná j v druhém příkladě se oba cykly "hádají" o jednu proměnnou i>>> for i in range(2): ... print 'cyklus %i' % i ... for i in range(2): ... print 'a', ... print 'b', ... print 'konec cyklu %i' % i ... cyklus 0 a b a b konec cyklu 1 cyklus 1 a b a b konec cyklu 1
Pokud chcete v podřízeném bloku vytvořit globální proměnou, použijte příkaz global.
>>> for i in range(1): ... y = 'lokalni' ... global x ... x = 'globalni promenna' ... >>> print x globalni promenna >>> print y Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'y' is not defined >>>
Cyklus for prochází jednotlivé položky seznamu
(n-tice,nebo řetězce) za slovem in a pro každou položku se
jedenkrát provede blok, který začíná za dvojtečkou. Tento seznam
není bezpečné během cyklu měnit. Proměnná i reprezentuje
aktuální hodnotu ze seznamu. Příklady použití cyklu for jsou
výše.
Pokud by jste chtěli dělat cyklus přez veliký rozsah hodnot, je
lepší použít namísto funkce range() xrange(), která je o něco pomalejší,
ale šetří paměť, protože nevytváří naráz velký seznam, ale oběkt,
který vytváří čísla za chodu podle požadavků.
Cyklus while provádí blok za dvojtečkou tak dlouho, dokud je podmínka pravdivá.
>>> i=0 >>> while range(10)[i] < 5: ... print range(10)[i], ... i = i+1 ... 0 1 2 3 4
Ani zde nejde pro skušeného programátora o žádné překvapení. Výrazy elif a else jsou nepovinné. Else může být jen jedno a je vždy na konci. Provede se pouze ten blok, který je před první pravdivou podmínkou, nebo blok za else (pokud existuje).
>>> for i in range(1000): ... if i % 3 == 0: ... print 'Hups', ... continue ... if i > 10: ... break ... print i, ... Hups 1 2 Hups 4 5 Hups 7 8 Hups 10
