Linkek
Programozási ismeretek
Alapoktól a speciálisig...
Ismétlések
Ciklusszervezés a Pythonban
Ha bizonyos utasításokat ismételten végre kell hajtanunk, akkor nyúlunk az ismétlődés (ciklus, iteráció) programszerkezethez. Ebben a bejegyzésben a Python ciklusszervező utasításait, illetve ezek előnyeit nézhetjük át egyszerű példákon keresztül.
A példákban véletlenszámokkal, fájlból beolvasott adatokkal mutatjuk be a különböző típusú ismétlődések használatát.
Alapvetően kétféle (lényegében háromféle) ciklust különböztethetünk meg:
- SZÁMLÁLÓS CIKLUS
-
- FELTÉTELES CIKLUS
- "előltesztelős" ciklus - ismétlődés feltételének vizsgálata ismétlés előtt
- "hátultesztelős" ciklus - ismétlődés feltételének vizsgálata egyszeri végrehajtás után
Mondatszerű leírás
SZÁMLÁLÓS CIKLUS (N-szer ismétlés)
Ismételd i=1-től N-ig utasításblokk Ismétlés vége Ismételd i=N-től 1-ig -1-esével utasításblokk Ismétlés vége
"ELŐLTESZTELŐS" CIKLUS (Egy logikai állítás - IGAZ/HAMIS értékű kifejezés - az ismétlődés feltétele) (Általában az ismétlés az állítás IGAZ értéke esetén történik meg, és az utasításblokkban kell lennie olyan utasításnak, amely hatással van erre a logikai állításra.)
Ismételd amíg (logikai állítás igaz) utasításblokk Ismétlés vége
"HÁTULTESZTELŐS" CIKLUS (Ez a ciklusfajta egyszer biztosan végrehajtja az utasításblokkot, és általában az ismétlés az állítás IGAZ értéke esetén történik meg újra, de ez nyelvfüggő, és az utasításblokkban itt is kell lennie olyan utasításnak, amely hatással van erre a logikai állításra.)
Ismételd utasításblokk amíg (logikai állítás igaz)
SZÁMLÁLÓS CIKLUSOK - Python példa (letöltés: ismetles01.py)
A számlálós ciklusokhoz hasonlóan kell szervezni azokat a ciklusok is, amelyek egy adatsorozat (tömb, vektor) elemeit dolgozzák fel, egymás után, szépen sorban. Ezeket, én, a számlálósokhoz hasonlóan csak „for” ciklusokként emlegetek.
Nézzünk erre is példákat!
"FOR" CIKLUSOK - Python példa (letöltés: ismetles02.py)
FELTÉTELES CIKLUSOK A PYTHONBAN
A Pythonban csak "előltesztelős" feltételes ciklus van, illetve nekünk kell kreálni "hátultesztelős" ciklust, ha azt akarjuk, hogy legalább egyszer lefusson a ciklusmag, azaz az ismétlendő utasításblokk.
Klasszikusan a programozási nyelvek a while... (ismételd amíg...), és a do...while (ismételd...amíg) vezérlőparancsokat használják, ezek közül a Pythonban a while... típus van meg.
Számlálós ciklusok feltételes ciklusként is megvalósíthatók. Nézzük a példát és figyeljük meg a lényegi különbséget az "elől-" és a "hátultesztelős" ciklusok között.
Nézzünk példákat mindkét feltételes ciklus megvalósítására a Pythonban!
FELTÉTELES CIKLUSOK - Python példa (letöltés: ismetles03.py)
Futási képernyő:
ELŐLTESZTELŐelőltesztelős ciklusváltozó kezdőértéke: 1 szám: 1 négyzete: 1 szám: 2 négyzete: 4 szám: 3 négyzete: 9 szám: 4 négyzete: 16 szám: 5 négyzete: 25 szám: 6 négyzete: 36 szám: 7 négyzete: 49 szám: 8 négyzete: 64 szám: 9 négyzete: 81 szám: 10 négyzete: 100HÁTULTESZTELŐhátultesztelős ciklusváltozó kezdőértéke: 1 szám: 1 négyzete: 1 szám: 2 négyzete: 4 szám: 3 négyzete: 9 szám: 4 négyzete: 16 szám: 5 négyzete: 25 szám: 6 négyzete: 36 szám: 7 négyzete: 49 szám: 8 négyzete: 64 szám: 9 négyzete: 81 szám: 10 négyzete: 100 Még egyszer? (i/n)iELŐLTESZTELŐelőltesztelős ciklusváltozó kezdőértéke: 11HÁTULTESZTELŐhátultesztelős ciklusváltozó kezdőértéke: 11 szám: 11 négyzete: 121 Még egyszer? (i/n)
A kimeneti képernyőn látható, hogy ha a ciklusváltozó kezdőértéke nagyobb, mint 10 (lásd while i <11 /"előltesztelős"/ és if i>10 /"hátultesztelős"/), akkor az előltesztelős ciklusmag egyszer sem, a hátultesztelős egyszer lefut!
A ciklusfeltételekben (is) használható OPERÁTOROK
Relációk:| >, <, >=, <= | logikai értéket ad vissza (True/False) | x > y |
| == | x azonos y-nal (True/False) | x == y |
| != | x nem azonos y-nal (True/False) | x != y |
Logikai operátorok:
| and | True, ha mindkét operandus True, egyébként False | x and y |
| or | True, ha legalább az egyik True | x or y |
| not | True, ha x False, False, ha x True | not x |
Például:
x>=0 and x<=10
x==y or x==-y
Szökőévek a következők:
minden néggyel osztható év, kivéve a százzal is oszthatókat. Szökőévek viszont a 400-zal osztható évek.
(év%4==0 and év%100!=0) or év%400==0
Tagsági operátorok (listák):
| in | True, ha y eleme az x listának | y in x |
| not in | True, ha y nem eleme x-nek | y not in x |