2. modul Python bevezetés

Hasonló dokumentumok
Az Összetett hálózatok vizsgálata elektronikus tantárgy részletes követeleményrendszere

A Python alapjainak áttekintése

Python tanfolyam Python bevezető I. rész

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Mi a Python? A Python alapjainak áttekintése. Példaprogram feladatkit zés. Példaprogram megvalósítás

Szkriptnyelvek. 1. UNIX shell

Programozási nyelvek Python

Imperatív programozás

PYTHON. Avagy hosszú az út a BioPythonig

Matematikai programok

BASH script programozás II. Vezérlési szerkezetek

Matematikai programok

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

1. Alapok. #!/bin/bash

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Bevezetés a programozásba I.

A Python programozási nyelv

Ismerkedés a Python programnyelvvel. és annak micropython változatával

S z á m í t ó g é p e s a l a p i s m e r e t e k

Flex tutorial. Dévai Gergely

2018, Diszkrét matematika

AWK programozás, minták, vezérlési szerkezetek

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Python bevezető foglalkozás Python bevezető foglalkozás

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Imperatív programozás

Java és web programozás

A C# programozási nyelv alapjai

Mi a Python? A Python alapjainak áttekintése. Példaprogram feladatkit zés. Példaprogram megvalósítás

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk

Programozás I gyakorlat

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Hálózatok építése és üzemeltetése

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

22. GRÁFOK ÁBRÁZOLÁSA

AWK programozás, minták, vezérlési szerkezetek

Összetett hálózatok vizsgálata november 1.

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

Programozási nyelvek Java

Smalltalk 2. Készítette: Szabó Éva

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Bevezetés a Python programozási nyelvbe

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Java és web programozás

A C programozási nyelv III. Pointerek és tömbök.

Adatszerkezetek és algoritmusok

Apple Swift kurzus 3. gyakorlat

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

A C programozási nyelv III. Pointerek és tömbök.

A Python programozási nyelv

Operációs Rendszerek II. labor. 2. alkalom

Java és web programozás

Programozási nyelvek JAVA EA+GY 1. gyakolat

Webprogramozás szakkör

A C programozási nyelv I. Bevezetés

Vezérlési szerkezetek Vezérlési szerkezetek: feltételes elágazás és ciklusok

C programozás. 1 óra Bevezetés

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Szkriptnyelvek II. Perl programok

Java programozási nyelv

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Szoftvertechnológia alapjai Java előadások

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

BASH SCRIPT SHELL JEGYZETEK

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Gyakorló feladatok Gyakorló feladatok

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

A C programozási nyelv II. Utasítások. A függvény.

A C programozási nyelv I. Bevezetés

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Bisonc++ tutorial. Dévai Gergely. A szabály bal- és jobboldalát : választja el egymástól. A szabályalternatívák sorozatát ; zárja le.

Listák, szótárak, fájlok Listák, szótárak, fájlok

AWK programozás Bevezetés

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Gráfelméleti feladatok. c f

Imperatív programozás

Programozás I. gyakorlat

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

Hardver és szoftver követelmények

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

2018, Diszkrét matematika

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

3. Osztályok II. Programozás II

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Adatszerkezetek II. 1. előadás

Programozás Minta programterv a 1. házi feladathoz 1.

Gráfelméleti alapfogalmak

Objektumorientált Programozás VI.

A programozás alapjai

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Informatika terméktervezőknek

Rekurzió. Dr. Iványi Péter

Átírás:

