Egyszerű elágazás: if... else...
Korábban már tapasztalhattuk, hogy a programok alapvetően soros végrehajtásúak. Ez azt jelenti, hogy a kód utasítása fentről lefelé, mindig azonos sorrendben hajtódnak végre. Vannak azonban olyan esetek, amikor ennél több kontrollra van szükségünk - ekkor kerülnek elő az ún. vezérlési szerkezetek, amik olyan speciális kulcsszavak, amik a kód futásának "irányát", útvonalát befolyásolják.
Ha úgy érzed, hogy elakadtál, és több segítségre van szükséged, keress bizalommal! Kedvező árú magánórák keretében szívesen segítek elsajátítani a programozás alapjait.
Magánóra ajánlatokA legegyszerűbb vezérlési szerkezet az if, amely segítségével egy kódrészlet futtatása egy feltételhez köthető. Gondoljunk például egy való életbeli helyzetre, szeretnénk elindulni az iskolába. Ha egy esős napot veszünk alapul, akkor ehhez ezeket a lépéseket fogjuk végrehajtani:
- Felkelek
- Megreggelizek
- Elteszem a táskámba a laptopomat
- Előveszem az esernyőmet.
- Kinyitom az esernyőmet.
- Elindulok az iskolába.
Ez a lépéssorozat tökéletes, azokra az esetekre, amikor esik az eső. De mi a helyzet akkor, amikor ragyogóan süt a nap, és nyoma sincs a csapadéknak? Noss, ekkor sem elővenni, sem kinyitni nem szükséges az esernyőnket. Ezeket az utasításokat tehát csak akkor szükséges végrehajtani, ha egy feltétel teljesül. Nézzük tehát az új, pontosabb lépéssorozatot:
- Felkelek
- Megreggelizek
- Elteszem a táskámba a laptopomat
- Ha az eső esik...
- Előveszem az esernyőmet.
- Kinyitom az esernyőmet.
- Elindulok az iskolába.
Ennek a megvalósítására ad lehetőséget a Python nyelvben az if vezérlési szerkezet. Az if-nek megadhatunk egy logikai feltételt, amelyet a program megvizsgál. Ha a feltétel teljesül, akkor le fog futni az if belsejében található kódrészlet, ha pedig nem, akkor átugorja, és folytatódik a futtatás lentebb. Nézzünk egy példát:
print("Szia!")
if 20 > 18:
print("20 nagyobb 18-nál")
print("Viszlát!")
[
{ "steps": [0], "variables": [ ], "hint": "A program kiírja a ''Szia!'' üzenetet a konzolra."},
{ "steps": [1], "variables": [ ], "hint": "A program ellenőrzi, hogy igaz-e a ''20 > 18'' kifejezés. Mivel ez a kifejezés igaz, ezért lefut az if-ben található kódrészlet."},
{ "steps": [2], "variables": [ ], "hint": "A program kiírja a ''20 nagyobb 18-nál'' szöveget a konzolra."},
{ "steps": [3], "variables": [ ], "hint": "A program kiírja a ''Viszlát!'' szöveget a konzolra. A programnak vége."}
]
Mint láthattuk, jelenleg a feltétel igaz, így a kódrészlet lefut. Az if belsejében persze egynél több kódsor is elhelyezhető - azt, hogy melyik kódrészlet van az if-en belül, és melyik már az után, a Python nyelvben a behúzás mértéke határozza meg (azaz a sor elején található szóközök, vagy tabulátorok száma). Ahogy a mintán látható, az if-ben elhelyezett utasítás jobbrább kezdődik, néhány szóközzel bentebb lett tolva. Ez biztosítja azt, hogy ez a kódsor az if belsejében legyen.
A dolog most már egész jól működik, noha lehetne mégjobb. Térjünk vissza a reggeli elindulás kérdéséhez. Elvégre, csak nem ártana eltenni azt az ernyőt akkor sem, ha jelenleg épp süt a nap - hiszen ki tudja, mit hoz még a délután. Nézzük:
- Felkelek
- Megreggelizek
- Elteszem a táskámba a laptopomat
- Ha az eső esik...
- Előveszem az esernyőmet.
- Kinyitom az esernyőmet.
- Ellenkező esetben...
- Elteszem az esernyőt a táskámba.
- Elindulok az iskolába.
Ez természetesen több if egymás után történő elhelyezésével is könnyedén megoldható volna. Van azonban egy kényelmesebb megoldás: az else kulcsszó. Ez egyedül nem használható, csak az if-fel együtt, és tudlajdonképpen az előtte található if tagadását jelenti, azaz kódrészletet adhatunk meg arra az esetre, ha a feltétel esetleg mégsem teljesül.
i = 1
if i > 1:
print("igen")
else:
print("nem")
i = 2
if i > 1:
print("igen")
else:
print("nem")
print("Vége!")
[
{ "steps": [0], "variables": [{"name":"i","value":"1"}], "hint": "Létrehozunk egy i nevű változót, és az 1 értéket adjuk neki. (a változó értékét efölött a doboz fölött követheted)"},
{ "steps": [1], "variables": [{"name":"i","value":"1"}], "hint": "Elérkeztünk az első if-hez. Az if megvizsgálja a feltételt. i értéke jelenleg 1, és 1 nem nagyobb mint 1, tehát a feltétel nem teljesül. Van azonban else ág, úgyhogy a program erre ugrik."},
{ "steps": [2], "variables": [{"name":"i","value":"1"}], "hint": "A feltétel nem teljesült, belépünk az else ágba."},
{ "steps": [3], "variables": [{"name":"i","value":"1"}], "hint": "A konzolra a ''nem'' üzenet kerül kiírásra."},
{ "steps": [4], "variables": [{"name":"i","value":"2"}], "hint": "Az else ágnak vége, folytatódik a program. Az i értékét 2-re állítjuk."},
{ "steps": [5], "variables": [{"name":"i","value":"2"}], "hint": "Ismét elérkeztünk egy elágazáshoz, megvizsgáljuk a feltételt. Az i értéke 2, 2 pedig több mint 1, tehát a feltétel teljesül, így most az if ág fut le."},
{ "steps": [6], "variables": [{"name":"i","value":"2"}], "hint": "A program az ''igen'' szót írja ki a konzolra."},
{ "steps": [7], "variables": [{"name":"i","value":"2"}], "hint": "Az if ágnak vége, így a program futása folytatódik az if... else... alatt. A program kiírja a konzolra hogy ''Vége!''. A programnak vége."}
]
Az else utasítás jellegéből adódóan, ha van egy összetartozó if és else utasításunk, a kettő közül minden esetben biztosan csak az egyik tartalma fog lefutni.
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!
Több irányú elágazás
Hamarosan!
Gyakorló feladatok
Az if... else... természetesen sok más, ennél komplexebb célra is használható, ha megértettük az alapvető működését. Íme néhány példafeladat, amiket megoldhatunk az if... else... vezérlési szerkezetek használatával:
1. Feladat: Kérjünk be három egész számot a felhasználótól, majd döntsük el, hogy ezek lehetnek-e egy háromszög oldalai.
2. Feladat: Kérjünk be három egész számot a felhasználótól, majd döntsük el, hogy ezek egy derékszögű háromszög oldalai-e vagy sem. (feltételezzük, hogy a felhasználó minden esetben az átfogót írja be utolsóként)
3. Feladat: Kérjünk be a felhasználótól két egész számot, majd írjuk ki a konzolra, hogy melyik szám a nagyobb, és mennyivel.
4. Feladat: Kérjünk be a felhasználótól egy jelszót, majd ellenőrizzük le, hogy a beírt jelszó megegyezik-e a "jelszo" szóval. Ha igen, írjuk ki hogy a jelszó helyes, ha nem, akkor írjuk ki, hogy a jelszó helytelen.
5. Feladat: Kérj be egy fagylalt ízt (szövegként) a felhasználótól! Ha a beírt íz citrom, vagy csoki, vagy eper, akkor a program írja ki hogy "Kapható", különben pedig hogy "Nem kapható"
6. Feladat: Kérj be egy 1 és 5 közötti számot a felhasználótól, majd ellenőrizd le, hogy a bekért szám valóban 1 és 5 között van-e. (feltételezheted, hogy a felhasználó tényleg számot írt be)
7. Feladat: Kérd be a felhasználótól egy téglalap két oldalát, majd a téglalap területét. Ellenőrizd le, hogy a felhasználó helyesen számolta-e ki a területet, és ennek megfelelően írd ki a "helyes" vagy a "helytelen" szót.
8. Feladat: Kérj be egy számot a felhasználótól, és add meg a szám abszolútértékét!
Olyan feladatokat, amelyekhez if...else... és ciklusok egyaránt szükségesek, a ciklusok alatt találhatsz.