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.
- 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[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