lista fogalma, használata listák másolása (alap szintű, teljes körű) szótárak fogalma, használata adatbázis alkalmazás fejlesztése műveletek fájlokkal (megnyítás, írás, olvasás, lezárás) rejtjelező alkalmazás fejlesztése
Lista a lista egy összetett adattípus egy lista elemek sorozatából áll, ahol az elemek bármilyen típusú adatok lehetnek (akár listák is!) például: >>> L = ["János", 16, True] >>> L ['János', 16, True] 2
Listák létrehozása 1. az elemeket szögletes zárójelek között, vesszővel elválasztva felsoroljuk (lásd előbbi példát) 2. a list() függvénnyel, melynek argumentuma olyan dolog, melynek elemei felsorolhatók 3. [ kifejezés for elem in objektum ] >>> L = ["János", 16, True] >>> L ['János', 16, True] >>> L = list(range(5)) >>> L [0, 1, 2, 3, 4] >>> L = list("helló!") >>> L ['H', 'e', 'l', 'l', 'ó', '!'] >>> L = [x**2 for x in range(5)] >>> L [0, 1, 4, 9, 16] 3
Műveletek listákkal a karakterláncokhoz hasonlóan listákat összeadhatunk és számmal szorozhatunk alkalmazhatjuk a len() függvényt alkalmazhatjuk az in és a not in operátorokat >>> [0] + [1, 2, 3] + [4, 5, 6] [0, 1, 2, 3, 4, 5, 6] >>> ['A']*5 ['A', 'A', 'A', 'A', 'A'] >>> L = [0, 1, 2, 3, 4] >>> len(l) 5 >>> 1 in L True >>> 10 in L False >>> 10 not in L True 4
Műveletek listákkal append() elem hozzáadása a lista végéhez extend() másik lista hozzáfűzése a lista végéhez insert() elem beszúrása a lista tetszőleges helyére >>> L = [1, 2, 3] >>> L.append(4) >>> L [1, 2, 3, 4] >>> L.extend([5, 6]) >>> L [1, 2, 3, 4, 5, 6] >>> L.insert(0, 0) >>> L [0, 1, 2, 3, 4, 5, 6] >>> L.insert(3, 'közepe') >>> L [0, 1, 2, 'közepe', 3, 4, 5, 6] 5
Műveletek listákkal pop() adott indexű elem eltávolítása a listából remove() eltávolítja az argumentum-ként adott elemet a listából (az első előfordulást keresi) index() visszaadja azt a pozíciót, ahol először elődordul egy adott elem a listában >>> L = [1, 2, 3, 4, 5] >>> L.pop(2) 3 >>> L [1, 2, 4, 5] >>> >>> L.remove(2) >>> L [1, 4, 5] >>> L.index(4) 1 6
Műveletek listákkal count() visszaadja, hogy egy adott elem hányszor fordul elő a listában reverse() megfordítja a lista elemeinek sorrendjét sort() növekvő (vagy csökkenő) sorba rendezi a lista elemeit >>> L = [1, 2, 3, 4, 5, 5] >>> L.count(5) 2 >>> L.count(6) 0 >>> L.reverse() >>> L [5, 5, 4, 3, 2, 1] >>> L = [1, 3, 5, 2, 4] >>> L.sort() >>> L [1, 2, 3, 4, 5] >>> L.sort(reverse=True) >>> L [5, 4, 3, 2, 1] 7
Listaelem elérése és lista szeletelése a karakterláncokhoz hasonlóan egy lista egy adott elemére az elem indexének [ ]-be írásával hivatkozhatunk ha az x. és y. elemek közötti elemekre akarunk hivatkozni, akkor [x:y]-t írunk >>> L = [0, 1, 2, 3, 4, 5] >>> L[0] 0 >>> L[3] 3 >>> L[-1] 5 >>> L[-2] 4 >>> L[1:4] [1, 2, 3] >>> L[2:] [2, 3, 4, 5] >>> L[:-2] [0, 1, 2, 3] 8
Többdimenziós lista ha a lista elemei is listák, akkor többdimenziós listákat kapunk: >>> L0 = [1, 2, 3] >>> L1 = [4, 5, 6] >>> L2 = [7, 8, 9] >>> L3 = ['*', 0, '#'] >>> L = [L0, L1, L2, L3] >>> L [[1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#']] >>> L[1][2] 6 >>> L[-1][1] 0 9
Szótárak a szótár (dictionary) is egy összetett adattípus a szótár ún. kulcs-érték párokból áll például: >>> D = { "név": "Józsi", "foglalkozás": "úthengeres", "kor": 47 } >>> D {'név': 'Józsi', 'foglalkozás': 'úthengeres', 'kor': 47} 10
Műveletek szótárakkal adott kulcsú elem kiolvasása létező elem módosítása új elem hozzáadása a szótárhoz elem törlése a szótárból >>> D["kor"] 47 >>> D["kor"] = 51 >>> D {'név': 'Józsi', 'foglalkozás': 'úthengeres', 'kor': 51} >>> D["lakóhely"] = "Szentendre" >>> D {'név': 'Józsi', 'foglalkozás': 'úthengeres', 'kor': 51, 'lakóhely': 'Szentendre'} >>> del D["foglalkozás"] >>> D {'név': 'Józsi', 'kor': 51, 'lakóhely': 'Szentendre'} 11
Adatbázis alkalmazás Készítsünk egy egyszerű adatbázis alkalmazást, ami a jobb oldalon látható funkciókat valósítja meg! Minden rekord legyen egy szótár, melyben a következő kulcsú elemek szerepelnek: név, születési_év, lakóhely! Az adatbázis legyen ilyen rekordokból álló lista! Üdvözöljük az adatbázisban! Főmenü ================== 1. Betöltés 2. Új rekord 3. Listázás 4. Mentés 0. Kilépés Választás: 12
Adatbázis alkalmazás Kezdjük az új rekord felvételével és a rekordok listázásával! Választás: 2 Új rekord felvétele ------------------- Név: Levi Születési év: 1970 Cím: Szentendre Választás: 3 Adatbázis lista --------------- [1] Levi; 1970; Szentendre 13
Fájlok használata a program futása során a memóriában eltárolt értékek elvesznek mikor a programból kilépünk az adatok hosszabb távú tárolására fájlokat használunk a fájlok a számítógép háttértárolóján találhatók, és névvel hivatkozunk rájuk 14
Fájl megnyitása és bezárása a fájl megnyitása az open() függvénnyel történik, melynek paraméterként meg kell adni a fájl nevét és a hozzáférés módját (r = olvasás, w = írás) a fájl bezárása a fájl objektum close() függvényével történik >>> f = open("db.txt", "r") >>> f.readline() 'Boti; 2005; Szentendre\n' >>> f.close() 15
Fájl olvasása a fájlból a fájl objektum read() függvényével lehet olvasni f.read() beolvas mindent f.read(n) csak n karaktert olvas be f.readline() beolvassa a következő sort a fájlból >>> f.read() 'Levi; 1970; Szentendre\nBoti; 2005; Szentendre\n' >>> f.read(16) 'Levi; 1970; Szen' >>> f.read(16) 'tendre\nboti; 200' >>> >>> f.readline() 'Levi; 1970; Szentendre\n' >>> f.readline() 'Boti; 2005; Szentendre\n' 16
Fájl írása a fájlba a fájl objektum write() függvényével lehet írni, melynek paraméterként meg kell adni a kiírandó adatot >>> f = open("test.txt", "w") >>> f.write("hello World!") 12 >>> f.close() 17
Adatbázis alkalmazás Az adatbázis mentéséhez kérjünk be egy fájlnevet, majd írjuk ki az összes rekordot az adott fájlba! Az adatbázis betöltéséhez kérjük be az adatbázist tároló fájl nevét, majd olvassuk be a rekordokat! Választás: 4 Adatbázis mentése ----------------- Fájl neve: db.txt Adatbázis elmentve! Választás: 1 Adatbázis betöltése ------------------- Fájl neve: db.txt Adatbázis betöltve! 18
Listák másolása Próbáld ki! Mit tapasztalsz? >>> L1 = ['alma', 'körte', 'szilva'] >>> L1 ['alma', 'körte', 'szilva'] >>> L2 = L1 >>> L2 ['alma', 'körte', 'szilva'] >>> L2[0] = 'barack' >>> L2 ['barack', 'körte', 'szilva'] >>> L1 ['barack', 'körte', 'szilva'] Vesd össze ezzel! >>> A = 12 >>> A 12 >>> B = A >>> B 12 >>> B = 14 >>> B 14 >>> A 12 19
Listák másolása >>> L1 = ['alma', 'körte', 'szilva'] >>> L1 ['alma', 'körte', 'szilva'] >>> L2 = L1 >>> L2 ['alma', 'körte', 'szilva'] >>> L2[0] = 'barack' >>> L2 ['barack', 'körte', 'szilva'] >>> L1 ['barack', 'körte', 'szilva'] L1 L2 alma barack körte szilva 20
Alapszintű másolás (shallow copy) Próbáld ki! Mit tapasztalsz? >>> L1 ['barack', 'körte', 'szilva'] >>> import copy >>> L3 = copy.copy(l1) >>> L3 ['barack', 'körte', 'szilva'] >>> L3.append('alma') >>> L3 ['barack', 'körte', 'szilva', 'alma'] >>> L1 ['barack', 'körte', 'szilva'] 21
Alapszintű másolás (shallow copy) Próbáld ki! Mit tapasztalsz? >>> L0 = [1, 2, 3] >>> L1 = ['alma', 'körte', L0] >>> L1 ['alma', 'körte', [1, 2, 3]] >>> L2 = copy.copy(l1) >>> L2 ['alma', 'körte', [1, 2, 3]] >>> L2[2].remove(3) >>> L2 ['alma', 'körte', [1, 2]] >>> L1 ['alma', 'körte', [1, 2]] 22
Alapszintű másolás (shallow copy) >>> L0 = [1, 2, 3] >>> L1 = ['alma', 'körte', L0] >>> L1 ['alma', 'körte', [1, 2, 3]] >>> L2 = copy.copy(l1) >>> L2 ['alma', 'körte', [1, 2, 3]] >>> L2[2].remove(3) >>> L2 ['alma', 'körte', [1, 2]] >>> L1 ['alma', 'körte', [1, 2]] L1 alma körte L0 1 2 3 L2 alma körte 23
Teljes körű másolás (deep copy) Próbáld ki! Mit tapasztalsz? >>> L0 = [1, 2, 3] >>> L1 = ['alma', 'körte', L0] >>> L1 ['alma', 'körte', [1, 2, 3]] >>> L2 = copy.deepcopy(l1) >>> L2 ['alma', 'körte', [1, 2, 3]] >>> L2[2].remove(3) >>> L2 ['alma', 'körte', [1, 2]] >>> L1 ['alma', 'körte', [1, 2, 3]] 24
Teljes körű másolás (deep copy) >>> L0 = [1, 2, 3] >>> L1 = ['alma', 'körte', L0] >>> L1 ['alma', 'körte', [1, 2, 3]] >>> L2 = copy.deepcopy(l1) >>> L2 ['alma', 'körte', [1, 2, 3]] >>> L2[2].remove(3) >>> L2 ['alma', 'körte', [1, 2]] >>> L1 ['alma', 'körte', [1, 2, 3]] L1 L2 alma körte alma körte L0 1 2 3 1 2 3 25
Összefoglalás egy lista elemek sorozatából áll, ahol az elemek bármilyen típusú adatok lehetnek (akár listák is!) listát létrhozhatunk úgy, hogy [ ]-ek között felsoroljuk az elemeit, vagy a list() függvénnyel 26
Összefoglalás műveletek listákkal: listák összeadása, len(), in, not in append(), extend(), insert(), pop(), remove() index(), count(), reverse(), sort() lista elem elérése és listák szeletelése: L[x], L[x:y] listák másolása: alapszintű másolás: copy.copy() teljes körű másolás: copy.deepcopy() 27
Összefoglalás a szótár kulcs-érték párokból áll egyébként hasonlít a listára, de máshogy kell új elemeket hozzáadni és az elemekre hivatkozni egy lista elemei lehetnek szótárak szótárakat hasonlóan lehet másolni, mint listákat: alapszintű másolás: copy.copy() teljes körű másolás: copy.deepcopy() 28
Összefoglalás hosszú távú tárolásra fájlokba mentjük az adatokat a fájlt használat előtt meg kell nyitni és használat után be kell zárni open(), f.close() fájlba lehet adatot írni, vagy onnan adatot olvasni f.write(), f.read(), f.readline() 29
Rejtjelező alkalmazás Írj egy rejtjelező alkalmazást, mely bekéri egy fájl nevét, majd beolvassa annak tartalmát, rejtjelezi azt, és az eredményt visszaírja a fájlba! A kódolás lehet egyszerű betűhelyettesítés amit egy szótár alapján végezhetsz. A szótárban tárold, hogy melyik betűhöz melyik rejtjeles betű tartozik, majd a fájlból beolvasott szöveg minden betűjét helyettesítsd a szótárban hozzátartozó kódbetűvel! Írd meg a dekódoló alkalmazást is! 30
Készítette: Buttyán Levente Levente.Buttyan@gmail.com CoderDojo Szentendre 2017 31