Table of Contents
Függvények, modulok
Miért kellenek függvények?
- Probléma: ismétlődő kód, átláthatatlanság.
- Megoldás: a kódot logikai egységekre bontjuk.
- A függvény csak akkor fut le, ha meghívjuk.
def fuggveny_nev():
utasitas
Egyszerű függvény:
def koszones():
print("Szia!")
def uzenet():
print("K")
uzenet()
uzenet()
uzenet()
koszones()
Paraméterek Paraméter: adat, amit a függvény kap. Bármennyi lehet, akár 0 is.
def koszones(nev):
print("Szia", nev)
koszones("Anna")
def osszeg(a, b):
print(a + b)
osszeg(6,7)
Példa: Írj függvényt, ami kiszámolja egy téglalap területét. Add át paraméterként a szélességet és magasságot.
def teglalap_terulet(szelesseg, magassag):
print(szelesseg * magassag)
teglalap_terulet(5, 3)
return (visszatérési érték) A return értéket ad vissza.
def osszeg(a, b):
return a + b
x = osszeg(4, 6)
print(x)
Példa: Írj függvényt, ami visszaadja egy szám négyzetét. Használd az eredményt egy változóban.
def negyzet(szam):
return szam ** 2
eredmeny = negyzet(5)
print("Négyzet:", eredmeny)
Összefoglaló feladatok
1. feladat: Írj függvényt, ami:
- kap egy listát paraméterként
- visszaadja az elemek összegét
def lista_osszeg(lista):
osszeg = 0
for elem in lista:
osszeg += elem
return osszeg
szamok = [1, 2, 3, 4]
print(lista_osszeg(szamok))
2. feladat: Írj programot, ami:
- Bekér 5 számot
- Listába teszi
- Függvénnyel kiszámolja:
- az összegét
- az átlagát
- Kiírja az eredményeket
def osszeg(lista):
s = 0
for elem in lista:
s += elem
return s
def atlag(lista):
return osszeg(lista) / len(lista)
szamok = []
for i in range(5):
szam = float(input("Adj meg egy számot: "))
szamok.append(szam)
print("Összeg:", osszeg(szamok))
print("Átlag:", atlag(szamok))
3. feladat: Írj egy függvényt osszeg névvel, ami egy lista számot kap és visszaadja az összegüket. Próbáld ki a függvényt egy felhasználótól bekért számok listájával.
# Megoldás
def osszeg(szamok):
total = 0
for sz in szamok:
total += sz
return total
# Példa input
be = input("Adj meg számokat szóközzel elválasztva: ")
szamok_lista = [int(x) for x in be.split()]
print("Összeg:", osszeg(szamok_lista))
4. feladat: Írj egy függvényt legnagyobb_szo(szavak) névvel, ami egy szavak listáját kapja és visszaadja a leghosszabb szót.
# Megoldás
def legnagyobb_szo(szavak):
max_szo = ""
for szo in szavak:
if len(szo) > len(max_szo):
max_szo = szo
return max_szo
szavak = ["alma", "korte", "barack", "sargadinnye"]
print("Leghosszabb szó:", legnagyobb_szo(szavak))
5. feladat: Készíts egy függvényt szavak_szamlalo(szoveg), ami visszaad egy dict-et: kulcs a szó, érték a darabszám.
# Megoldás
def szavak_szamlalo(szoveg):
szavak = szoveg.split()
szamolas = {}
for szo in szavak:
szamolas[szo] = szamolas.get(szo, 0) + 1
return szamolas
szoveg = "alma korte alma barack alma"
print(szavak_szamlalo(szoveg))
6. feladat: Írj egy függvényt paros_paratlan(szamok) névvel, ami egy lista számot kap és két listát ad vissza: párosok és páratlanok.
# Megoldás
def paros_paratlan(szamok):
paros = []
paratlan = []
for sz in szamok:
if sz % 2 == 0:
paros.append(sz)
else:
paratlan.append(sz)
return paros, paratlan
szamok = [1,2,3,4,5,6,7,8]
paros, paratlan = paros_paratlan(szamok)
print("Párosok:", paros)
print("Páratlanok:", paratlan)
7.feladat: Írj egy függvényt egyedi_karakterek(szoveg), ami egy stringet kap és visszaad egy set-et, ami az összes egyedi karaktert tartalmazza.
# Megoldás
def egyedi_karakterek(szoveg):
karakterek = set()
for c in szoveg:
karakterek.add(c)
return karakterek
szoveg = "programozas"
print("Egyedi karakterek:", egyedi_karakterek(szoveg))
8. feladat: Képzeld el, hogy egy kis osztályban szeretnénk nyilvántartani a diákok nevét, tantárgyait és jegyeit. - Készíts egy programot, ami:
- Bekéri a diákok nevét és tantárgyait.
- Minden diákhoz több jegyet lehet felvinni listában.
- Függvényekkel:
- Egy függvény számolja ki a diákok átlagát tantárgyanként.
- Egy függvény visszaadja a legjobb jegyet minden diákhoz.
- Egy függvény megmondja, melyik diákoknak van 1-es jegye.
- Külön set segítségével listázd az összes tantárgyat, amit az osztályban tanulnak.
- Külön dict segítségével listázd, hogy hány diák tanul minden tantárgyat.
# Függvények
def atlag_diak(jegyek):
"""Lista jegyek -> átlag"""
if len(jegyek) == 0:
return 0
osszeg = 0
for szam in jegyek:
osszeg += szam
return osszeg / len(jegyek)
def legjobb_jegy(jegyek):
"""Lista jegyek -> legnagyobb érték"""
if len(jegyek) == 0:
return None
max_jegy = jegyek[0]
for szam in jegyek:
if szam > max_jegy:
max_jegy = szam
return max_jegy
def egyes_jegy(jegyek):
"""Ellenőrzi, van-e 1-es jegy"""
for szam in jegyek:
if szam == 1:
return True
return False
# Adatok felvitele
diakok = {}
while True:
nev = input("Add meg a diák nevét (vagy ENTER a befejezéshez): ")
if nev == "":
break
tantargyak = input("Add meg a tantárgyakat szóközzel elválasztva: ").split()
jegyek = []
for tantargy in tantargyak:
be = input(f"Add meg {nev} jegyeit a(z) {tantargy}-ból szóközzel elválasztva: ")
jegyek_tantargy = [int(x) for x in be.split()]
jegyek.append((tantargy, jegyek_tantargy))
diakok[nev] = jegyek
# Összes tantárgy set
osszes_tantargy = set()
for jegyek_lista in diakok.values():
for tantargy, _ in jegyek_lista:
osszes_tantargy.add(tantargy)
print("\nÖsszes tantárgy az osztályban:", osszes_tantargy)
# Tantárgyhoz hány diák
tantargy_darab = {}
for tantargy in osszes_tantargy:
count = 0
for jegyek_lista in diakok.values():
for t, _ in jegyek_lista:
if t == tantargy:
count += 1
break
tantargy_darab[tantargy] = count
print("\nDiákok száma tantárgyanként:", tantargy_darab)
# Diákok átlagai, legjobb jegyek, 1-es jegyek
print("\nDiák statisztikák:")
for nev, jegyek_lista in diakok.items():
print(f"\n{nev}:")
for tantargy, jegyek_tantargy in jegyek_lista:
print(f" {tantargy}: átlag={atlag_diak(jegyek_tantargy):.2f}, legjobb={legjobb_jegy(jegyek_tantargy)}")
if egyes_jegy(jegyek_tantargy):
print(" Figyelem: van 1-es jegy!")
Osztályok
- Osztály (class): Sablon/tervrajz objektumokhoz.
- Objektum (instance): Konkrét példány az osztályból.
- Attribútum: Objektum tulajdonsága (self.nev, self.ev).
- Metódus: Objektumhoz tartozó függvény (def metodus(self): …).
- Konstruktor: init – automatikusan meghívódik objektum létrehozásakor.
- Öröklődés: Egy osztály átveszi más osztály tulajdonságait és metódusait.
- Felülírás: Gyerek osztály felülírja a szülő metódusát.
Egyszerű példa:
class Auto:
def __init__(self, marka, ev):
self.marka = marka
self.ev = ev
def bemutatkozik(self):
print(f"Ez egy {self.marka} típusú autó, {self.ev}-es évjárat.")
auto1 = Auto("Toyota", 2020)
auto1.bemutatkozik()
Öröklés:
class Jarmu:
def __init__(self, marka):
self.marka = marka
def bemutatkozik(self):
print(f"Jármű: {self.marka}")
class Auto(Jarmu):
def __init__(self, marka, ev):
super().__init__(marka)
self.ev = ev
def bemutatkozik(self):
print(f"Autó: {self.marka}, évjárat: {self.ev}")
auto2 = Auto("Audi", 2021)
auto2.bemutatkozik()
1. feladat: Diák osztály
- Attribútumok: nev, eletkor, jegyek (lista)
- Metódusok: jegyet_hozzaad, atlag, legjobb_jegy
class Diak:
def __init__(self, nev, eletkor):
self.nev = nev
self.eletkor = eletkor
self.jegyek = []
def jegyet_hozzaad(self, jegy):
self.jegyek.append(jegy)
def atlag(self):
if len(self.jegyek) == 0:
return 0
return sum(self.jegyek)/len(self.jegyek)
def legjobb_jegy(self):
if len(self.jegyek) == 0:
return None
return max(self.jegyek)
# Példa
diak = Diak("Anna", 16)
diak.jegyet_hozzaad(5)
diak.jegyet_hozzaad(4)
diak.jegyet_hozzaad(3)
print(diak.nev, "átlaga:", diak.atlag())
print(diak.nev, "legjobb jegye:", diak.legjobb_jegy())
2. feladat: Banki számla
- Attribútumok: tulajdonos, egyenleg
- Metódusok: betesz, kivesz, egyenleg_lekerdez
class BankSzamla:
def __init__(self, tulajdonos, egyenleg=0):
self.tulajdonos = tulajdonos
self.egyenleg = egyenleg
def betesz(self, osszeg):
self.egyenleg += osszeg
def kivesz(self, osszeg):
if osszeg <= self.egyenleg:
self.egyenleg -= osszeg
else:
print("Nincs elég pénz!")
def egyenleg_lekerdez(self):
return self.egyenleg
# Példa
szamla = BankSzamla("Bence", 1000)
szamla.betesz(500)
szamla.kivesz(200)
print(szamla.tulajdonos, "egyenlege:", szamla.egyenleg_lekerdez())
3. feladat: Állat öröklődés:
- Szülő osztály: Allat (attribútum: nev)
- Gyerek osztályok: Kutya, Macska (metódus: hangot_ad)
class Allat:
def __init__(self, nev):
self.nev = nev
class Kutya(Allat):
def hangot_ad(self):
print(f"{self.nev} ugat: Vau-vau!")
class Macska(Allat):
def hangot_ad(self):
print(f"{self.nev} nyávog: Miau!")
kutya = Kutya("Bodri")
macska = Macska("Cirmi")
kutya.hangot_ad()
macska.hangot_ad()
4. feladat: Könyv osztály
- Attribútumok: cim, szerzo, oldalszam
- Metódus: bemutatkozik
class Konyv:
def __init__(self, cim, szerzo, oldalszam):
self.cim = cim
self.szerzo = szerzo
self.oldalszam = oldalszam
def bemutatkozik(self):
print(f"{self.cim} ({self.szerzo}), {self.oldalszam} oldal")
konyv = Konyv("Python alapok", "Kovács Péter", 250)
konyv.bemutatkozik()
5. feladat: Jármű osztály + Auto és Motor
- Szülő: Jarmu (típus, ev)
- Gyerek: Auto, Motor
- Metódus: bemutatkozik
class Jarmu:
def __init__(self, tipus, ev):
self.tipus = tipus
self.ev = ev
class Auto(Jarmu):
def bemutatkozik(self):
print(f"Autó: {self.tipus}, évjárat: {self.ev}")
class Motor(Jarmu):
def bemutatkozik(self):
print(f"Motor: {self.tipus}, évjárat: {self.ev}")
auto = Auto("BMW", 2022)
motor = Motor("Yamaha", 2021)
auto.bemutatkozik()
motor.bemutatkozik()
