Feladatsor

Filter használata

Olvasd be a felhasznalok.txt fájlt egy adatbazis nevű listába.

📥 Szükséges fájlok letöltése

🔒 Prémium előfizetéssel tekinthető meg | Előfizetés (3 990 Ft/hó)
🔒 Prémium előfizetéssel tekinthető meg

📋 A beolvasott adatok mezői

A zárójelben lévő információk azt mutatják, hogyan kezeld őket a feldolgozás során.
Ne felejtsd el átalakítani a mezőket a megfelelő adattípusra, kivéve ahol a feladat azt írja, hogy ne.

  • x[0]: Azonosító (int)
  • x[1]: Név (string)
  • x[2]: Város (string)
  • x[3]: Életkor (int vagy "" ha hiányzik) *(ne alakítsd át)*
  • x[4]: Egyenleg (float vagy "N/A" ha hibás) *(ne alakítsd át)*
  • x[5]: Aktív státusz (bool)
  • x[6]: Jogosultság (string)
  • x[7]: Pontszám (float vagy "" ha hiányzik) *(ne alakítsd át)*
  • x[8]: Bejelentkezések száma (int)
  • x[9]: Hírlevél feliratkozás (bool)

📖 Bevezető feladatok:

1. Szűrd ki azokat, akik aktív felhasználók!

megoldas_1 = list ( filter (lambda x: x[5], adatbazis ) )
megoldas_1b = list ( filter (lambda x: x[5] == True, adatbazis ) )

Megoldás részletezése (olvasd el)

  • adatbazis: ez a lista (ebbe pakoltad bele a fájl tartalmát). A megoldás legvégén áll, de ez az, amin a szűrést el akarjuk végezni. Mindig ez lesz az utolsó paraméter.
  • filter() függvény: A filter() a „szűrőberendezés”. Két dolgot vár tőled, hogy működni tudjon:
    • Mit szűrjön meg? Ez a második paraméter, jelenleg az adatbazis lista.
    • Milyen feltétel alapján szűrjön? Ez az első paraméter, ide egy függvényt kell adnunk (ami általában lambda, de def is lehetne), ami eldönti minden egyes sorról, hogy megtartjuk-e vagy sem.
  • lambda x: x[5] kifejezés (a szűrési feltétel): Az x itt egyetlen felhasználó adatsorát jelenti. A filter elkezdi végigpörgetni az adatbazis-t (mint egy ciklus), és minden egyes lépésben az aktuális felhasználó listája lesz az x.
  • x[5]: A kettőspont után jön az a feltétel, amire a lambda függvénynek True vagy False választ kell adnia.
    • Az aktív/inaktív státusz a lista 6. eleme, tehát az 5-ös indexen található (mivel a számozás 0-tól indul).
    • Az x[5] önmagában egy logikai érték (True vagy False), de írtam egy második megoldást is, ami szintén ugyanazt a szűrési folyamatot játssza le.
    • Ha egy felhasználónál az x[5] értéke True (tehát aktív), a filter átengedi (bekerül a megoldas_1 filterbe). Ha False (inaktív), akkor eldobja (nem kerül be a megoldas_1 filterbe).
  • list() konverzió: Amikor a filter() befejezi a munkát, az eredmény nem egy lista lesz, hanem egy speciális filter objektum. Ahhoz, hogy ezt újra egy normális, olvasható listaként tudjuk használni, át kell alakítani (ki kell csomagolni) egy listába a list(...) paranccsal.Ez „kicsomagolja” a szűrt eredményeket egy új listába, amit eltárolunk a megoldas_1 változóban.

2. Listázd ki a budapesti felhasználókat!

megoldas_2 = list (filter (lambda x: x[2] == „Budapest”, adatbazis ) )

Megoldás részletezése (olvasd el)

  • adatbazis: még mindig ez az a lista, amiben az adatok vannak és amire a szűrést alkalmazni akarjuk. Nem hiányzik belőle semmi, az eredeti adatszerkezet nem változik a szűrés során (nem változott semmi az első szűrés eredményeként).
  • x[2] == „Budapest”: A feltétel, amire a lambda függvénynek True vagy False választ kell adnia.
    • A város a lista 3. eleme, tehát a 2-es indexen található (mivel a számozás 0-tól indul).
    • Az x[2] önmagában nem egy logikai érték, így valamilyen relációt kell alkalmazni. A reláció bármi lehet: egyenlőségvizsgálat, kisebb, nagyobb, not, in, range, …
    • Nem feltétlenül csak egy relációt tudsz megfogalmazni, több reláció esetén and és or kapcsolatot is tudsz létesíteni.
    • Ha egy felhasználónál igaz a reláció, a filter átengedi (bekerül a megoldas_2 filterbe). Ha nem igaz, akkor eldobja (nem kerül be a megoldas_2 filterbe).

Példák relációkra (értelmezd őket):

x[0] <= 20 and x[8] != 20
x[0] != 30 or x[0] > 30
x[0] not in range(1, 15) and not x[9]
int(x[0]) not in (1, 2, 3)
x[3] != "" and int(x[3]) == 25

