2. modul Python bevezetés Horváth Árpád 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.
Feladatok
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 IDLE3ban! 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®.
Feladat 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
m¶veleteket,
képes használni az alulvonás
típusú számokat, képes alkalmazni a 4 alapm¶velet és a
_
//
és
**
é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, képes feltételes elágazás létrehozására, az képes
while
és
for
ciklus értelmezésére és
nálatával is,
•
képes a
range()
függvény használatára
sep) használatára. else ágak használatára, létrehozására, akár break és continue
elif
és
utasítások hasz-
for-ciklusban.
Feladatok 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ó sor végét
" ="
" + "
(szóköz+plusz+szóköz) lesz, a
(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? segítségével!
3
Próbálja meg kideríteni az ipython3
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.
Feladat 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. az csúcsok azonosítására egész számokat fogunk használni. csúcsokat 0 és
N −1
Ha
N
Mi a továbbiakban
csúcsa van a hálózatnak, akkor az
közé es® egészek fogják jelölni. Az éllista elemei tehát számpárok lesznek.
4
Feladatok 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
többszörös él 0
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
Feladat
Olvassa el a Python-oktató 4. fejezetének
4.6 Függvények deniálása
alfejezetét!
Feladat 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 esetén engedjük meg a lista mellett a tuple alakot is.
edge_list.
Az
edge_list
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 vénybe gy¶jtjük össze, majd teszteléskor meghívjuk ezt a függvényt.
test() Feladatok 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
test
nev¶ függ-
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") Feladat 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!
Feladat 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.
PyOkt5.6. Ciklustechnikák
Feladat
Olvassa el a Python-oktató
fejezett®l az
5. Adatszerkezetek
cím¶ fejezetét az
5.1.3. Listaértelmezés
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.
7
Ilyenek a halmazok és a szótárak kulcsai.
Egy
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. utolsó oszlopban az argumentum nélkül példányosított érték található.
Az
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 5.5. Szótárak és 5.6.
Feladat
4.7.1. 4.7.3. fejezeteit a függvények deniálásáról, vaCiklustechnikák fejezeteket, valamint a következ® kiegészítéseket. A
Olvassa el a Python-oktató
lamint az
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
Feladat Í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.
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 tuple-ba, a kulcsszavas argumentumok pedig a
z
nev¶ szótárba.
9
y
nev¶
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}) Feladatok 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) 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 Feladatok 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), ] Feladat Válassza ki, mi lehet kulcs egy szótárban az alábbiak közül?
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
Feladat 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?
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