Kihagyás

Szerkesztés alatt!

Az oldal további része szerkesztés alatt áll, a tartalma minden további értesítés nélkül többször, gyakran, jelentősen megváltozhat!

Gyakorlás

Tartalom

Gyakorló feladatok a félév teljes anyagából.

A gyakorlat anyaga

Ezen a gyakorlaton nincs új tananyag, cserében gyakorló feladatokkal mélyítheted eddig megszerzett tudásod. A gyakorlatvezetők a gyakorlat teljes ideje alatt rendelkezésre állnak és válaszolnak a feladatokkal kapcsolatos kérdéseidre.

Feladatok

Adattípusok használata

1. feladat

Hozz létre egy függvényt szamjegyek() néven, melynek egy paramétere van, ami egy szám (lehet tizedestört alakban is.)

Írd ki, hogy hány féle számjegy van a számban!

Példamegoldás
1
2
3
4
def szamjegyek(szam):
    halmaz = set(str(szam)) # Stringgé alakítjuk, és ebben az esetben a karaktereket  teszi bele a tömbbe
    halmaz.discard(".") # A tizedespontot kiszedjük, mert az nem számjegy
    print(len(halmaz))
2. feladat

Hozz létre egy függvényt hianyzo_szamjegyek() néven, melynek egy paramétere van, ami egy szám (lehet tizedestört alakban is.)

Írd ki, hogy mely számjegyek nem szerepelnek a számban! Egy sorban egy számjegy szerepeljen!

Tipp: szamjegyek = set('0123456789')

Példamegoldás
1
2
3
4
5
6
def hianyzo_szamjegyek(szam):
    szamjegyek = set('0123456789')
    halmaz = set(str(szam)) # Stringgé alakítjuk, és ebben az esetben a karaktereket  teszi bele a tömbbe
    kulonbseg = szamjegyek.difference(halmaz)
    for k in kulonbseg:
        print(k)
3. feladat - Egyedi szavak szövegben

Írj egy függvényt egyedi_szavak() néven, amely egy szöveget kap paraméterként, és visszaadja, hány különböző szó van benne. A kis- és nagybetűket ne különböztesse meg, és ha egy szóban nem betű karakterek szerepelnek (kötőjel, szám, írásjel, stb.), azokat egyszerűen hagyja ki a szóból. (Az "1kutya?", "ku-tya,", "kut#ya." például mind egyenértékű a "kutya" szóval.)

Példa:

1
2
3
szoveg = "A kutya ugat. A macska nyávog. A kutya futkos."
print(egyedi_szavak(szoveg))
# 6

Tipp: Használd a lower() és a split() függvényeket!

Példamegoldás
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def egyedi_szavak(szoveg):
    szoveg = szoveg.lower()
    szavak = szoveg.split()
    # Az írásjelek eltávolítása
    tiszta_szavak = set()
    for szo in szavak:
        tiszta_szo = "".join(karakter for karakter in szo if karakter.isalpha())
        for karakter in szo:
            if karakter.isalpha():
                tiszta_szo += karakter
        tiszta_szavak.add(tiszta_szo)
    return len(tiszta_szavak)
Példamegoldás
1
2
3
4
5
6
def egyedi_szavak(szoveg):
    szoveg = szoveg.lower()
    szavak = szoveg.split()
    # Az írásjelek eltávolítása
    tiszta_szavak = {"".join(karakter for karakter in szo if karakter.isalpha()) for szo in szavak}
    return len(tiszta_szavak)
4. feladat - Szótár készítése listából

Írj egy függvényt lista_szotarra() néven, amely két egyforma hosszúságú listát vár paraméterként, és visszaad egy szótárt, ahol az első lista elemei sorrendben a kulcsok, a második lista elemei pedig sorrendben az értékek.

Példa:

1
2
3
4
nevek = ["Anna", "Béla", "Csaba"]
pontszamok = [85, 92, 78]
print(lista_szotarra(nevek, pontszamok))
# {'Anna': 85, 'Béla': 92, 'Csaba': 78}