2. modul Python bevezetés Horváth Árpád <horvath.arpad@arek.uni-obuda.hu> 2016. március 4. A modul célja A hallgatók ismerjék meg a Python nyelv alapjait olyan szinten, hogy a hálózatok vizsgálatára szolgáló függvényeket képesek legyenek írni. A hallgatók ismerjék a hálózatok éllistás megadását. 1. lecke A használt szoftverek bemutatása Tervezett id tartam 90 perc. Követelmények: A hallgató tudja felsorolni és elmagyarázni a Python négy f jellemz jét, párosítani tudja, hogy melyik programozási nyelv illetve programcsomag mire való: Python, pylab, matplotlib, numpy, igraph, ismerje az alábbiak szoftverek használatának jogi feltételeit: Debian, Python, matplotlib, numpy, igraph, tudja felsorolni a Python nyelv legalább három alkalmazási területét, képes telepíteni a VirtualBox alá a tanuláshoz szükséges Debiant, és azt elindítani, szabályosan leállítani, ismeri a python3, ipython3 és IDLE3 parancsértelmez k alapvet jellemz it, képes használni az ipython3 parancsértelmez t, képes a Python oktató példáit lefuttatni benne, képes használni az IDLE3 fájlszerkeszt jét vagy a Vim (gvim) szövegszerkeszt t Python programok szerkesztésére. A Python programozási nyelv 4 f jellemz je Objektumorientált Dinamikusan típusos A változóneveket nem kell külön bevezetni, és típust rendelni hozzá. Az értékadáskor lesz az adott változónak konkrét típusa, és ez a típus kés bb az értékkel együtt változhat. Interpretált Nem szükséges külön fordítás. A Python platformfüggetlen bytekódot készít a forrásból, és minden futtatáskor vizsgálja, hogy a forráskód nem frisebb-e mint a bytekód. Ha frisebb újra fordít. (Forráskód nélkül csak a bytekód is futtatható.) Platformfüggetlen A Python értelmez számos operációs rendszerhez elérhet lényegében azonos lehet ségekkel. A Python pár modulja numpy els sorban tömb és mátrixm veleteket végz modul, mivel a m veletek C-nyelven hajtódnak végre, gyorsak, matplotlib függvények kirajzolására használható modul. A függvények képerny n is megjeleníthet k és el is menthet k különböz formátumokban. A numpy-ra épül. pylab A matplotlib csomag telepítésekor hívható a matplotlib és a pylab csomag is. A pylab modul betöltésekor a MATLAB-éhoz hasonló függvényeket használhatunk, ahhoz hasonló módon rajzoltathatunk ki függvényeket. igraph Egy hálózatkezel modul, amely gyors, mivel C függvényeket hívogat. 1

Szoftverjog Szabad szoftvernek (Free Software) nevezzük azt a szoftvert, amely szabadon használható, tanulmányozható és módosítható, és a módosított változat is szabadon továbbadható. Ezekhez szükséges a forráskód ismerete. Nyílt forráskódúnak nevezzük azokat a programokat amelyeknél a forrás tanulmányozható, de nem feltétlenül teljesül a többi kikötés. A Debian, a Python, a pylab, a matplotlib, az igraph, az ipython parancsértelmez (és a kés bb használandó cxnet), nyílt forrású szoftverek. A Debian, az igraph és a cxnet szabad szoftverek, de a többi is szabadon használható még kereskedelmi célokra is. VirtualBox A félév során használhatnak egy Debian rendszert, amelyre az félév összes szükséges szoftvere telepítésre került. Ez a rendszert VirtualBox alá lehet telepíteni. Természetesen használhatnak saját telepítés rendszert (Ubuntu vagy Debian ajánlott) is. Nézze meg a VirtualBox használatáról szóló videót! Elérhet az elearning oldalon a kurzus az els blokkban (az 1. modul felett)! Python parancsértelmez k A Python nyelv kényelmesen használható parancssorból, azaz olyan felületr l, amelyben minden egyes parancs a begépelése után rögtön végrehajtódik, hasonlóan a Linux/Unix parancsértelmez ihez. A parancsértelmez t másképpen shellnek is hívják. A Pythonnak van egy hivatalos parancsértelmez je, amelyet legalábbis az általunk használt 3-as verzióét a python3 paranccsal indíthatunk. Ennél fejlettebb az IPython értelmez. Mindkett t lehet Linux/Unix/Windows parancssorból indítani. Az IDLE3 parancsértelmez ként is szolgáló integrált fejleszt eszköz. ok Nézze meg a parancsértelmez kr l és a Python-oktató használatáról szóló kisvideókat! A 2. modulban találhatóak. A video alapján futtasson le az oktatóban található programkódokat az ipythonban illetve az IDLE3- ban! A továbbiakban gyakran fogunk forráskódot szerkeszteni. Az IDLE3 használata egyszer bb, de a Vim illetve gvim különösen ahogy a Debian alatt be van állítva sok hasznos tulajdonsággal rendelkezik a Python-fájlok szerkesztéséhez. A Vim a parancssorból a vim parancsal indítható. A gvim a Debian alatt a felül található tálcáról elérhet. Használata tanulás nélkül nem könny, de a vimtutor paranccsal elindítva a f bb dolgokat meg lehet tanulni. Számunkra az IDLE3 használata is megfelel. Oldja meg az elearning oldalon található tesztet, amely ehhez a leckéhez tartozik. 2. lecke A Python nyelv alapjai Tervezett id tartam 90 perc. 2

