Elágazás avagy feltétel vizsgálat. Matematika óráról ismerős lesz, feltételeket fogunk vizsgálni. Ezek lehetnek igazak, vagy hamisak. A feltétleknél a jól ismert relációs jeleket használjuk.
egyenló: a == b
nem egyenlő: a != b
kisebb mint… : a < b kisebb egyenlő: a <= b nagyobb: a > b nagyobb vagy egyenló: a >= b
Nézzünk pár nagyon egyszerű példát! Arra figyelj, hogy az utasításnak beljebb kell lennie, mint a feltételnek, és a feltétel végére kell a kettőspont! Vegyünk két számot, nézzük mi a helyzet, ha b>=a-nál?
a = 5
b = 10
if b >= a:
print("b nagyobb, egyenlő mint a")
Ez eddig egyszerű, de mi van akkor, ha a nagyobb? Szükség lesz egy else ágra is!
a = 11
b = 10
if b >= a:
print("b nagyobb, vagy egyenlő mint a")
elif a > b:
print("a nagyobb, mint b")
Ha több, mint két elágazásunk van, akkor össze kell fűzni őket.
a = 10
b = 20
if b > a:
print("b nagyobb, mint a")
elif a == b:
print("a és b egyenlő")
else:
print("a nagyobb, mint b")
A Pythonban van lehetőség a kódok rövidítésére is.
a = 5
b = 10
if a > b:
print("a nagyobb, mint b")
#ez röviden:
if a > b: print("a nagyobb, mint b")
#----if else---------------------
if b >= a:
print("b nagyobb, vagy egyenlő mint a")
elif a > b:
print("a nagyobb, mint b")
#röviden
print("a nagyobb mint b") if a > b else print("b nagyobb mint a")
#-----if elif else-----------------
print("a nagyobb") if a > b else print("a és b egyenlő") if a == b else print("b nagyobb, mint a")
Nézzünk egy példát! Kérj be egy számot, és vizsgáld meg oszható-e kettővel, hárommal! Ha mindkettővel osztható, akkor osztható hattal! Vizsgáld meg a lehetséges eseteket (csak kettővel, csak hárommal osztható) Az oszthatóságot a maradékos osztással vizsgáljuk, ha a maradék 0 akkor osztható.
x = int(input("Írd be a számot!"))
if x % 2 == 0:
if x % 3 == 0:
print("A szám osztható 6-tal.")
else:
print("A szám osztható 2-vel, de 3-mal nem.")
else:
if x % 3 != 0:
print("A szám nem osztható sem 2-vel, sem 3-mal.")
else:
print("A szám nem osztható 2-vel, de 3-mal igen.")
Több feltétel esetén használhatjuk az ÉS illetve a VAGY operátort. Ezen kívűl a negációt(tagadást is)
Logikai kifejezések kiértékelési sorrendje (short-circuiting): a Python balról jobbra értékeli ki a logikai kifejezéseket, és ha az első rész már eldönti az eredményt, a másodikat nem vizsgálja.
a = 10
b = 20
c = 30
if a > b and c > a:
print("Mindkét feltétel igaz!")
if a > b or a > c:
print("Legalább az egyik feltétel igaz!")
Beágyazott elágazások:
|
1 2 3 |
if a > 0: if a % 2 == 0: print("Pozitív páros szám") |
Hibakezelés alapok
|
1 2 3 4 5 |
try: szam = int(input("Adj meg egy számot: ")) print("A szám kétszerese:", szam * 2) except ValueError: print("Ez nem szám!") |
match-case szerkezet A match-case szerkezet a Python 3.10-től érhető el, és a klasszikus switch-case szerkezethez hasonló
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# általános felépítése command = input("Parancs: ") match command: case "start": print("Indítás") case "stop": print("Leállítás") case _: print("Ismeretlen parancs") # Példa parancs = input("Add meg a parancsot (start / stop / help): ") match parancs: case "start": print("A program elindult.") case "stop": print("A program leállt.") case "help": print("Elérhető parancsok: start, stop, help") case _: print("Ismeretlen parancs.") # Példa: napok nap = input("Melyik nap van ma? ").lower() match nap: case "hétfő" | "kedd" | "szerda" | "csütörtök" | "péntek": print("Ez egy munkanap.") case "szombat" | "vasárnap": print("Ez egy hétvége.") case _: print("Nem érvényes nap.") |
Példák
Példa 1: Készíts egy programot, amely dollár és forint között vált át valutát! Árfolyam legyen? 1usd = 400huf, de be is kérhetjük a felhasználótól.
arfolyam = 400
penznem = input("Milyen valuta? f/u? ")
mennyiseg = int(input("Mennyiség? "))
if penznem == "f":
eredmeny = mennyiseg / arfolyam
print(mennyiseg," Ft= ",eredmeny," $")
if penznem == "u":
eredmeny = mennyiseg * arfolyam
print(mennyiseg," $= ",eredmeny," Ft")
Példa 2: Számold ki egy háromszög területét Heron képlettel! A bekért vagy véletlenszerű adaokat ellenőrizd, hogy szerkeszthető-e belőlük háromszög! A példában véletlen számokat használtam, iletve a Heron képletben van gyökvonás. A Python sok beépített függvényt tartalmaz, melyek használatához importálni kell az adott osztályt. A matematikai függvényekhez importáljuk a math osztályt, a véletlen számokhoz a random osztályt. (import math, random) Random számokat a random függvénnyyel állítunk elő. A random.randint(1, 6) 1 és 6 közötti számokat fog generálni. A gyökvonás a math.sqrt(szám)
import math, random
#float(input("a oldal: ")) float(input("b oldal: ")) float(input("c oldal: "))
a = random.randint(1, 6)
b = random.randint(1, 6)
c = random.randint(1, 6)
print("a=",a,"b=",b,"c=",c)
if a>0 and b>0 and c>0 and (a+b>c) and (a+c>b) and (b+c>a):
s = (a+b+c)/2
t = math.sqrt(s*(s-a)*(s-b)*(s-c))
print("A háromszög területe: ",t)
else:
print("A megadott adatokból nem szerkeszthető háromszög!")
Példa 3: Egészítsük ki a téglalapos programunkat feltétel vizsgálattal! Döntsük el, hogy a bekért adatok alapján négyzet, vagy téglalap! Vizsgáljuk meg, hogy a bekért adatok számok-e! A bekért adatokat az isdigit() függvénnyel tudjuk megvizsgálni, ha számok akkor a függvény igaz értéket ad vissza.
Megnézzük hibakezeléssel is a példát.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
a = int(input("Kérem az a oldalt! ")) b = int(input("Kérem a b oldalt! ")) if (str(a).isdigit() == True and str(b).isdigit() == True): t = a * b k = 2 * ( a + b ) print("Kerület: ",k,"Terület: ",t) else: print ("Hibás adat!") if (a == b): print ("Ez egy négyzet! ") else: print ("Téglalap ") |
Hibakezeléssel így lehetne kiegészíteni: (ebben az esetben nem kell az if-es rész)
|
1 2 3 4 5 |
try: a = int(input("Kérem az a oldalt! ")) b = int(input("Kérem a b oldalt! ")) except ValueError: print("Hibás adat!") |
Példa 4. Döntsük el egy évszámról, hogy szökőév-e? Egy év szökőév ha: minden 4.év kivéve a 100-as kerek éveket és a 400-zal oszthatóakat!
év = int(input('Kérek egy évszámot! '))
if év % 4 == 0 and év % 100 != 0 or év % 400 == 0:
szokoev = True
else:
szokoev = False
print(év, 'szökőév.') if szokoev else print(év, 'nem szökőév.')
Példa 5: Melyik hónap melyik évszakhoz tartozik? Hagyományos if-else szerkezetes megoldás
hónap = int(input('Add meg a hónap sorszámát! (1-12) '))
évszak = ''
if 3 <= hónap <= 5:
évszak ='tavasz'
elif 6 <= hónap <= 8:
évszak ='nyár'
elif 9 <= hónap <= 11:
évszak ='ősz'
elif 1 <= hónap <= 2 or hónap == 12:
évszak ='tél'
else:
évszak ='nincs ilyen hónap'
print(hónap, '. hónap: ', évszak, sep='')
match-case megoldás
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#Évszak Meghatározó Program # Adatbekérés és típuskonverzió try: # Bekérjük a hónap sorszámát és azonnal egész számmá konvertáljuk. honap = int(input("Kérlek, add meg a hónap sorszámát (1-12): ")) except ValueError: # Hibakezelés, ha a felhasználó nem számot ír be print("Hiba: Érvénytelen bemenet. Kérlek, egész számot adj meg!") # Megszakítjuk a programot, vagy beállítunk egy hibás értéket a 'case _' ághoz honap = 0 # --- Évszak meghatározása a match szerkezettel --- evszak = "" # Inicializálás match honap: # Tavasz case 3 | 4 | 5: evszak = "tavasz" # Nyár case 6 | 7 | 8: evszak = "nyár" # Ősz case 9 | 10 | 11: evszak = "ősz" # Tél case 12 | 1 | 2: evszak = "tél" # Alapértelmezett eset (pl. 0 vagy 13) case _: evszak = "ismeretlen" # --- Eredmény kiírása --- print("---") if evszak == "ismeretlen": print(f"A megadott '{honap}' sorszám nem érvényes hónapot jelöl (1-12).") else: print(f"A(z) **{honap}.** hónap a(z) **{evszak}** évszakhoz tartozik.") |
Példa 6: Kérd be egy dolgozat maximális pontszámát, számold ki a ponthatárokat a középszintű érettségi szerint! Hanyast kap az elért pontszámra a diák?
max_pont = int(input('Maximális pontszámot? '))
elert_pont = int(input('Elért pont? '))
if elert_pont >= max_pont * 0.80:
print('A dolgozat jeles.')
elif elert_pont >= max_pont * 0.6:
print('A dolgozat jó.')
elif elert_pont >= max_pont * 0.4:
print('A dolgozat közepes.')
elif elert_pont >= max_pont * 0.22:
print('A dolgozat elégséges.')
else:
print('A dolgozat elégtelen.')
Példa 7. Jegyekhez szöveges értékelés
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
jegy = int(input("Add meg az érdemjegyet (1-5): ")) if jegy == 5: print("Jeles") elif jegy == 4: print("Jó") elif jegy == 3: print("Közepes") elif jegy == 2: print("Elégséges") elif jegy == 1: print("Elégtelen") else: print("Érvénytelen jegy") |
Példa 8. Többszintű döntési szerkezet
Külső IF, az első szintű döntés: Ellenőrzi a legalapvetőbb feltételt (a pontszám érvényes tartományban van-e). Ha ez hamis, minden belső döntés figyelmen kívül marad.
Első Belső IF/ELIF: Ha az első feltétel igaz, a program tovább halad, és ellenőrzi a pontszám kategóriáját (>= 90 vagy >= 70).
Második Belső IF: Csak akkor kerül sor erre a döntésre, ha a pontszám eléri a 90-et. Ez a döntés függ az aktivitas változó értékétől, és ez alapján kerül hozzárendelésre a végső bónusz.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# 1. Adatbekérés try: pontszam = int(input("Kérlek, add meg a vizsgapontszámot (0-100): ")) aktivitas = input("Volt diákaktivitás (I/N)? ").strip().lower() except ValueError: print("Hiba: A pontszámnak egész számnak kell lennie.") exit() # Kilépés, ha a pontszám érvénytelen # 2. Első szintű döntés: Érvényes-e a pontszám? if 0 <= pontszam <= 100: print("\n--- Értékelés ---") # 3. Második szintű döntés (Beágyazott IF): Elég magas-e a pontszám a bónuszhoz? if pontszam >= 90: alap_eredmeny = "Kiváló teljesítmény." # 4. Harmadik szintű döntés (Beágyazott IF): Jár-e a bónusz? if aktivitas == 'i': vegleges_eredmeny = alap_eredmeny + " **+10 bónuszpont** jár Diákaktivitásért!" else: vegleges_eredmeny = alap_eredmeny + " Bónuszpont nem jár (nincs aktivitás)." # Második szintű döntés folytatása: Közepes/Elégséges pontszám elif pontszam >= 70: vegleges_eredmeny = "Jó teljesítmény. Nincs bónuszpont." else: # Pontszám 70 alatt vegleges_eredmeny = "Elégséges/gyenge teljesítmény. Nincs bónuszpont." # 5. Eredmény kiírása print(f"Vizsgapontszám: {pontszam}") print(f"Eredmény: {vegleges_eredmeny}") else: # Első szintű döntés: A pontszám érvénytelen tartományban van print("Hiba: A pontszám nem lehet 0 és 100 között.") |
Frissítve: 2025.11.09.
