Naucte se Python - cykly a podminky

V nasem kratickem pruvodci jazykem Python jsme se pozastavili u toho, co Python je a jake zakladni datove typy a struktury nam nabizi. Na to, abychom vytvorili jednoduchy program, je to vsak malo. Tentokrat se podivame na podminky a cykly.

Zivot neni nikdy primocary. Clovek dojde na rozcesti a musi se rozhodnout. V obdobne situaci se ocita i programator. Jak se zachovat? Jak to vyjadrit? V nekterych jazycich byva velke mnozstvi prikazu, ktere umozni programatorovi rozhodnuti vyjadrit. V Pythonu tech moznosti tolik neni. Prakticky jen if.

Pouziti if je velice jednoduche. Staci vytvorit podminku, a dle ni se interpreter jazyka rozhodne. Zkusme si to na jednoduchem prikladu:


if a == 5:
         a = a +1
         print "OK"

Tento priklad nam kupodivu demonstruje radu veci, ktere bude treba znat. Vsimnete si, ze prikaz if konci dvojteckou, za ni nasleduje blok, ktery se provede, pokud je podminka v prikazu if platna. Nic sloziteho a take nic neobvykleho. Co ovsem je neobvykle, je onen blok prikazu. V nasem prikladu kupodivu neni nijak oznacen jeho zacatek, a ani jeho konec. Clovek by cekal neco jako:

if  a ==5:
      Begin
                a = a +1
         	print "OK"
      end

Tak by to nejak vypadalo v Pascalu, a nebo jiste hodne lidi bude ocekavat syntaxi znamou z C, Perlu a dalsich jazyku:

if  a ==5:
      {
          a = a +1
          print "OK"
      }

Ve skutecnosti v Pythonu nic takoveho opravdu neni a ani to nepotrebuje. Blok se pozna jednoduse - dle formatovani. Proste a jednoduse staci blok napsat o nekolik znaku dale od zacatku radku, a blok je na svete. To minimalne znamena, ze programy v Pythonu budou vizualne vypadat dost podobne a nebude takovy problem vyznat se i v tech, ktere jste nenapsali.

If je ale daleko mocnejsi. Muzete definovat nejen, co se ma vykonat, pokud podminka plati, ale i to, co je treba udelat, pokud neplati:

if  a  == "ahoj":
           print "OK"
     else:
           print "tak nic"
Jeho moznosti tim vsak nejsou zdaleka vycerpany. Co kdyz chcete reagovat na vic situaci, ktere nastanou?
if barva == "cervena":
              print "cervena barva"
       elif barva =="modra":
              print  "modra barva"
       elif barva == "zelena":
              print "zelena barva"
       else:
             print "tak tuhle barvu vazne neznam"

A znova, znova, znova...

Obcas se stane, ze je nutne nejakou cinnost vykonavat opakovane. Proc tutez vec desetkrat opisovat do programu, kdyz ten spravny cyklus to vyresi za nas. Opet kontrastne vuci ostatnim jazykum nenabizi desitky prikazu, ktere delaji velice podobne veci. Asi nejznamejsim cyklem je cyklus for. V Pythonu kupodivu nebo mozna bohudiky funguje ponekud jinak, nez byva obvykle. Rozhodne na pocitani od x do y neni primarne staveny. Vice napovi opet maly priklad:


for x in ("cervena","zelena","modra","zluta"):
       print "barva: ",x

Prikaz for postupne projde cely seznam, ktery jsme definovali, tak jako v nasem pripade "primo na miste", a nebo takto:

a = ("cervena","zelena","modra","zluta")
for x in a:
       print "barva: ",x

Pokud budete potrebovat, aby se for choval tak, jak je tomu zvykem treba v C, musite pouzit prikaz xrange, ktery vygeneruje seznam o definovanem poctu prvku v definovanem intervalu.

for x in xrange(10):
        print x

Pokud tento priklad prepisete primo na prikazovou radku interpreteru, ziskate vypis deseti cisel od nuly do deviti:

>>> for x in xrange(10):
...      print x
...
0
1
2
3
4
5
6
7
8
9

Interval lze ziskat podobne jen malou zmenou parametru xrange:

>>> for x in xrange(10,20):
...       print x
...
10
11
12
13
14
15
16
17
18
19

Xrange ma jeste sveho bratricka: prikaz range. Ten vytvori sekvenci cisel stejne jako xrange, ale na rozdil od nej se tato sekvence nevytvari prubezne, ale nejdrive se vytvori a pouzije. Pro cyklus to tedy neni prilis prakticke (pokud se cyklus opakuje treba 1000krat, alokovalo by se prilis mnoho pameti).

Ne vzdy vime a vubec potrebujeme vedet, kolikrat se dane prikazy maji zopakovat. Vime jen, ze tak dlouho, dokud plati nami definovana podminka. Pro tyto ucely existuje prikaz while. Pouziti je obdobne jako v pripade toho nejjednodussiho prikazu if, jen s tim rozdilem, ze blok prikazu se provadi opakovane, a nebo pokud plati podminka jiz pri prvnim vstupu do while, pak ani jednou.


x = 0
while x<100:
    x = x + 1
    print x

Kazdy cyklus muzeme jeste drobne podvest nekolika prikazy. Prikaz break prerusi nejvnitrnejsi cyklus a program dale pokracuje az za blokem prikazu, ktere zpracovava cyklus. Naproti tomu continue ukonci jen jeden pruchod cyklu:
x = 0
while 1==1:
         x = x + 1
         print x
         if  x>100:
                 break
print "konec"

Petr Snajdr (snajdr@firma.seznam.cz) - 21.10.1999

Zaujal Vas tento clanek? Chcete nam k nemu neco sdelit? Nevahejte a sdelte nam svuj nazor 


S O U V I S E J I C I   O D K A Z Y . . .

Python - datove struktury - 18.10.1999
Naucte se Python - datove typy - 13.10.1999
Naucte se programovat v Pythonu - 4.10.1999
Co je to Python? - 19.3.1999