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
📋 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
adatbazislista. - 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.
- Mit szűrjön meg? Ez a második paraméter, jelenleg az
- lambda x: x[5] kifejezés (a szűrési feltétel): Az
xitt 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 amegoldas_1filterbe). Ha False (inaktív), akkor eldobja (nem kerül be amegoldas_1filterbe).
- 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 amegoldas_1vá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ésorkapcsolatot is tudsz létesíteni. - Ha egy felhasználónál igaz a reláció, a filter átengedi (bekerül a
megoldas_2filterbe). Ha nem igaz, akkor eldobja (nem kerül be amegoldas_2filterbe).
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)
[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)
[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)
[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)
[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)
[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)
[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)
[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)
[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)
[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)
[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)
[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)
[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)
[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)
[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