Python
Egymásba ágyazott ciklusok
Az egymásba ágyazott ciklusok akkor kerülnek elő, amikor egy programnak nem egyetlen elemet kell kezelnie, hanem egy egész rendszert, amely sorokból és oszlopokból, ismétlődő mintákból vagy több szinten szerveződő adatokból áll.
Ilyenkor már nem elég egy sima ciklus, mert nemcsak azt kell megadni, hogy hányszor ismétlődjön valami, hanem azt is, hogy egy ismétlésen belül mi történjen újra és újra. .
Ezért használjuk az egymásba ágyazott ciklusok megoldást például táblázatok, játéktáblák, szöveges alakzatok, képrácsok vagy akár adatpárok összehasonlításának feldolgozására.
Pythonban az egymásba ágyazott ciklusok különösen hasznosak, amikor kétdimenziós gondolkodásra van szükség. Ha például egy sakktáblát, egy szorzótáblát, egy pixelekből álló mintát vagy több sorból felépülő alakzatot szeretnénk kirajzolni, akkor a programnak egyszerre kell figyelnie a sorokra és az oszlopokra. Ugyanez igaz akkor is, amikor listák elemeit hasonlítjuk össze egymással, vagy egy nagyobb adathalmaz minden elemét minden másik elemmel összevetjük. Az egymásba ágyazott ciklusok tehát nemcsak iskolai mintarajzolós feladatokhoz kellenek, hanem minden olyan helyzethez, ahol a program egy rácsban, táblázatban vagy többszintű ismétlődésben gondolkodik.
Mit jelent az, hogy egymásba ágyazott ciklusok?
6Az egymásba ágyazott ciklusok azt jelentik, hogy egy cikluson belül van még egy másik ciklus. Ez akkor kell, amikor nem csak egyetlen sort akarunk kiírni, hanem több sort, és minden sorban több elemet is meg szeretnénk jeleníteni.
A legegyszerűbb példa az, amikor egy sorban több azonos jelet írunk ki.
Egy sor kirajzolása
Ha egyetlen sorban szeretnénk 6 darab X-et megjeleníteni, akkor elég egy ciklus, ami 6-szor lefut.
Itt a program egymás mellé írja ki a karaktereket. Az end=” ” azért kell, mert a print() alapból új sort kezdene (a print(„X”) valójában ennek a rövidítése: print(„X”, end=”\n”). Az end azt mondja meg, hogy a print() a kiírás végére mit tegyen. Ha ezt írod: print(„X”, end=” „) akkor azt mondod, hogy a végére egy szóközt tegyen.
Több sor kirajzolása
Ha már nem egyetlen sort, hanem egy teljes téglalapot szeretnénk kirajzolni, akkor jönnek a képbe az egymásba ágyazott ciklusok. A külső ciklus kezeli a sorokat, a belső ciklus pedig minden sorban kírja a 6 karaktert:
- A külső ciklus eldönti, hogy hány sor legyen.
- A belső ciklus minden sorban végigmegy az oszlopokon
- A print() üresen új sort kezd
Vagyis 6 karakter, soremelés, újra 6 karakter és ez ismétlődik 4 soron keresztül.
Növekvő alakzat rajzolása
Az egymásba ágyazott ciklusok nemcsak a téglalapokhoz jók, hanem alakzatokhoz is. Például készíthetünk vele egy lépcsőzetesen növekvő mintát.
Itt minden új sorban eggyel több karakter jelenik meg. Az első sorban 1, a másodikban 2, a harmadikban 3, a negyedikben 4.
Feladatok
Ablakkeret
Készíts egy programot, amely egymásba ágyazott ciklusok segítségével kirajzol egy 5×5-ös mezőt az oldalt látható minta szerint.
Megoldás
Magyarázat:
- sor = 1
- while sor <= 5:
Ez a külső ciklus, a sorokat kezeli. Ez azt jelenti, hogy a program 5 soron megy végig. Tehát:
- 1. sor
- 2. sor
- 3. sor
- 4. sor
- 5. sor
Minden sor elején újraindítjuk az oszlopokat.
- oszlop = 1
Ez nagyon fontos. 5 oszlopunk lesz. A belső ciklus az oszlopokat kezeli:
- while oszlop <= 5:
ez azt jelenti, hogy az adott soron belül a program végigmegy az 5 helyen. Tehát minden sorban megnézi:
- mi legyen az első helyen
- mi legyen a második helyen
- mi legyen a harmadik helyen
- mi legyen a negyedik helyen
- mi legyen az ötödik helyen
Ez a belső ciklus.
Mikor írunk ki x-et?
- if sor == 1 or sor == 5 or oszlop == 1 or oszlop == 5:
- print(„x”, end=” „)
- else: print(” „, end=” „)
Tehát akkor kell x, ha az adott hely a kereten van. A keret pedig ez:
- legfelső sor -> sor == 1
- legalsó sor -> sor == 5
- legelső oszlop -> oszlop == 1
- legutolsó oszlop -> oszlop == 5
Ha ezek közül bármelyik igaz, akkor kereten vagyunk és kell az x. Ha egyik sem igaz, akkor kell a szóköz.
Miért kell a belső ciklus végén a print()? -> itt váltunk sort. Ez a print üresen csak egy új sort kezd.
Miért kell az oszlop +=1 és a sor +=1? -> belső ciklusban ezzel lépünk a következő oszlopra, külső ciklus végén ezzel lépünk a következő sorra.
Átlós minta
Készíts egy programot, amely egymásba ágyazott ciklusok segítségével kirajzol egy 7×7-es mezőben az oldalt látható alakzatot.
Megoldás
Magyarázat
Az X két átlóból áll. Az egyik átló bal felülről megy jobb alulra, ott mindig igaz, hogy sor == oszlop, azaz x van az (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7)-es helyeken.
A másik átló, ami jobb felülről megy bal alulra, ott mindig igaz, hogy sor + oszlop == 8
Miért 8?
Mert (1, 7), (2, 6), (3, 5), (4, 4) stb. mindig 8. Ezekre a helyekre is x kell.
Ha az x-ek megvannak, minden más helyre szóköz kerül.
Gyakorlás
1. Téglalap csillagokból
Készíts egy programot, amely egymásba ágyazott ciklusok segítségével kirajzol egy 4 sor magas és 6 oszlop széles téglalapot * karakterből.
Megoldás
2. Fordított lépcső
Készíts egy programot, amely egymásba ágyazott ciklusok segítségével kirajzol egy 4 soros mintát, ahol az első sorban 5 karakter van, a másodikban 4, a harmadikban 3 és így tovább.
Megoldás
3. Sakktábla minta
Készíts egy programot, amely egymásba ágyazott ciklusok segítségével kirajzol egy 6×6-os mezőben felváltva ír ki X és O karaktereket, sakktáblaszerű elrendezésben
Megoldás
4. Pluszjel
Készíts egy programot, amely egymásba ágyazott ciklusok segítségével egy 5×5-ös mezőben pluszjelet rajzol ki. A középső sor legyen kitöltve, minden más helyen szóköz jelenjen meg.
Megoldás
5. Piramis alap
Készíts egy programot, amely egymásba ágyazott ciklusok segítségével egy középre rendezett, 4 soros piramis alapváltozatát rajzolja ki O karakterből.
Megoldás
Ha a ciklusok működését a hivatalos leírás alapján is szeretnéd megnézni, olvasd el a Python vezérlési szerkezetekről szóló tutorialját.


