A Python két alapvető ismétléses vezérlési szerkezettel rendelkezik:
- `while` ciklus
- `for` ciklus
# A `while` ciklus
A `while` ciklus addig hajt végre egy utasításblokkot, amíg a feltétel **igaz** (`True`).
A `while` ciklus használatához előre el kell készíteni bizonyos változókat. A következő példában egy indexváltozót (`i`), amelynek értékét a `while` ciklus előtt 1-re állítunk.
>[!example] Kiírjuk az `i` értékét, amíg `i` kisebb mint 6:
>```python
>i = 1
>while i < 6:
> print(i)
> i += 1
>
> # Kimenet:
> # 1
> # 2
> # 3
> # 4
> # 5
>```
>[!note] Megjegyzés
>Ne felejtsük el növelni az `i` értékét, különben a ciklus **végtelen ciklussá** válik.
## A `break` utasítás
A `break` utasítással akkor is megszakíthatjuk a `while` ciklust, ha a feltétele még igaz.
>[!example] Kilépünk a ciklusból, amikor `i` értéke 3
>```python
>i = 1
>while i < 6:
> print(i)
> if i == 3:
> break
> i += 1
>
># Kimenet:
># 1
># 2
># 3
>```
## A `continue` utasítás
A `continue` utasítással az aktuális iterációt kihagyjuk, és folytatjuk a következővel.
>[!example] Átugorjuk az iterációt, amikor `i` értéke 3
>```python
>i = 1
>while i < 6:
> i += 1
> if i == 3:
> continue
> print(i)
>
># Kimenet:
># 1
># 2
># 4
># 5
>```
## Az `else` ág a `while` után
Az `else` rész akkor fut le, amikor a `while` feltétele **hamissá válik**, vagyis a ciklus természetes módon befejeződik (nem `break`-kel).
>[!example] Kiírunk egy üzenetet, ha a feltétel már nem igaz
>```python
>i = 1
>while i < 6:
>print(i)
> i += 1
>else:
> print("i már nem kisebb mint 6")
>
># Kimenet:
># 1
># 2
># 3
># 4
># 5
># i már nem kisebb mint 6
>```
# A `for` ciklus
A `for` ciklust akkor használjuk, amikor végig szeretnénk menni egy sorozaton (például listán, tuple-ön, szótáron, halmazon vagy sztringen).
A `for` ciklussal egy utasításblokk a lista, tuple, halmaz stb. minden elemére lefut egyszer.
>[!example] Egy lista minden elemének kiírása
>```python
>gyumolcsok = ["alma", "banán", "meggy"]
>for gyumolcs in gyumolcsok:
> print(gyumolcs)
>
> # Kimenet
> # alma
> # banán
> # meggy
>```
>[!note] Megjegyzés
>A `for` ciklushoz **nem szükséges előre létrehozni egy indexváltozót**.
## Egy sztring bejárása
A sztringek is bejárhatóak – karakterek sorozatát tartalmazzák.
>[!example] A "banán" szó bejárása
>```python
>for betu in "banán":
> print(betu)
>
># Kimenet
># b
># a
># n
># á
># n
>```
## A `break` utasítás
A `break` utasítással megállíthatjuk a ciklust, még mielőtt az végigérne az összes elemen.
>[!example] Lista bejárásának megszakítása a `break` utasítással
>```python
>gyumolcsok = ["alma", "banán", "meggy"]
>for gyumolcs in gyumolcsok:
> print(gyumolcs)
> if gyumolcs == "banán":
> break
>
> # Kimenet
> # alma
> # banán
>```
A `break` utasítás blokkon belüli elhelyezése kritikus jelentőségű, ugyanis jelentősen megváltoztathatja a program működését.
>[!example] A `print` és a `break` utasítások felcserélt sorrendben
>```python
>gyumolcsok = ["alma", "banán", "meggy"]
>for gyumolcs in gyumolcsok:
> if gyumolcs == "banán":
> break
> print(gyumolcs)
>
> # Kimenet
> # alma
>```
## A `continue` utasítás
A `continue` utasítással kihagyjuk az aktuális iterációt, és továbblépünk a következőre.
>[!example] A `continue` utasítás alkalmazása
>```python
>gyumolcsok = ["alma", "banán", "meggy"]
>for gyumolcs in gyumolcsok:
> if gyumolcs == "banán":
> continue
> print(gyumolcs)
>
> # Kimenet
> # alma
> # meggy
>```
## A `range()` függvény
Ha egy kódrészletet **meghatározott számú alkalommal** szeretnénk futtatni, használhatjuk a `range()` függvényt.
A `range()` egy számsorozatot ad vissza, amely:
- alapértelmezés szerint 0-tól indul,
- 1-esével növekszik,
- és egy megadott számnál áll meg (a végérték **nem** része a sorozatnak).
>[!example] A `range` használata
>```python
>for x in range(6):
> print(x)
>
> # Kimenet
> # 0
> # 1
> # 2
> # 3
> # 4
> # 5
>```
>[!example] A `range` használata kezdőértékkel
>```python
>for x in range(2, 6):
> print(x)
>
> # Kimenet
> # 2
> # 3
> # 4
> # 5
>```
>[!example] A `range` használata kezdőértékkel és lépésközzel
>```python
>for x in range(2, 10, 3):
> print(x)
>
> # Kimenet
> # 2
> # 5
> # 8
>```
## `else` ág a `for` ciklusban
A `for` ciklus `else` ága a ciklus **lefutása után egyszer** fut le, ha a ciklust nem szakította meg `break`.
>[!example] `for` ciklus `else` ággal
>```python
>for x in range(6):
> print(x)
>else:
> print("Vége!")
>
># Kimenet
># 0
># 1
># 2
># 3
># 4
># 5
># Vége!
>```
>[!example] `for` ciklus `else` ággal és `break` utasítással
>```python
>for x in range(6):
> if x == 3:
> break
> print(x)
>else:
> print("Vége!")
>
># Kimenet
># 0
># 1
># 2
>```
## Egymásba ágyazott ciklusok
Az egymásba ágyazott ciklus azt jelenti, hogy egy ciklus **cikluson belül** van.
A belső ciklus **minden külső iteráció alatt végigfut**.
>[!example] Egymásba ágyazott ciklusok
>```python
>melleknevek = ["piros", "nagy", "ízletes"]
>gyumolcsok = ["alma", "meggy"]
>
>for jelzo in melleknevek:
> for gyumolcs in gyumolcsok:
> print(f"{jelzo} {gyumolcs}")
>
># Kimenet
># piros alma
># piros meggy
># nagy alma
># nagy meggy
># ízletes alma
># ízletes meggy
>```
## A `pass` utasítás
A `for` ciklus **nem lehet üres**, de ha valamiért nincsenek utasítások benne, a `pass` használatával elkerülhetjük a hibát.
>[!example] `pass` utasítás használata
>```python
>for x in [0, 1, 2]:
> pass
>```
# Feladatok
>[!task] **1. feladat**
> Írj egy `while` ciklust, ami összegzi a felhasználó által megadott 5 egész számot, majd kiírja az összeget!
>[!task] **2. feladat**
> Írj egy `for` ciklust, ami kiszámolja 1-től 100-ig a páros számok összegét!
>[!task] **3. feladat**
>Készíts egy programot, ami egy listában keres egy szót. Ha megtalálja, írja ki az indexét, különben írja ki: „Nincs meg”! (*Tipp:* használd `for` + `else`-t.)
>[!task] **4. feladat**
>Adott egy névlista, készíts egy másik listát, ami csak az „a” betűt tartalmazó neveket tartalmazza!
# Források
- https://www.w3schools.com/python/python_while_loops.asp (utolsó hozzáférés dátuma: 2025. 11. 29.)
- https://www.w3schools.com/python/python_for_loops.asp (utolsó hozzáférés dátuma: 2025. 11. 29.)