Követelmények: A hallgató képes megjegyzést adni a programhoz, parancssorhoz, képes karakterláncokat létrehozni, összevonni, indexelni, szeletelni, képes létrehozni int és float típusú számokat, képes alkalmazni a 4 alapm velet és a // és ** és % m veleteket, képes használni az alulvonás _ változót, képes létrehozni karakterláncokat, képes alkalmazni a karakterláncok összef zésének lehet ségeit, a nyers karakterláncokat és a háromszoros idéz jeles formát, képes a karakterláncok indexelésére, szeletelésére, képes listák létrehozására, indexelésére, szeletelésére, összef zésére, Követelmények (folytatás): A hallgató képes listák adott index elemének és adott szeletének megváltoztatására értékadással, meg tudja magyarázni, hogy mit jelent, hogy a listák megváltoztathatóak, a karakterláncok pedig nem, képes a listák append és count metódusainak használatára, képes a print kulcsszavas paramétereinek (end, sep) használatára. képes feltételes elágazás létrehozására, az elif és else ágak használatára, képes while és for ciklus értelmezésére és létrehozására, akár break és continue utasítások használatával is, képes a range() függvény használatára for-ciklusban. ok Mint láthatja, ebben a leckében rengeteg apró dolgot kell megtanulnia a Python nyelvr l! PyOkt Ezek nagy része az oktató 3. és 4. fejezetében található. Olvassa el gyelmesen az oktató magyar vagy angol változatának alább megadott fejezeteit, és bátran kísérletezzen az ipython3-ban vagy az IDLE3-ban. A itt leírtak nagy része lépten-nyomon el fog fordulni a félév anyagában. Megtanulandók a 3. fejezet, a 4. fejezet de a 4.6-os és utána lév már nem kell egyel re. Az 5.1. fejezetben találhatóak a listák metódusai, amelyek közül az append és count metódusok ismerete fontos. A print utarítás két kulcsszavas argumentumát a következ kben magyarázzuk el. A print kulcsszavas argumentumai Alapból a print utasítás minden felsorolt argumentuma között egy szóközt kihagy, és a sor végén sort emel. Ez a viselkedés megváltoztatható a sep és end kulcsszavas argumentumokkal. A sep alapesetben szóköz, az end értéke soremelés. Az alábbi példában az elválasztó " + " (szóköz+plusz+szóköz) lesz, a sor végét " =" (szóköz+egyenl ) fogja zárni, és nem lesz soremelés. print(1,5,3,7,3, sep=" + ", end=" =") Hogyan lehetne úgy kiíratni ugyenezt, hogy ezen kívül még két soremelés legyen? Hogyan lehetne úgy kiíratni ugyenezeket a számokat, hogy mindegyik külön sorban legyen, és legalul a sort egy - (minusz) jel zárja? Megoldások print(1,5,3,7,3, sep=" + ", end=" =\n\n") print(1,5,3,7,3, sep="\n", end=" =\n-") Egyéb argumentumok, ajánlott feladat A további kérdéseket gyakorlásképp megoldhatja, de nyugodtan áttérhet a következ leckére. Milyen kulcsszavas argumentumai vannak még a print-nek? Próbálja meg kideríteni az ipython3 segítségével! 3

