Kihagyás

| Gyakorló feladatsor: Függvények, Adatszerkezetek, Fájlok és Haladó Algoritmusok |

Az alábbi 15 feladat a Python nyelv legfontosabb eszköztárát (függvények készítése, szótárak és halmazok kezelése, fájlok írása/olvasása, adatok válogatása és rendezése) teszi próbára. Szabály: Törekedj a "Tiszta Kód" (Clean Code) írására! Használj beszédes változóneveket, és ahol csak logikus, a megoldást csomagold újrahasznosítható függvényekbe (még akkor is, ha a feladat nem kéri külön)!


1. Dinamikus statisztika (*args és Tuple)

Írj egy statisztika(*szamok) nevű függvényt, amely tetszőleges számú paramétert képes fogadni! A függvény ne írjon ki semmit, hanem térjen vissza egy 3-elemű tuple-lel, amely a következőket tartalmazza: (legkisebb_elem, legnagyobb_elem, atlag). A főprogramban hívd meg a függvényt legalább 5 számmal, a kapott tuple-t mentsd el egy változóba, majd bontsd szét és írasd ki az értékeket!

2. Szótár alapú szavazatszámláló (Gyakoriság)

Adott egy lista, amely egy osztály diákönkormányzati szavazatait tartalmazza: ["Anna", "Béla", "Anna", "Cecil", "Béla", "Béla", "Dénes", "Anna", "Béla"]. Írj egy algoritmust, amely végigmegy a listán, és egy szótár (dictionary) segítségével összesíti, hogy ki hány szavazatot kapott! (A kulcs a név legyen, az érték a szavazatok száma). A végén írasd ki a szótárat!

3. A titkos üzenet (Szeletelés / Slicing)

Adott a következő "titkosított" szöveg: "xTyiutzkopsz kMüeazgesnjeatg!y" A szeletelés (slicing: [mettől:meddig:lépésköz]) szabályainak okos felhasználásával, egyetlen sornyi kóddal vágd ki belőle az elrejtett, valódi üzenetet! (Tipp: Próbáld meg minden harmadik betűt kiolvasni...)

4. Közös érdeklődés (Metszet algoritmus és Halmazok)

Adott két lista, amelyek két barát hobbijait tartalmazzák. 1. Írj egy "hagyományos" metszet algoritmust két for ciklus (vagy egy ciklus és az in operátor) használatával, ami kigyűjti egy listába a közös hobbikat! 2. Oldd meg ugyanezt a problémát a Python beépített halmaz (set) adatszerkezetével és a metszet (intersection) operátorral, mindössze egyetlen sorban!

5. Anagramma ellenőrző (Függvény és Szótár)

Két szó anagramma, ha pontosan ugyanazokat a betűket tartalmazzák, ugyanolyan mennyiségben (pl. kacsa - csaka). Írj egy is_anagramma(szo1, szo2) függvényt, amely visszatér egy True vagy False értékkel! A .sort() metódust nem használhatod, helyette építs két szótárat a betűk gyakoriságából, és azokat hasonlítsd össze! (A kis- és nagybetűket ne különböztesse meg a program!)

6. Osztályozó gép (Szétválogatás)

Adott egy szótárakból álló lista (list of dicts), amely diákokat és az év végi pontszámaikat tárolja: diakok = [{"nev": "Peti", "pont": 45}, {"nev": "Kata", "pont": 82}, {"nev": "Geri", "pont": 30}]. A szétválogatás algoritmusa segítségével bontsd két külön listára a diákokat: a bukottak listába azok a szótárak kerüljenek, ahol a pontszám 50 alatti, az atmentek listába pedig a többiek!

7. Hőmérséklet-napló (Fájlba írás "w")

Készíts egy programot, amely egy while ciklus segítségével addig kér be hőmérséklet-értékeket (számokat) a felhasználótól, amíg be nem írja, hogy "vege". A program nyisson meg egy homersekletek.txt nevű fájlt, és a kapott számokat írja bele egymás alá!

8. Hibakereső (Fájl olvasás és Kiválogatás)

