Ciklusok – a while
Most, hogy belevágtál a programozásba, jól jönne egy olcsó webtárhely? A SzerverPlex kedvező árú cPanel tárhelyeit most 5% kedvezménnyel igénybeveheted, és ezzel az info9 fennmaradását is támogatod.
Kattints a gombra, majd a csomag kiválasztása után aktiváld az INFO9 kuponkódot a fizetés előtt.
Szerzek webtárhelyet!A programjaink elkészítésekor nagyon gyakori, hogy bizonyos utasításokat többször szeretnénk megismételni egymás után. Például szeretnénk egy adathalmaz minden elemét megvizsgálni, vagy egymás utáni számokkal szeretnénk számításokat, stb. Ahhoz, hogy utasításokat megismételjünk, ciklusokat használhatunk. A Python nyelvben (és a legtöbb egyéb programnyelvben is) a legesgyszerűbb ciklusfajta az elől tesztelő ciklus, azaz a while.
A while felépítés tekintetében hasonlít az if szerkezethez, az elején meg kell adni neki egy feltételt, majd alá a belefoglalandó utasításokat. Különbség azonban, hogy az if az alatta lévő utasításokat csak egy alkalommal hajtja végre, addig a while meg fogja őket ismételni, egészen addig, ameddig a feltétel teljesül. Fontos, hogy a python nyelvben a vezérlési szerkezetekbe foglalandó utasításokat szóköz, vagy tabulátor karakterekkel “bentebb kell tolnunk”, így tudja megállapítani a futtatókörnyezet, hogy mely utasítások képezik a ciklus részét. Nézzünk egy egyszerű példát:
szam = 0
while szam < 3:
print(szam)
szam = szam + 1
print("Vége")
[
{ "steps": [0], "variables": [ {"name":"szam","value":"0"} ], "hint": "Létrehozunk egy szam nevű változót, és beállítjuk az értékét 0-ra."},
{ "steps": [1], "variables": [ {"name":"szam","value":"0"} ], "hint": "A ciklus megvizsgálja a feltételt. Mivel a szam értéke kisebb mint 3, a feltétel teljesül, így lefut a ciklus belseje."},
{ "steps": [2], "console":"0", "variables": [ {"name":"szam","value":"0"} ], "hint": "Kiírjuk a 0-t a konzolra."},
{ "steps": [3], "console":"0", "variables": [ {"name":"szam","value":"1"} ], "hint": "A szam változó értékét 1-gyel megnöveljük."},
{ "steps": [1], "console":"0", "variables": [ {"name":"szam","value":"1"} ], "hint": "Mivel a ciklusmag végetért, ismét megvizsgáljuk a feltételt. A szam most 1, ami továbbra is kisebb mint 3, így ismét lefut a ciklus belseje."},
{ "steps": [2], "console":"0\n1", "variables": [ {"name":"szam","value":"1"} ], "hint": "Kiírjuk az 1-et a konzolra."},
{ "steps": [3], "console":"0\n1", "variables": [ {"name":"szam","value":"2"} ], "hint": "A szam változó értékét 1-gyel megnöveljük."},
{ "steps": [1], "console":"0\n1", "variables": [ {"name":"szam","value":"2"} ], "hint": "Ismét megvizsgáljuk a feltételt. A szam most 2, ami továbbra is kisebb mint 3, így ismét lefut a ciklusmag."},
{ "steps": [2], "console":"0\n1\n2", "variables": [ {"name":"szam","value":"2"} ], "hint": "Kiírjuk az 2-t a konzolra."},
{ "steps": [3], "console":"0\n1\n2", "variables": [ {"name":"szam","value":"3"} ], "hint": "A szam változó értékét 1-gyel megnöveljük."},
{ "steps": [1], "console":"0\n1\n2", "variables": [ {"name":"szam","value":"3"} ], "hint": "Ismét megvizsgáljuk a feltételt. Mivel a szam jelenleg 3, így a feltétel most már nem teljesül, a ciklusnak vége."},
{ "steps": [4], "console":"0\n1\n2\nVége", "variables": [ {"name":"szam","value":"3"} ], "hint": "Kiírjuk a Vége feliratot a konzolra."}
]
Ennek a programnak a kimenete:
0
1
2
Vége
Mivel a while ciklus feltételének azt adtuk meg, hogy szam<5, így a ciklusban található kódrészlet (azaz a ciklusmag) csak addig kerül ismétlésre, ameddig a szam változó értéke kisebb, mint 5. Az 5-ös számot már nem írja ki a kód, mert addigra a ciklus megszakad. Természetesen ennél komplexebb folyamatokat is készíthetünk a while vezérlési szerkezet segítségével, íme egy másik kódrészlet, amiben az 5-ös szorzótáblát írjuk ki a képernyőre, 1-től 6-ig:
szorzo = 1
while szorzo <= 6:
print(5*szorzo)
szorzo = szorzo + 1
A programunk kimenete ezesetben:
5
10
15
20
25
30
Egy hasznos tanács a ciklusokhoz: amikor ciklusokat használunk utasítások ismétlésére, alaposan gondoljuk végig, hogy az ismétlés mikor fog véget érni!!! Ha olyan feltételt adunk meg, ami örökké igaz marad, akkor ún. végtelen ciklushoz jutunk, azaz a programunk a végtelenségig fogja ugyanazt ismételgetni.
Próbáld ki magad is! Nézd át a cikkünkhöz tartozó mintakódot - szerkeszd és futtasd közvetlenül a böngésződben, az info9 LineFlame fejlesztőeszközével!
Gyakorló feladatok
1. Feladat: Készíts egy programot, ami kiírja 1-től 30-ig a 2-vel vagy 3-mal osztható számokat!
2. Feladat: Készíts egy programot, ami bekér egy jelszót a felhasználótól, és ha a jelszó helyes, kiírja a "Titkos adatok" feliratot és kilép, ha pedig a jelszó helytelen, akkor megkérdezi újra (és újra és újra egészen addig, amíg meg nem adjuk a helyes jelszót). A helyes jelszó: TORTA.
3. Feladat: Készíts egy programot, ami kiírja a 2-nek az első 10 hatványát.
4. Feladat: Kérj be egy számot a felhasználótól, és döntsd el róla, hogy prímszám-e vagy sem!
5. Feladat: Kérj be egy számot a felhasználótól, és döntsd el, hogy a szám négyzetszám-e. Ez a feladat gond nélkül megoldható ciklusok nélkül is, de mivel az egyik lehetséges megoldása igényel ciklust, így ide is idekerült.