Kezdjünk Pythonnal programozni 8.

Ciklusszervezés (iteráció)

Az algoritmusok vezérlőszerkezetei közé tartozik az iteráció, más néven ciklus: egy vagy több utasítás ismételt végrehajtása. Akkor van rá szükség, ha egy adatcsoport valamennyi elemén ugyanazt a műveletet kell elvégezni. Ciklus használatánál a műveletet ciklikusan kell megismételni az összes adattal. A ciklikus műveletek végét valamilyen feltétel határozza meg. A ciklus kezdete előtt állhatnak műveletek, amelyeket csak egyszer kell ugyan végrehajtani, de a ciklushoz kapcsolódnak: a változók értékeinek beállítása. A műveletsorozatot, amelyet ismételten végrehajtunk, ciklusmagnak nevezzük. A ciklus folytatásával vagy befejezésével kapcsolatos vizsgálatot ciklusfeltétel-vizsgálatnak hívjuk. Az az adat, amelynek értéke meghatározza a ciklus folytatását, vagy befejezését, a ciklus változója. A ciklusműveletek addig hajtódnak végre, amíg a végrehajtási feltétel teljesül (van olyan ciklus, ahol a fordítottja igaz). Fontos, hogy a feltétel ne teljesüljön mindig, mert akkor a végrehajtások száma végtelen lesz.

Típusai:
előírt lépésszámú (növekményes) ciklus (FOR)

Az ismétlések száma a ciklusba való belépés előtt már ismeretes, vagy kiszámítható. Egy utasítás ismételt végrehajtását írja elő, miközben egy változó monoton növekvő vagy csökkenő értéket vesz fel. A ciklusváltozó az ismétléseket számolja az első kifejezés által megadott értéktől kezdve a második kifejezés által megadott értékig. A ciklusváltozó sorszámozott típusú (de tömb eleme nem lehet), a két kifejezésnek pedig azonos típusúnak kell lennie és kompatibilisnek a
ciklusváltozó típusával.

A for ciklus feje két részből tevődik össze:

  1. A for és in között szerepel annak a változónak (vagy változóknak!) a neve, amin keresztül el akarjuk érni az aktuális elemet (ez a példában a name nevet kapta). Itt nem szerepelhet másféle kifejezés.
  2. Az in után következik az objektum neve (vagy tetszőleges kifejezés), amit iterálunk (a példában ez a peopleváltozó)

Iteráljunk egy olyan list-et, ami list-eket tartalmaz.

A képernyőn kis két elemű tömbök jelennek meg, tehát a for nem mászik bele a belső tömbökbe.

A Pythonban lehetőség van rá, hogy egy tömb elemeit egy sornyi változóba kicsomagoljuk, ez az unpacking. A módszer a következő:

Így az első iterációban a [1990, 'Barbara']-ból az 1990-et a year, az 'Barbara'-t pedig a name változóba vezethetjük, és így tovább a későbbi iterációk során.

– feltételes ciklus:
elöltesztelő ciklus (WHILE)

while <feltétel>:
    utasítások
else:
    "végül" utasítások

A feltételvizsgálat a ciklusmag végrehajtása előtt történik meg. A ciklusmagot mindaddig végre kell hajtani, amíg a végrehajtási feltétel fennáll, ezt belépési feltételnek hívjuk. Ha a feltétel már nem teljesül, akkor a ciklus befejeződik és a vezérlés a ciklus utáni következő utasításra kerül.

Az 1. sorban deklaráltuk a counter változót 1 értékkel.

A 2. sor az érdekes: a while melletti feltételétől függ, hogy meddig kell a while blokkját ismételtetni. Ezt magyarul bentmaradási feltételnek szokták hívni.

Nézzük lépésenként hogy mi történik innentől:

  1. A program futása a while counter <= 10-re került. Itt a counter értéke 1, így a kifejezés egyenlő a 1 <= 10-el, ami True-ra értékelődik ki. Így belépünk a blokkba.
  2. Kiírjuk a counter értékét.
  3. A counter változ értékét növeljük 1-el. Ez nagyon fontos.
  4. Véget ért a blokk, vissza ugrunk a while sorára.
  5. A counter értéke most már 2, így a kifejezés egyenlő a 2 <= 10-el, ami True-ra értékelődik ki. Így újra belépünk a blokkba.

Ez a fenti játék egészen addig fut, amíg a counter el nem éri a 11-et, akkor ugyanis:

  1. A counter értéke 11, így a kifejezés egyenlő 11 <= 10-el, ami False-ra értékelődik ki, így nem lépünk be a blokkba.
  2. A blokkon kívüli forráskóddal folytatódik a program.

Látható volt, hogy a while kifejezése még ez előtt kiértékelődött mielőtt beléptünk volna

A fenti példát így is megoldhatnánk:

Elemek kiíratása:

hátultesztelő ciklus (WHILE) Külön kulcsszóval jelzett hátultesztelő ciklus a Pythonban nincs. Az alábbi egyszerű szintaktikai megoldással, külön kulcsszó nélkül készíthetünk hátultesztelő ciklust, talán nem olyan barátságtalan a dolog. Különösen, hogy ezzel a szerkezettel középen is tesztelhetünk.

while True:
    utasítások
    if <kilépési feltétel>:
        break
    (további utasítások)

végtelen ciklus

A megszakítási feltétel a törzsben található, ezáltal a vezérlőszerkezet
nem tartalmaz közvetlen információt a befejeződés feltételéről.