Példamegoldás
1
2
3
4
5
def lista_szotarra(nevek, pontszamok):
    szotar = {}
    for i in range(len(nevek)):
        szotár[nevek[i]] = pontszamok[i]
    return szotar
5. feladat - Leggyakoribb elem

Írj egy függvényt leggyakoribb() néven, amely egy listát vár paraméterként, és visszaadja a leggyakrabban előforduló elemet. Ha többnek is ugyanannyi az előfordulása, az egyiket adja vissza.

Példa:

1
2
3
lista = ["alma", "körte", "alma", "banán", "alma", "körte"]
print(leggyakoribb(lista))
# alma

Példamegoldás
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def leggyakoribb(lista):
    gyakorisag = {}
    for elem in lista:
        if elem in gyakorisag:
            gyakorisag[elem] += 1
        else:
            gyakorisag[elem] = 1

    max_elem = None
    max_darab = 0
    for elem, darab in gyakorisag.items():
        if darab > max_darab:
            max_darab = darab
            max_elem = elem
    return max_elem
6. feladat - Átlagok számítása szótárból

Írj egy függvényt atlag_szamitas() néven, amely egy szótárt vár, ahol a kulcsok a diákok nevei, az értékek pedig jegyek listái. A függvény adjon vissza egy új szótárt, ahol minden diákhoz az átlaga tartozik!

Példa:

1
2
3
4
5
6
7
jegyek = {
    "Anna": [5, 4, 5, 3],
    "Béla": [4, 4, 3, 5],
    "Csaba": [5, 5, 5, 4]
}
print(atlag_szamitas(jegyek))
# {'Anna': 4.25, 'Béla': 4.0, 'Csaba': 4.75}

Példamegoldás
1
2
3
4
5
6
def atlag_szamitas(jegyek):
    atlagok = {}
    for nev, jegyek_lista in jegyek.items():
        atlag = sum(jegyek_lista) / len(jegyek_lista)
        atlagok[nev] = atlag
    return atlagok

Rekurzió

7. feladat - Rekurzív hatvány

Írj egy rekurzív függvényt hatvany(alap, kitevo) néven, amely kiszámolja az alap kitevo-edik hatványát!

Példa:

1
2
print(hatvany(2, 3))  # 8
print(hatvany(5, 2))  # 25

Példamegoldás

Alapeset: ha a kitevő 0, az eredmény 1. Rekurzív eset: alap * hatvany(alap, kitevo - 1)

1
2
3
4
def hatvany(alap, kitevo):
    if kitevo == 0:
        return 1
    return alap * hatvany(alap, kitevo - 1)

8. feladat - Számjegyek összege rekurzióval

Írj egy rekurzív függvényt szamjegyek_osszege(n) néven, amely visszaadja egy pozitív egész szám számjegyeinek összegét!

Példa:

1
2
print(szamjegyek_osszege(1234))  # 10
print(szamjegyek_osszege(987))   # 24

Tipp: Az utolsó számjegy: n % 10, a maradék: n // 10

