Ternary operátor
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ánlatokAz előző anyagból megtanultuk, hogy miként tudjuk az algoritmusunk egy részének a futtatását feltételekhez kötni, megismerkedtünk az if... else... vezérlési szerkezet működésével. Vannak azonban olyan esetek, amikor ennél rövidebb megoldást is választhatunk hasonló célokra, ez a megoldás az ún. ternary operátor, melyre a Python nyelvben szintén az if és az else kulcsszót használjuk. Nézzünk egy példát ennek az alkalmazására: tegyük fel, hogy szeretnénk készíteni egy olyan függvényt, ami visszaadja egy szám abszolútértékét.
Mint tudjuk, egy szám abszolútértéke az adott szám nullától való távolsága. Most gondoljuk át, hogy miként tudnánk ezt a feladatot megoldani. Ha a számunk értéke 0, vagy pozitív, akkor a szám abszolútértéke önmaga lesz. Ha a számunk negatív, akkor pedig az abszolútértéke önmaga ellentettje lesz. Lényegében tehát a +3 abszolútértéke a +3, míg -5 abszolútértéke a +5. A folyamat tehát:
- Ha a szám kisebb mint 0
- A szám abszolútértéke az ellentettje
- Különben
- A szám abszolútértéke önmaga
Az algoritmus tökéletesen működik. Azonban abban az esetben, ha egy változónak szeretnénk egy feltétel alapján értéket adni, használhatjuk például a ternary operátort. Ez az operátor három kifejezést foglal magában, az alábbi formában:
érték_ha_igaz if feltétel else érték_ha_hamis
Először minden esetben a feltétel kifejezés kerül kiértékelésre, majd a program megnézi ennek a kifejezésnek az értékét. Ha ez az érték IGAZ (vagy egyéb nem nulla érték - erre később még visszatérünk), akkor ezt követően az érték_ha_igaz kifejezést értékeli ki és adja vissza, ha pedig hamis, akkor az érték_ha_hamis kifejezés kerül kiértékelésre és visszaadásra. Ez első körben elég furán hangozhat, nézzük meg, hogy hogy is működik a gyakorlatban, egy példakódon keresztül.
n = int(input("Írj be egy egész számot!"))
print(-n if n < 0 else n )
Ez az egyik leggyakoribb felhasználási területe a ternary operátornak. Mint láthatjuk, tulajdonképpen a funkciója ugyanaz, mint egy sima if... else...-nek, de a szintaxisa rövidebb, ami javítja a kód átláthatóságát. Gyakori felhasználási területe még logikai értékek olvasható szöveggé való átalakítása, például:
print("Az állítás igaz" if allitas else "Sajnos az állítás hamis")
Van azonban néhány dolog, amire a használata során figyelni kell! Ne feledkezzünk meg arról, hogy az operátorok végrehajtási sorrendjéről (precedencia). A legegyszerűbb megoldás az, ha a ternary operátorunkat mindig betesszük egy zárójelbe, így nagy meglepetés igazából nem érhet bennünket.
Ezen felül figyelni érdemes az adattípusokra is. Mivel a Python szigorúan, de dinamikusan típusos nyelv, a változók adattípusa futásidőben megváltoztatható. Az esetleges hibalehetőségek elkerülése érdekében érdemes törekedni arra, hogy a ternary operátor első és utolsó kifejezése azonos adattípusú legyen! Eltérő adattípusok esetén a programot alaposan tesztelni érdemes, hogy semelyik esetben ne fussunk hibára.
A legbiztosabb tehát, ha az operátort zárójelbe tesszük és az érték_ha_igaz és az érték_ha_hamis kifejezés adattípusa megegyezik (tehát pl. mindkettő int, vagy mindkettő szöveg, stb.).
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!
Ha megértettük a ternary operátor működését, íme néhány példafeladat hozzá:
- 1. Feladat: Kérjünk be egy számot a felhasználótól, és írjuk ki, hogy a szám nagyobb-e mint 5. Kiíráskor használjuk az "igen, nagyobb" és a "nem, kisebb" kifejezéseket!
- 2. Feladat: Kérjünk be két számot a felhasználótól, és írjuk ki közülük a nagyobbat.
Olyan feladatokat, amelyekhez ternary operátor és ciklusok egyaránt szükségesek, a ciklusok alatt találhatsz.