🚀 További feladatok és megoldások:

Figyelj arra, hogy jelenleg néhány adatod stringként van eltárolva a listában.

3. Keresd meg azokat, akik „Admin” jogosultsággal rendelkeznek! (Várt darabszám: 46)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_3 = list(filter(lambda x: x[6] == "Admin", adatbazis))
4. Szűrd ki azokat, akik fel vannak iratkozva a hírlevélre! (Várt darabszám: 116) (Várt darabszám: 116)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_4 = list(filter(lambda x: x[9] == True, adatbazis))
5. Szűrd ki az inaktív felhasználókat! (Várt darabszám: 90)
👁️ Kattints ide a megoldás megtekintéséhez
[premium_tartalom]
        megoldas_5 = list(filter(lambda x: x[5] == False, adatbazis))
    [/premium_tartalom]
6. Keresd meg azokat a „User” jogosultságúakat, akik hírlevélre is feliratkoztak! (Várt darabszám: 26)
🔒 Prémium előfizetéssel tekinthető meg

7. Listázd azokat, akik Pécsről vagy Szegedről regisztráltak! (Várt darabszám: 31)
🔒 Prémium előfizetéssel tekinthető meg

8. Szűrd ki azokat a személyeket (akiknek a keresztneve „a”, „e”, „i” vagy „z” betűre végződik)! (Várt darabszám: 76)
🔒 Prémium előfizetéssel tekinthető meg

9. Szűrd ki az „Admin” vagy „Moderator” rangú felhasználókat! (Várt darabszám: 106)
🔒 Prémium előfizetéssel tekinthető meg

10. Keresd meg azokat, akik ID-je kisebb, mint 50, és aktívak! (Várt darabszám: 30)
🔒 Prémium előfizetéssel tekinthető meg

11. Keresd meg azokat a felhasználókat, akiknél hiányzik az életkor adat (üres string maradt)! (Várt darabszám: 14)
🔒 Prémium előfizetéssel tekinthető meg

12. Szűrd ki a hibás egyenleggel rendelkező rekordokat (ahol az érték „N/A”)! (Várt darabszám: 17)
🔒 Prémium előfizetéssel tekinthető meg

13. Keresd meg a rendszerhibás bejelentkezéseket (ahol a bejelentkezések száma negatív)! (Várt darabszám: 5)
🔒 Prémium előfizetéssel tekinthető meg

14. Szűrd ki azokat az embereket, akik TÉNYLEG idősebbek 30 évnél (vigyázz a hiányzó adatokra)! (Várt darabszám: 150)
# Tipp: Először ellenőrizned kell, hogy nem üres-e, különben hibára fut az összehasonlítás (egy and kapcsolat esetén, ha az első feltétel nem igaz, akkor a második már kiértékelésre se kerül).
🔒 Prémium előfizetéssel tekinthető meg

15. Keresd meg a hibátlan, 5000 feletti egyenleggel rendelkezőket! (Várt darabszám: 84)
# Tipp: Először megint ellenőrizni kell, hogy az egyenleg ne N/A legyen, különben hibára fut az összehasonlítás (egy and kapcsolat esetén, ha az első feltétel nem igaz, akkor a második már kiértékelésre se kerül).
🔒 Prémium előfizetéssel tekinthető meg

16. Keresd meg a „Kovács” vezetéknevűeket, akiknek a pontszáma is megvan és nagyobb, mint 8.0! (Várt darabszám: 3)
🔒 Prémium előfizetéssel tekinthető meg

17. Listázd azokat a budapesti vagy debreceni felhasználókat, akiknek van életkor adata, és az életkoruk páros szám! (Várt darabszám: 12)
🔒 Prémium előfizetéssel tekinthető meg

18. Szűrd ki a gyanús profilokat: Inaktívak, nem kérnek hírlevelet, és a bejelentkezésük kevesebb, mint 100 (vagy negatív). (Várt darabszám: 5)
🔒 Prémium előfizetéssel tekinthető meg

19. Szűrd ki a teljesen hibátlan, „Tökéletes” rekordokat (ahol megvan az életkor és a pontszám, az egyenleg nem hibás, és a bejelentkezés pozitív)! (Várt darabszám: 163)
🔒 Prémium előfizetéssel tekinthető meg

20. Keresd meg azokat, akiknek az egyenlege hibás („N/A”), DE „Admin” vagy „Moderator” rangúak, és fel vannak iratkozva a hírlevélre! (Várt darabszám: 6)
🔒 Prémium előfizetéssel tekinthető meg

💻 Interaktív Kódszerkesztő és Tesztelés

A feladatok teszteléséhez előkészítettünk egy kisebb tesztadatbázist közvetlenül a szerkesztőbe ágyazva. Írd meg alá a szűréseket, és kattints a Futtatás gombra!

🔒 Prémium előfizetéssel tekinthető meg

🧠 Tudásellenőrző Kvíz

Teszteld a tudásodat a Python szűrési és feltételkezelési szabályairól! Kattints a dobozra a feladatsor megnyitásához:

🔒 Prémium előfizetéssel tekinthető meg