Példamegoldás
1
2
3
4
def szamjegyek_osszege(n):
    if n == 0:
        return 0
    return n % 10 + szamjegyek_osszege(n // 10)

Fájlkezelés

9. feladat - Fájlból nevek beolvasása

Írj egy függvényt nevek_beolvasasa(fajlnev) néven, amely beolvas egy fájlt, amelyben soronként nevek szerepelnek. A függvény adjon vissza egy listát a nevekkel (sortörések nélkül)!

Teszteld úgy, hogy létrehozol egy nevek.txt fájlt az alábbi tartalommal:

1
2
3
4
Anna
Béla
Csaba
Dóra

Példamegoldás
1
2
3
4
5
6
7
def nevek_beolvasasa(fajlnev):
    with open(fajlnev, "r", encoding="utf-8") as f:
        sorok = f.readlines()
    nevek = []
    for sor in sorok:
        nevek.append(sor.strip())
    return nevek
10. feladat - Számok írása fájlba

Írj egy függvényt szamok_irasa(fajlnev, szamok) néven, amely egy számokat tartalmazó listát fájlba ír, soronként egy számot!

Példa:

1
2
szamok = [10, 20, 30, 40, 50]
szamok_irasa("szamok.txt", szamok)

A szamok.txt fájl tartalma:

1
2
3
4
5
10
20
30
40
50

Példamegoldás
1
2
3
4
def szamok_irasa(fajlnev, szamok):
    with open(fajlnev, "w", encoding="utf-8") as f:
        for szam in szamok:
            f.write(str(szam) + "\n")

Hajrá! (Mindent bele!)

11. feladat - Szótár mentése fájlba

Írj egy függvényt szotar_mentese(fajlnev, szotar) néven, amely egy szótárt ment fájlba kulcs:érték formátumban, soronként egy bejegyzés!

Példa:

1
2
diakok = {"Anna": 85, "Béla": 92, "Csaba": 78}
szotar_mentese("diakok.txt", diakok)

A diakok.txt fájl tartalma:

1
2
3
Anna:85
Béla:92
Csaba:78

Példamegoldás
1
2
3
4
def szotar_mentese(fajlnev, szotar):
    with open(fajlnev, "w", encoding="utf-8") as f:
        for kulcs, ertek in szotar.items():
            f.write(f"{kulcs}:{ertek}\n")
12. feladat - Szótár beolvasása fájlból

Írj egy függvényt szotar_beolvasasa(fajlnev) néven, amely beolvas egy fájlt, amelyben kulcs:érték formátumú sorok vannak, és visszaad egy szótárt!

Teszteld az előző feladatban létrehozott diakok.txt fájllal!

Példamegoldás
1
2
3
4
5
6
7
8
9
def szotar_beolvasasa(fajlnev):
    szotar = {}
    with open(fajlnev, "r", encoding="utf-8") as f:
        sorok = f.readlines()
    for sor in sorok:
        sor = sor.rstrip()
        kulcs, ertek = sor.split(":")
        szotar[kulcs] = int(ertek)
    return szotar
14. feladat - Legnagyobb pontszám fájlból

Írj egy függvényt legnagyobb_pontszam(fajlnev) néven, amely beolvas egy fájlt, amelyben név:pontszám formátumú sorok vannak, és visszaadja a legnagyobb pontszámot elért diák nevét!

Példa: Adott a diakok.txt fájl tartalma:

1
2
3
Anna:85
Béla:92
Csaba:78

1
print(legnagyobb_pontszam("diakok.txt"))  # Béla
Példamegoldás
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def legnagyobb_pontszam(fajlnev):
    szotar = {}
    with open(fajlnev, "r", encoding="utf-8") as f:
        sorok = f.readlines()
    for sor in sorok:
        sor = sor.rstrip()
        nev, pontszam = sor.split(":")
        szotar[nev] = int(pontszam)

    legjobb = max(szotar, key=szotar.get)
    return legjobb
15. feladat - Összetett feladat: Telefonkönyv

Készíts egy egyszerű telefonkönyv programot, amely:

  1. Beolvas egy telefonkonyv.txt fájlt, amelyben név:telefonszám formátumú sorok vannak.
  2. Egy szótárban tárolja az adatokat.
  3. A felhasználótól bekér egy nevet.
  4. Kiírja a hozzá tartozó telefonszámot, vagy jelzi, ha nincs ilyen név.

Példa fájl tartalom:

1
2
3
Anna:+36301234567
Béla:+36202345678
Csaba:+36703456789

Példamegoldás
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
def telefonkonyv():
    # Fájl beolvasása
    konyv = {}
    with open("telefonkonyv.txt", "r", encoding="utf-8") as f:
        sorok = f.readlines()

    for sor in sorok:
        sor = sor.rstrip()
        nev, telefonszam = sor.split(":")
        konyv[nev] = telefonszam

    # Keresés
    keresett_nev = input("Add meg a nevet: ")
    if keresett_nev in konyv:
        print(f"{keresett_nev} telefonszáma: {konyv[keresett_nev]}")
    else:
        print("Nincs ilyen név a telefonkönyvben.")

# Használat:
telefonkonyv()