Tegyük fel, hogy az előző feladat fájljába (homersekletek.txt) tévedésből mínusz értékek is kerültek. Írj egy programot, amely beolvassa a fájl tartalmát, kiválogatja belőle (egy új listába) azokat a számokat, amelyek 0 vagy annál nagyobbak, majd ezt a megtisztított listát írja ki a képernyőre! (Ne felejtsd el a fájlból beolvasott szöveget int()-té alakítani, és a sortöréseket strip()-pel eltávolítani!)

9. A buborékrendezés (Bubble Sort)

Adott a következő lista: [64, 34, 25, 12, 22, 11, 90]. A Python beépített .sort() metódusának használata nélkül, a buborékrendezés algoritmusával (két egymásba ágyazott ciklussal és elem-cserével) rendezd a listát növekvő sorrendbe!

10. Rendezett fájlba mentés (Kombinált)

Vedd az előző feladat (9.) buborékrendezéssel sorba állított listáját, és mentsd ki egy új, rendezett_szamok.txt nevű fájlba úgy, hogy minden szám új sorban, de a számok előtt egy sorszám is szerepeljen (pl. 1. elem: 11 \n 2. elem: 12 stb.)! Használj f-stringet a formázáshoz!

11. Szimmetrikus differencia (Egyedi elemek)

Adott két lista (A és B). Halmazok (set) használata nélkül, tiszta algoritmusokkal gyűjtsd ki egy új listába azokat az elemeket, amelyek csak az egyik listában szerepelnek (tehát benne vannak A-ban de B-ben nem, VAGY benne vannak B-ben de A-ban nem)! A közös elemeket hagyd figyelmen kívül!

12. A fájl statisztikusa (Függvény és Fájlkezelés)

Írj egy fajl_elemzo(fajlnev) nevű függvényt, amely paraméterként várja egy létező szövegfájl nevét! A függvény nyissa meg a fájlt, és térjen vissza egy szótárral (dict), amely három adatot tartalmaz: a fájl sorainak számát, a fájl szavainak számát (a .split() metódus segíthet), és a fájl összes karakterének számát (szóközökkel együtt)!

13. Globális és Lokális konfliktus (Scope)

Hozz létre egy globális változót banki_egyenleg = 10000 néven. Készíts egy vasarlas(osszeg) nevű függvényt! A függvény a global kulcsszó használatával vonja le az összeget az egyenlegből, HA van rá elég pénz. Ha nincs, írja ki: "Nincs elég fedezet!". Teszteld a függvényt egy 5000 és egy 8000 forintos vásárlással, majd írasd ki a globális egyenleg végső állapotát!

14. CSV-szerű adatok feldolgozása (Parsing)

Tegyük fel, hogy van egy diak_adatok.txt fájlod, amelyben ilyen sorok vannak: Kovács Anna;10.B;4.5 Nagy Péter;9.A;3.2 (Ha nincs ilyen fájlod, hozz létre egyet gyorsan a kódszerkesztődben!) Írj programot, amely beolvassa a fájlt, a .split(";") segítségével darabokra vágja a sorokat, majd az így kapott adatokat felépíti egy nagy szótárakból álló listává (pl. [{"nev": "Kovács Anna", "osztaly": "10.B", "atlag": 4.5}, ...])!

15. Mini Projekt: A Digitális Telefonkönyv

Használd fel az eddigi tudásodat egy teljes, menüvezérelt programhoz! A program induláskor hozzon létre egy üres szótárat (pl. telefonkonyv = {}). Egy végtelen while ciklussal ajánlj fel egy menüt a felhasználónak:

  1. Új kapcsolat hozzáadása: Kérd be a nevet (ez lesz a kulcs) és a számot (ez lesz az érték), majd mentsd el a szótárba.

  2. Keresés: Kérj be egy nevet. Ha benne van a szótárban, írd ki a számot, ha nincs, írd ki, hogy "Nem található".

  3. Minden adat kiírása: Egy for ciklussal (használd a szótár .items() metódusát) írasd ki az összes nevet és számot szépen formázva.

  4. Kilépés: Lépjen ki a while ciklusból (break).