Fájlok írása Pytonban!
Elkészült a Python nyelv Szövegfájlok írása tananyagunk! Jó tanulást, jó gyakorlást!

<info9>

Ciklusok megszakítása: break, continue

Itt a húsvét!

Szeretnél az ünnepek alatt is gyakorolni? Vár az Easter Bug Hunt játékunk! Csatlakozz, és keresd meg az összes hibát - akár még jutalom is ütheti a markod!

Irány a játék

Annak meghatározására, hogy egy ciklus pontosan hány alkalommal / meddig kerüljön megismétlésre, alapvetően a ciklus feltételét használjuk. Vannak azonban olyan speciális esetek, amikor valamilyen ok miatt mégis szeretnénk egy ciklust megszakítani, annak ellenére, hogy a feltétel egyébként továbbra is igaz lenne. Erre az esetre hasznos kulcsszó a break, amely lehetővé teszi a ciklusmag belsejéből a ciklus megszakítását.

Érdemes megjegyezni, hogy a break kulcsszót sosem muszáj alkalmazni, az minden esetben kiváltható a ciklus átalakításával. Ennek ellenére azonban sok esetben átláthatóbb maradhat egy-egy kódrészletünk, vagy megspórolhatunk némi extra kódbűvészkedést, ha egyszerűen használjuk amikor szükséges. Nézzünk egy gyakorlati példát a break használatára! Az alábbi kódrészlet bekér 5 darab osztályzatot a felhasználótól. Amennyiben a felhasználó nem egy érvényes jegyet ír be, úgy a program hibaüzenetet dob, és leállítja a ciklust:

for i in range(5):
    jegy = int(input("Adj meg egy osztályzatot: "))

    if jegy<1 or jegy>5:
        print("Hibás adatot adtál meg!")
        break

Az egyik legjellemzőbb felhasználása a break kulcsszónak a van-e legalább egy olyan, ami... típusú feltételek vizsgálata listákon. Ha azt szeretnénk eldönteni, hogy a szamok listának van-e legalább egy olyan eleme, ami 10-nél nagyobb, akkor onnantól, hogy találtunk legalább egy ilyet, tovább már nem érdemes vizsgálódni, hisz akkor már biztos, hogy a feltétel teljesül. Ha viszont nem találunk egyet sem, akkor muszájak vagyunk végigolvasni a teljes listát, hogy megbizonyosodjunk róla, hogy nem bújt-e meg esetleg az utolsó helyen mégis egy nagyobb érték.

Ez esetben tehát használhatjuk a break-et arra, hogy megállítsuk a ciklust abban az esetben, ha a válaszban már biztosak vagyunk. Ez persze nem szükséges feltétlenül, viszont segíthet abban, hogy a kód "ne dolgozzon feleslegesen", így a programunk gyorsabb és hatékonyabb lesz!

Ternary operátor
Ennek a kódrészletnek az utolsó sorában a ternary operátort használtuk, amiről ide kattintva olvashatsz. Természetesen egy sima if-else szerkezettel is elkészíthetjük ugyanezt.
szamok = [3, 4, 12, 9, 5, 1] van = False for elem in szamok: if elem > 10: van = True break print("Van ilyen szám" if van else "Nincs ilyen szám") [ { "steps": [0], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"} ], "hint": "Letároljuk az adatokat a szamok listában."}, { "steps": [4], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"False"} ], "hint": "A van változó értékét hamisra állítjuk."}, { "steps": [5,1], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"False"}, {"name":"elem","value":"3"} ], "hint": "A for ciklus elkezd végiglépegetni a lista elemein, az elem változóba bekerül az első listaelem."}, { "steps": [6,1], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"False"}, {"name":"elem","value":"3"} ], "hint": "Megvizsgáljuk, hogy az elem változóra (értéke: 3) teljesül-e a feltétel."}, { "steps": [6,1], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"False"}, {"name":"elem","value":"3"} ], "hint": "Mivel 3 nem nagyobb mint 10, az if belseje nem fut le, hiszen a feltétel nem teljesült."}, { "steps": [5,2], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"False"}, {"name":"elem","value":"4"} ], "hint": "A for ciklus lép a következő elemre, az elem változóba bekerül a második listaelem."}, { "steps": [6,2], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"False"}, {"name":"elem","value":"4"} ], "hint": "Megvizsgáljuk, hogy az elem változóra (értéke: 4) teljesül-e a feltétel."}, { "steps": [6,2], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"False"}, {"name":"elem","value":"4"} ], "hint": "Mivel 4 nem nagyobb mint 10, az if belseje nem fut le, hiszen a feltétel nem teljesült."}, { "steps": [5,3], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"False"}, {"name":"elem","value":"12"} ], "hint": "A for ciklus lép a következő elemre, az elem változóba bekerül a harmadik listaelem."}, { "steps": [6,3], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"False"}, {"name":"elem","value":"12"} ], "hint": "Megvizsgáljuk, hogy az elem változóra (értéke: 12) teljesül-e a feltétel."}, { "steps": [7,3], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"True"}, {"name":"elem","value":"12"} ], "hint": "Mivel a feltétel teljesül, a ciklus belseje lefut. A van változót True (igaz) értékre állítjuk."}, { "steps": [8,3], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"True"}, {"name":"elem","value":"12"} ], "hint": "Mivel már találtunk egy elemet ami megfelel a feltételnek, így a break kulcsszóval leállítjuk a ciklust - hisz a többi elemet felesleges megvizsgálni."}, { "steps": [9], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"True"}], "hint": "A ciklus a break utasítás miatt véget ért, következik a kiírás."}, { "steps": [11], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"True"}], "hint": "A ternary operátor megvizsgálja a van változó értékét. Mivel az igaz, így az if előtti rész kerül megjelenítésre a konzolon."}, { "steps": [10], "variables": [{"name":"szamok","value":"[3, 4, 12, 9, 5, 1]"}, {"name":"van","value":"True"}], "hint": "Kiíródik a felirat.","console":"Van ilyen szám"} ]

Ciklusmag megszakítása: a continue kulcsszó

Előfordul azonban olyan eshetőség is, hogy nem szeretnénk az egész ciklust leállítani - egyszerűen csak ugrani szeretnénk a következő iterációra (ha van még), mert rájöttünk, hogy ebben a körben már felesleges tovább dolgoznunk. Példaként nézzünk egy ciklust, amely összeadja az adatok listában található számokat, de kihagy minden olyan elemet, ami nem egész szám adattípusú:

adatok = [3, 8, "alma", 5, 2, "körte", 4]

osszeg = 0
for elem in adatok:
    if type(elem) != int:
        continue
    osszeg += elem

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!

Példa megnyitása