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[2] in [„Eger”, „Salgótarján”, „Cegléd”]

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:

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

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)
👁️ 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!
[premium_tartalom] (Várt darabszám: 90)
👁️ Kattints ide a megoldás megtekintéséhez
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!
[premium_tartalom] (Várt darabszám: 26)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_6 = list(filter(lambda x: x[6] == „User” and x[9] == True, adatbazis))

[/premium_tartalom]
7. Listázd azokat, akik Pécsről vagy Szegedről regisztráltak!
[premium_tartalom] (Várt darabszám: 31)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_7 = list(filter(lambda x: x[2] in [„Pécs”, „Szeged”], adatbazis))

[/premium_tartalom]
8. Szűrd ki azokat a személyeket (akiknek a keresztneve „a”, „e”, „i” vagy „z” betűre végződik)!
[premium_tartalom] (Várt darabszám: 76)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_8 = list(filter(lambda x: x[1][-1].lower() in [„a”, „e”, „i”, „z”], adatbazis))

[/premium_tartalom]
9. Szűrd ki az „Admin” vagy „Moderator” rangú felhasználókat!
[premium_tartalom] (Várt darabszám: 106)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_9 = list(filter(lambda x: x[6] in [„Admin”, „Moderator”], adatbazis))

[/premium_tartalom]
10. Keresd meg azokat, akik ID-je kisebb, mint 50, és aktívak!
[premium_tartalom] (Várt darabszám: 30)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_10 = list(filter(lambda x: int(x[0]) < 50 and x[5] == True, adatbazis))

[/premium_tartalom]
11. Keresd meg azokat a felhasználókat, akiknél hiányzik az életkor adat (üres string maradt)!
[premium_tartalom] (Várt darabszám: 14)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_11 = list(filter(lambda x: x[3] == „”, adatbazis))

[/premium_tartalom]
12. Szűrd ki a hibás egyenleggel rendelkező rekordokat (ahol az érték „N/A”)!
[premium_tartalom] (Várt darabszám: 17)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_12 = list(filter(lambda x: x[4] == „N/A”, adatbazis))

[/premium_tartalom]
13. Keresd meg a rendszerhibás bejelentkezéseket (ahol a bejelentkezések száma negatív)!
[premium_tartalom] (Várt darabszám: 5)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_13 = list(filter(lambda x: int(x[8]) < 0, adatbazis))

[/premium_tartalom]
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!
[premium_tartalom] (Várt darabszám: 3)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_16 = list(filter(lambda x: x[1].startswith(„Kovács”) and x[7] != „” and float(x[7]) > 8.0, adatbazis))

[/premium_tartalom]
17. Listázd azokat a budapesti vagy debreceni felhasználókat, akiknek van életkor adata, és az életkoruk páros szám!
[premium_tartalom] (Várt darabszám: 12)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_17 = list(filter(lambda x: x[2] in [„Budapest”, „Debrecen”] and x[3] != „” and int(x[3]) % 2 == 0, adatbazis))

[/premium_tartalom]
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).
[premium_tartalom] (Várt darabszám: 5)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_18 = list(filter(lambda x: x[5] == False and x[9] == False and int(x[8]) < 100, adatbazis))

[/premium_tartalom]
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)!
[premium_tartalom] (Várt darabszám: 163)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_19 = list(filter(lambda x: x[3] != „” and x[7] != „” and x[4] != „N/A” and int(x[8]) >= 0, adatbazis))

[/premium_tartalom]
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!
[premium_tartalom] (Várt darabszám: 6)
👁️ Kattints ide a megoldás megtekintéséhez
megoldas_20 = list(filter(lambda x: x[4] == „N/A” and x[6] in [„Admin”, „Moderator”] and x[9] == True, adatbazis))

[/premium_tartalom]

💻 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