Megoldás ipython3-ban a print? beírásával, IDLE3-ban a help(print) utasítással vagy ha várunk egy kicsit a print( beírása után: In [1]: print? (...) print(value,..., sep=' ', end='\n', file=sys.stdout) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. Van tehát egy argumentum, ami fájl, vagy fájl-szer objektum lehet. Meg lehet tehát adni, hogy ne a képerny re, hanem fájlba írjon a print. (3.3-tól van egy ush is.) Ajánlott feladat Hogyan lehet olyan ciklust készíteni, amelyben a evszazad változó végig megy 900-tól 2000-ig százasával, és ki is írja a változót úgy, hogy az egymás utáni értékek vessz vel lesznek elválasztva? Megoldás for evszazad in range(300, 2001, 100): print(evszazad, end=",") 2001 helyett bármilyen egész lehet 2001 és 2100 között. Oldja meg az elearning oldalon található tesztet, amely ehhez a leckéhez tartozik. 3. lecke Az éllista Tervezett id tartam 90 perc. Követelmények: A hallgató el tudja magyarázni, hogyan tárolhatóak irányítatlan és irányított hálózatok éllistában, létre tud hozni egyszer bb függvényeket a return utasítás helyes használatával és dokumentációs karakterlánccal, tesztelni tudja assert utasítással függvények visszatérési értékeit, létre tud hozni olyan függvényeket, amelyek éllistából meghatározza a hálózat éleinek számát, egy csúcs fokszámát, egy csúcs szomszédainak a számát. Éllisták A hálózatokat többféle módon tárolhatjuk a számítógépen. Ezek egyike az éllista. Ebben az esetben az éleket soroljuk fel olyan módon, hogy az éleket a végpontjaival azonosítjuk. Mi a továbbiakban az csúcsok azonosítására egész számokat fogunk használni. Ha N csúcsa van a hálózatnak, akkor az csúcsokat 0 és N 1 közé es egészek fogják jelölni. Az éllista elemei tehát számpárok lesznek. 4

ok Megtudható-e egy éllistából a hálózat csúcsainak a száma? Lehet-e éllistában hurokéleket és többszörös éleket tárolni? 2 1 hurokél 0 többszörös él Megoldások Az alábbi esetben nem tudható meg az éllistából, hogy három csúcs van. Legalább két csúcsnak lennie kell, de lehetne akár ezer is. 2 1 0 Többszörös éleket úgy lehet tárolni, hogy többször felsorolom az adott élt, hurokéleket pedig úgy, hogy a számpár kétszer tartalmazza ugyanazt a számot. Élek megadása Csúcspárokat a listához hasonló adatszerkezetben, a kés bb részletezett tuple-okban tároljuk. Lényegében attól tér el a listától, hogy módosíthatatlan: nem lehet hozzáf zni, elemét módosítani... Az el z feladatban szerepl hálózat éllistája így a következ lesz: edge_list = [(0,1), (0,1), (0,2), (1,2), (1,1)] PyOkt Olvassa el a Python-oktató 4. fejezetének 4.6 Függvények deniálása alfejezetét! Meghatározható-e a csúcsok fokszáma az éllistából? Írjon olyan függvényt, amely éllistát kapva az élek számával tér vissza! Megoldások A fokszámok meghatározhatóak az éllistából. Kivéve esetleg néhány nullás fokszámú csúcsot, mert nem tudjuk, hogy van-e olyan nagy index csúcs.. Alább (az igraph jelöléséhez igazodva ecount-tal (edge count) jelölve) megadtam az élszámot megadó függvényt. A függvényt elég könnyen létrehozhatjuk: def ecount(edge_list): return len(edge_list) print(ecount([(0,1), (0,1), (0,2), (1,2), (1,1)])) A fenti példában meg is hívtam a függvényt, és kiirattam a visszatérési értékét. Ebben a példában 5-öt ír ki. 5

Az assert utasítás A programok tesztelésére és argumentumainak vizsgálatára alkalmas az assert utasítás. Ha utána egy feltételt írok, akkor igaz érték esetén változatlanul megy tovább a program, hamis érték esetén pedig egy AssertionError kivétel lép fel. A feltétel után még vessz vel elválasztva írhatunk egy szöveget is, amit kiír a program az AssertionError kiírásával együtt. Például szeretnénk egy fokszámot visszaadó függvényt készíteni, akkor többek között a következ vizsgálatot írhatjuk hozzá: assert degree(0, [(0,1), (2,0)]) == 2, "hibás a fokszám" Hálózatos nyelvlecke A programok fejlesztése során az angol nyelvet fogjuk használni a saját változóink elnevezésére is. Pár szó angolul, amire hamarosan szükségünk lesz. magyar angol csúcs vertex, többes száma vertices él edge fokszám degree gráf graph hálózat network hurokél loop A csúcs másik angol neve a node, de mi az igraph-hoz igazodva a vertexet használjuk. Típusvizsgálat A Python nyelvben egy változó típusának szoktuk nevezni, hogy melyik osztály példányai. Pythonban minden érték valamilyen osztályból származik, az egész típus is. A típus megvizsgálására az isinstance függvény szolgál. Els paramétere a kifejezés, aminek a típusát vizsgáljuk, a második argumentuma egy osztály vagy több osztály tuple-ként. Nevezzük a degree függvény két paraméterét a következ képpen: vertex és edge_list. Az edge_list esetén engedjük meg a lista mellett a tuple alakot is. Ekkor a következ képpen vizsgálhatjuk meg a függvényen belül, hogy helyes típusú értéket kaptunk-e: assert isinstance(vertex, int), "vertex must be integer" assert isinstance(edge_list, (list, tuple)) Tesztelés A programok tesztelését egyel re assert utasítással fogjuk végezni. A teszteket egy test nev függvénybe gy jtjük össze, majd teszteléskor meghívjuk ezt a függvényt. def test(): assert degree(0, [(0,1), (2,0), (2,3)]) == 2 assert degree(1, [(0,1), (2,0), (2,3)]) == 1 assert degree(2, [(0,1), (2,0), (2,3)]) == 2 assert degree(3, [(0,1), (2,0), (2,3)]) == 1 print("a tesztek sikerültek") test() ok Hogyan lehetne rövidebben írni az el z test függvényt? Egészítse ki a test függvényt további feltételvizsgálatokkal! 6

Megoldás A két feladat megoldását összevontan mutatom meg. A példa második fele persze csak egy lehet ség a sok közül. def test(): edge_list = [(0,1), (2,0), (2,3)] degrees = [2,1,2,1] for i in range(4): assert degree(i, edge_list) == degrees[i] assert degree(20, edge_list) == 0 for i in range(3): assert degree(i, [(0,1), (0,2), (1,2)]) == 2 print("a tesztek sikerültek") Másolja be egy fájlba a teszteket és hozza létre a degree függvényt, hogy helyesen m ködjön! A létrehozott fájlt (benne a m köd függvénnyel) töltse fel az elearning oldalra! A következ feladat egy olyan neighbors függvény létrehozása, amely egy csúcs esetén a csúcs szomszédaival (egészek halmazával) tér vissza. A függvény m ködjön hurokélekre is, ilyenkor a csúcs legyen saját szomszédja. El ször hozzon létre egy fájlban teszteket! Hozza létre a függvényt, hogy helyesen m ködjön! A létrehozott fájlt (benne a tesztekkel és a m köd függvénnyel) elküldheti a kurzus oktatójának, aki szívesen ellen rzi és javaslatokat ad esetleges változtatásokra! Irányított hálózat éllistája Vajon hogyan lehet megadni éllistával egyirányított hálózatot? Az élek esetén mindig gyelünk rá, hogy elöl legyen az él forrása, és másodiknak szerepeljen a célja (ahol a nyíl van). 4. lecke A Python adatszerkezetei Tervezett id tartam 90 perc. Követelmények: A hallgató használni tudja a listaértelmezést, feltételekkel is és tuple-ekb l álló listák létrehozására is, képes gyakorlatban alkalmazni a tuple-ok és általában a sorozatok általános tulajdonságait, alkalmazni tudja a sorozatok szétpakolását, képes létrehozni halmazokat (üreset is), ellen rizni tudja, hogy egy objektum benne van-e a halmazban, létrehozni tudja hozni két halmaz különbségét, metszetét, unióját, alkalmazni tudja a halmazértelmezést, képes függvényt írni egy éllistában szerepl csúcsok számának meghatározására, ismeri a tanult típusokhoz tartozó osztályok neveit. PyOkt Olvassa el a Python-oktató 5. Adatszerkezetek cím fejezetét az 5.1.3. Listaértelmezés fejezett l az 5.6. Ciklustechnikák fejezetig (azt is beleértve). A Python hasznos adatszerkezeteivel ismerkedhet meg, és egy hasznos nyelvi elemmel (listaértelmezés, halmazértelmezés, szótárértelmezés). Megismerkedik a listák nem-módosítható párjával, a tuple-lal. A nem-módosítható objektumok hasznosak lesznek számunkra, mert olyan helyeken, ahol gyorsan meg kell keresnünk elemeket egy sokaságból, ott olyan adatszerkezeteket használunk, amelyekhez egy számot (hash érték) lehet rendelni, és ezalapján sorbarakni. Ilyenek a halmazok és a szótárak kulcsai. Egy 7

halmazban általában sokkal hamarabb meg lehet találni, hogy egy elem benne van-e, mint egy azonos elemszámú listában. Fontosabb típusok összesítve Az egyes blokkokban a számtípusok, a sorozattípusok és a gy jteményes típusok találhatóak. Az utolsó oszlopban az argumentum nélkül példányosított érték található. Például a dict() az üres {} szótárpéldánnyal tér vissza. int egész 0 oat lebeg pontos 0.0 complex komplex szám 0j str karakterlánc, sztring "" list lista [] tuple tuple (nem megváltoztatható lista) () set halmaz set() frozenset nem megváltoztatható halmaz frozenset() dict szótár {} Értékek logikai értékei A Pythonban a feltételek helyén nem csak logikai érték állhat, hanem az el z oldalon szerepl osztályból származó adatok is. A táblázat utolsó oszlopa azért is fontos, mert az ott szerepl értékeket a Python hamisnak tekinti, a többit igaznak. lista = [] if lista: print("van eleme.") else: print("nincs eleme.") Azt írja ki, hogy Nincs eleme. 5. lecke Szótárak, függvények b vebben Tervezett id tartam 90 perc. Követelmények: A hallgató létre tud hozni szótárakat hagyományos módon, szótárértelmezéssel és kulcsszavas argumentumokkal, ellen rizni tudja, hogy egy kulcs szerepel-e a szótárban, meg tudja változtatni adott kulcsú elemek értékét, képes végigmenni for ciklussal egy szótár kulcsain, illetve kulcs-érték párjain, képes meghatározni egy szótár kulcsainak a számát, képes függvényt írni a legnagyobb fokszámú csúcs meghatározására, meg tud adni alapértelmezett értékeket a függvény argumentumlistájában, használni tudja a kulcsszavas argumentumokat, létre tud hozni függvényt a tetsz leges hosszúságú argumentumlistákkal. PyOkt Olvassa el a Python-oktató 4.7.1. 4.7.3. fejezeteit a függvények deniálásáról, valamint az 5.5. Szótárak és 5.6. Ciklustechnikák fejezeteket, valamint a következ kiegészítéseket. A végén a követelmények, a következ feladatok és a teszt segítségével ellen rizze, hogy sikerült-e mindent megértenie. 8

Írjon egy olyan függvényt, amely meghatározza egy éllistában egy csúcs fokszámát! Pár teszt: edge_list = [(2,3), (1,2), (0,2)] assert degree(edge_list, 1) == 1 assert degree(edge_list, 2) == 3 assert degree(edge_list, 3) == 1 assert degree(edge_list, 4) == 0 Találjon ki további teszteket a függvény megírása el tt, vagy írjon tömörebb tesztkódot! M Megoldás jön! Lapozás el tt próbálja megoldani a feladatot! Megoldás (egy lehet ség) def degree(edge_list, vertex): degree = 0 for edge in edge_list: if vertex == edge[0]: degree += 1 if vertex == edge[1]: degree += 1 return degree A függvényen belül a változó értéke megegyezhet a függvény nevével (más névtérben vannak). Célszer lehet a visszatérési érték nevét a függvény nevével azonosnak választani. Megoldás: a tesztesetek egyszer sítése A sok hasonlóság miatt a teszteseteket jelent en átalakíthatjuk, és így könnyebben b víthetjük is. Az eredeti 4 esettel szemben itt hatot vizsgál. Természetesen lehetne több éllistára is vizsgálni egy dupla for-ciklussal. edge_list = [(2,3), (1,2), (0,2)] degrees = [1, 1, 3, 1, 0, 0] for vertex in range(len(degrees)): assert degree(edge_list, vertex) == degrees[vertex] Kulcsszavas paraméterek Kiegészítések A kulcsszavas paraméterek használata akkor praktikus, ha egy függvénynek rengeteg paramétere van, és azokat nem akarjuk mindet megadni függvényhíváskor, csak azokat, amelyek eltérnek az alapértelmezett l. Hasznosak azért is, mert ekkor nem kell tudni a paraméterek sorrendjét, és könnyebben módosítható a függvény úgy, hogy a függvényt felhasználó korábbi kódok érvényesek maradnak. Látjuk majd, hogy a függvények és gráfok kirajzolásakor a grakon és a gráf rengeteg paraméterét fogjuk tudni befolyásolni kulcsszavas paraméterrel. A kulcsszavas paramétereket ahogy a következd oldalon látjuk összegy jthetjük egy szótárban, a függvényünkben feldolgozhatjuk egy részüket, és a maradékot átadhatjuk más függvényeknek. Függvények csillagos paraméterei Kiegészítések Ha egy függvénydeníció els sora ez: def fv(x, *y, **z): akkor az els megadott paraméter az x változóba kerül, a többi kulcsszó nélküli paraméter az y nev tuple-ba, a kulcsszavas argumentumok pedig a z nev szótárba. 9

Kiegészítések Az el bb deniált függvényt ha így hívjuk meg: fv(1,2,3,4, color="red", width=5) akkor az x, y és z paraméterek értékei a következ ek lesznek: x = 1 y = (2,3,4) z = {"color": "red", "width": 5} Csillagok a függvényhívásban Kiegészítések A kulcsszó nélküli paramétereket (vagy azok egy részét) kicsomagolhatjuk listából vagy tuple-b l a * el ttaggal, a kulcsszavasakat pedig szótárból a ** el taggal. A fenti függvényhívással egyeznek a következ ek is: L = [1,2,3,4] d = {"color": "red", "width": 5} fv(*l, **d) fv(1, 2, *(3,4), **{"color": "red", "width": 5}) ok Mik lesznek az egyes paraméterek értékei az fv függvényt alábbi hívásai esetén? fv("alma", 2, 4, start=2, stop=5) fv(2, size=2, width=5) fv(2) ok fv("alma", 2, 4, start=2, stop=5) esetén x="alma" y=(2,4), z={"start":2, "stop":5} fv(2, size=2, width=5) esetén x=2, y=(), z={"size":2, "width":5} azaz y üres tuple lesz fv(2) esetén x=2, y üres tuple, z üres szótár lesz ok Legyen az esemenyek a következ képp létrehozva: esemenyek = {1421:'muhi csata', 1456:'nándorfehérvári viadal', 1848:'szabadságharc kezdete', 1956:'forradalom', } Határozza meg egy kifejezéssel a szótár kulcsainak számát! Írassa ki kétféleképpen az értékpárokat: (a) a kulcsokon menjen végig a ciklussal, (b) az értékpárokon menjen végig a ciklussal! Hozzon létre üres szótárat és üres halmazt. 10

Megoldások len(esemenyek) vagy len(esemenyek.keys()) for ev in esemenyek: print(ev, esemenyek[ev]) for ev, esemeny in esemenyek: print(ev, esemeny) Üres szótár: {} vagy dict() Üres halmaz: set() Jó módszer Az alábbi szótárban az utolsó elem után is áll egy vessz. esemenyek = { 1848:'szabadságharc kezdete', 1956:'forradalom', } Ez felesleges, de ha tovább akarom folytatni a szótárat, akkor egyszer bb, mert rögtön a következ sorban kezdhetem. Ugyanez m ködik listával, tuple-lel és halmazzal is. edge_list = [ (0, 1), (0, 3), ] Válassza ki, mi lehet kulcs egy szótárban az alábbiak közül? 1 "alma" [1,2] (1,2) {1,2} {1:0, 2:1} Megoldás Megváltoztatható objektumok nem lehetnek. 1 lehet "alma" lehet [1,2] nem lehet (van append metódusa) (1,2) lehet {1,2} nem lehet (van add metódusa) {1:0, 2:1} nem lehet (új kulcs-érték párt adhatunk hozzá) A halmazoknak is van egy nem megváltoztatható változata, ami lehet kulcs: frozenset({1, 2}) frozenset("alma") 11

Az alább létrehozunk egy függvényt, majd a függvényt többször meghívjuk, melyik lesz helyes, mit ír ki akkor? def szorzat(eredmeny, *tenyezok, **szotar): print(*tenyezok, sep=' * ', end=' = ') print(eredmeny) print(set(szotar)) szorzat(10, 5, 2, x=10) szorzat(10) szorzat(10, x=10, 5, 2) szorzat(10, *(5, 2), primtenyezok=true) szorzat(10, 5, 2, eredmeny=10) szorzat(10, 5, 2, **dict(alma=7)) Megoldás szorzat(10, 5, 2, x=10) ezt írja: 5 * 2 = 10 {"x"} szorzat(10) ezt írja: = 10 set() szorzat(10, x=10, 5, 2) hibás, kulcsszavasoknak a végén kell állniuk szorzat(10, *(5, 2), primtenyezok=true) ezt írja: 5 * 2 = 10 {"primtenyezok"} szorzat(10, 5, 2, eredmeny=10) hibás, eredmeny-nek két értéke van szorzat(10, 5, 2, **dict(alma=7)) ezt írja: 5 * 2 = 10 {"alma"} Gratulálunk! Ezzel a modul leckéit sikeresen teljesítette. Ami még modulzáró feladatként hátra van: a modulzáró teszt megoldása és a Python alkalmazási területei fórumfeladat. 12