avagy python a mobilon -...

50
PyS60 PyS60 ...avagy Python a mobilon ...avagy Python a mobilon

Upload: lydung

Post on 11-Aug-2019

250 views

Category:

Documents


0 download

TRANSCRIPT

PyS60PyS60

...avagy Python a mobilon...avagy Python a mobilon

2010/11. tavasz [email protected]

1. rész: Python alapok

2010/11. tavasz [email protected]

ÁÁttekintttekintééssA nyelv tA nyelv töörtrtééneteneteAlapvetAlapvetőő tudnivaltudnivalóókkSzintaxisSzintaxisNNééhháány egyszerny egyszerűű ppééldalda

2010/11. tavasz [email protected]

ÁÁttekintttekintééssA nyelv tA nyelv töörtrtééneteneteAlapvetAlapvetőő tudnivaltudnivalóókkSzintaxisSzintaxisNNééhháány egyszerny egyszerűű ppééldalda

2010/11. tavasz [email protected]

A nyelv tA nyelv töörtrtééneteneteGuido van Rossum,Guido van Rossum,CWI (Centrum voor Wiskunde en CWI (Centrum voor Wiskunde en Informatica), Amszterdam, HollandiaInformatica), Amszterdam, Hollandia1989. december1989. december implementimplementáácicióó kezdetekezdete1990.1990. nem publikus kiadnem publikus kiadáások (CWI)sok (CWI)1991. febru1991. februáárr 0.9.0 (els0.9.0 (elsőő publikus verzipublikus verzióó))1994. janu1994. januáárr 1.0.01.0.02000. okt2000. októóberber 2.0.02.0.02008. december2008. december 3.0.03.0.02011. febru2011. februáárr 3.2 (legfrissebb)3.2 (legfrissebb)

2010/11. tavasz [email protected]

Az AlkotAz Alkotóó““Benevolent Dictator for LifeBenevolent Dictator for Life”” (BDFL)(BDFL)

2010/11. tavasz [email protected]

ImplementImplementáácicióókkCPythonCPythonJython (Java Virtual Machine)Jython (Java Virtual Machine)IronPython (.NET Common Language IronPython (.NET Common Language Runtime)Runtime)Pyjamas (Javascript)Pyjamas (Javascript)PyS60 (Symbian Series 60)PyS60 (Symbian Series 60)PythonCE (Windows CE)PythonCE (Windows CE)stb.stb.

2010/11. tavasz [email protected]

A nyelv elnevezA nyelv elnevezéésese

2010/11. tavasz [email protected]

ÁÁttekintttekintééssA nyelv tA nyelv töörtrtééneteneteAlapvetAlapvetőő tudnivaltudnivalóókkSzintaxisSzintaxisNNééhháány egyszerny egyszerűű ppééldalda

2010/11. tavasz [email protected]

A Python...A Python...ááltalltaláános cnos cééllúú,,magas szintmagas szintűű,,objektumorientobjektumorientáált,lt,ttööbbfbbfééle programozle programozáási paradigmsi paradigmáát t ttáámogatmogatóó,,platformfplatformfüüggetlenggetlen

...programoz...programozáási nyelv.si nyelv.

2010/11. tavasz [email protected]

AlapvetAlapvetőő tudnivaltudnivalóókkA JavaA Java--hoz hasonlhoz hasonlóóan kan kööztes kztes kóódot (bytekdot (bytekóódot) dot) futtat az interpreter.futtat az interpreter.A standard kA standard kóódkdköönyvtnyvtáár szr száámos megvalmos megvalóóssíított tott funkcifunkcióót tartalmaz (+ neten talt tartalmaz (+ neten taláálhatlhatóómegoldmegoldáások!).sok!).A nyelvet elA nyelvet előőszeretettel hasznszeretettel hasznááljljáák prototk prototíípus pus fejlesztfejlesztéésre (gyors, egyszersre (gyors, egyszerűű).).Python Software Foundation License (GNU Python Software Foundation License (GNU GPL kompatibilis, FSF GPL kompatibilis, FSF éés OSI s OSI ááltal elismert)ltal elismert)

2010/11. tavasz [email protected]

Modern, OO eszkModern, OO eszköözzöökkOsztOsztáályok, objektumoklyok, objektumokÖÖrrööklklőőddééssAutomatikus szemAutomatikus szeméétgytgyűűjtjtéés (garbage s (garbage collection)collection)Dinamikus tDinamikus tíípusmeghatpusmeghatáározrozáás (late s (late binding)binding)KivKivéételkezeltelkezelééssUnicode tUnicode táámogatmogatááss

2010/11. tavasz [email protected]

ÁÁttekintttekintééssA nyelv tA nyelv töörtrtééneteneteAlapvetAlapvetőő tudnivaltudnivalóókkSzintaxisSzintaxisNNééhháány egyszerny egyszerűű ppééldalda

2010/11. tavasz [email protected]

SzintaxisSzintaxis•• EltEltéérréés az eddig megszokott nyelvekts az eddig megszokott nyelvektőől:l:

nincs sznincs szüükskséég a vg a vááltozltozóók deklark deklaráálláássááraraa sorok va sorok vééggéén nincs pontosvesszn nincs pontosvesszőőa blokkok szerveza blokkok szervezéése behse behúúzzáásalapsalapúú(nincs kapcsosz(nincs kapcsoszáárróójel!)jel!)minden vminden vááltozltozóó egy adott objektumra mutategy adott objektumra mutatóóreferenciareferenciaéértrtéékadkadáás, params, paramééterteráátadtadáás nem mindig a s nem mindig a megszokott mmegszokott móódon mdon műűkköödik!dik!

2010/11. tavasz [email protected]

TokenekTokenekWhitespace karakterrel elvWhitespace karakterrel elváálasztvalasztvaFajtFajtáái: azonosi: azonosííttóó, kulcssz, kulcsszóó, oper, operáátor, tor, delimiter, literdelimiter, literáállAz azonosAz azonosííttóó kezdkezdőődhet betdhet betűűvel vagy vel vagy alulvonalulvonáással, szerepelhet benne szssal, szerepelhet benne száámjegy mjegy is, a kisis, a kis-- éés nagybets nagybetűűket ket megkmegküüllöönbnbööztetjztetjüükkLefoglalt kulcsszavak pl.: assert, exec, Lefoglalt kulcsszavak pl.: assert, exec, lambda, pass, raise, yieldlambda, pass, raise, yield

2010/11. tavasz [email protected]

TTíípusok pusok éés vs vááltozltozóókkTTíípusok: szpusok: száámok, stringek, nmok, stringek, n--esek (tuple), esek (tuple), listlistáák, szk, szóóttáárak (dictionary)rak (dictionary)Null Null éértrtéék neve: Nonek neve: NoneLogikai Logikai éértrtéékkkkéént minden tnt minden tíípus pus hasznhasznáálhatlhatóó(0, None, (0, None, üüres string, nulla elemres string, nulla eleműűgygyűűjtemjteméény => False)ny => False)ÉÉrtrtéékadkadáás: =s: =ÖÖsszehasonlsszehasonlííttáás: ==s: ==

2010/11. tavasz [email protected]

TTíípusok pusok éés vs vááltozltozóók (folytatk (folytatáás)s)VVááltozltozóó--objektum objektum öösszerendelsszerendeléés s megszmegszüüntetntetéése: delse: delGlobGlobáális lis éés loks lokáális vlis vááltozltozóókk(f(füüggvggvéényben felvett vnyben felvett vááltozltozóóalapalapéértelmezetten lokrtelmezetten lokáális!)lis!)

2010/11. tavasz [email protected]

SzSzáámokmokDecimDecimáálislisOktOktáális (bevezetlis (bevezetőő 0)0)HexadecimHexadecimáális (bevezetlis (bevezetőő 0x)0x)LebegLebegőőpontos (x.yez => x,y * 10pontos (x.yez => x,y * 10zz))String String →→ szszáám konverzim konverzióó::int('int('stringstring', ', szszáámrendszermrendszer))

2010/11. tavasz [email protected]

SzekvenciSzekvenciáákkstringekstringek

""szszöövegveg" vagy '" vagy 'szszööveg veg ''Unicode string: u"Unicode string: u"szszöövegveg""

nn--esek (vektor)esek (vektor)('a' , 'b' , 'c') vagy ak('a' , 'b' , 'c') vagy akáár ('a' , "szia" , 3)r ('a' , "szia" , 3)tuple('abc')tuple('abc')( )( )

2010/11. tavasz [email protected]

SzekvenciSzekvenciáákklistlistáákk

['a' , 'b' , 'c'] vagy ak['a' , 'b' , 'c'] vagy akáár ['a' , "szia" , 3]r ['a' , "szia" , 3]list('abc')list('abc')[ ][ ]rendezett szekvenciarendezett szekvencia

2010/11. tavasz [email protected]

A listA listáák fk füüggvggvéényeinyeiindex(e) index(e) –– 'e' els'e' elsőő elelőőfordulforduláássáának indexenak indexeappend(e) append(e) –– 'e' hozz'e' hozzááffűűzzéése a lista se a lista vvééggééhezhezinsert(i,e) insert(i,e) –– 'e' besz'e' beszúúrráása az isa az i--edik helyreedik helyreremove(e) remove(e) –– 'e' els'e' elsőő elelőőfordulforduláássáának nak ttöörlrléésesepop([i]) pop([i]) –– az iaz i--edik elemet kiveszi a edik elemet kiveszi a listlistáábbóól l éés visszaadja az s visszaadja az éértrtéékkééttstb.stb.

2010/11. tavasz [email protected]

ListListáák generk generáálláásasaA range fA range füüggvggvéény segny segíítstsééggéével tvel töörtrtéénik.nik.range(trange(tóól, ig, ll, ig, lééppééskskööz)z)PPééldldáák:k:

range(3)range(3) =>=> [0 , 1 , 2][0 , 1 , 2]range(1,3)range(1,3) =>=> [1 , 2][1 , 2]range(1,6,2)range(1,6,2) =>=> [1 , 3 , 5][1 , 3 , 5]

2010/11. tavasz [email protected]

SzSzóóttáárakrak"Kulcsokkal azonos"Kulcsokkal azonosíított elemek tott elemek rendezetlen halmaza."rendezetlen halmaza."{1: 'a' , 2: 'b' , 4: 'd'}{1: 'a' , 2: 'b' , 4: 'd'}FFüüggvggvéényei:nyei:

haskey(k)haskey(k)get(k), get(k,x)get(k), get(k,x)items(), keys(), values()items(), keys(), values()iteritems(), iterkeys(), itervalues()iteritems(), iterkeys(), itervalues()

2010/11. tavasz [email protected]

ElEláágazgazáássA blokkokat csak behA blokkokat csak behúúzzáással jelssal jelööljljüük, k, nincs znincs záárróójel!jel!PPéélda:lda:if szam>0:if szam>0:……

elif szam<0:elif szam<0:……

else:else:......

2010/11. tavasz [email protected]

CiklusokCiklusok"for" szerkezet"for" szerkezet

"foreach" jelleg"foreach" jellegűű szintaktikaszintaktika PPééldldáák:k:

for x in lista:for x in lista:print xprint x

for kulcs, ertek in szotar.items():for kulcs, ertek in szotar.items():print kulcs, ' print kulcs, ' -- ', ertek', ertek

A "klasszikus" for ciklus:A "klasszikus" for ciklus:for i in xrange(for i in xrange(ttóól, ig, ll, ig, lééppéésksköözz):):print i, ' , 'print i, ' , '

2010/11. tavasz [email protected]

Ciklusok (folytatCiklusok (folytatáás)s)"while" szerkezet"while" szerkezetA megszokott logika szerint mA megszokott logika szerint műűkköödik.dik.PPéélda:lda:i=0i=0while i<3:while i<3:print iprint ii=i+1i=i+1

2010/11. tavasz [email protected]

Fibonacci sorozatFibonacci sorozat

a, b = 0, 1a, b = 0, 1while b < 10:while b < 10:print bprint ba, b = b, a+ba, b = b, a+b

2010/11. tavasz [email protected]

FFüüggvggvéényeknyek"def" kulcssz"def" kulcsszóóEgy visszatEgy visszatéérréési si éértrtéék, de visszaadhat nk, de visszaadhat n--eseket is.eseket is.PPéélda:lda:def hello():def hello():

print "Hello World!"print "Hello World!"returnreturn

2010/11. tavasz [email protected]

Lambda fLambda füüggvggvéényeknyek"On the fly" f"On the fly" füüggvggvéények, aknyek, akáár nr néév nv néélklküül l is.is.Nincs "return"!!!Nincs "return"!!!Egyetlen kifejezEgyetlen kifejezéés lehet a ts lehet a töörzse.rzse.Mindig kell legyen visszatMindig kell legyen visszatéérréési si éértrtééke.ke.

2010/11. tavasz [email protected]

Lambda fLambda füüggvggvéények 2.nyek 2.PPééldldáák:k:lambda a, b: a+blambda a, b: a+b

negyzet = lambda x: x**2negyzet = lambda x: x**2print negyzet(8)print negyzet(8)

lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print filter(lambda x: x % 3 == 0, lista)print filter(lambda x: x % 3 == 0, lista)

2010/11. tavasz [email protected]

Lambda fLambda füüggvggvéények 3.nyek 3.Egy Egy öösszetett psszetett péélda:lda:def make_incrementor(n):def make_incrementor(n):

return lambda x: x + nreturn lambda x: x + n

f = make_incrementor(2)f = make_incrementor(2)print f(10)print f(10)

Mi is tMi is töörtrtéénik itt?nik itt?Mit fog kiMit fog kiíírni a print frni a print füüggvggvéény?ny?

2010/11. tavasz [email protected]

OsztOsztáályoklyokclass class osztosztáálynlynéévv ((őősosztsosztáályoklyok):):

osztosztáálytlytöörzsrzsTTööbbszbbszöörröös s öörrööklklőőddéés van, interfs van, interféészek szek nincsenek!nincsenek!Az osztAz osztáály metly metóódusainak kdusainak kööteleztelezőőparamparaméétere a self (szerepe, mint a tere a self (szerepe, mint a thisthis).).SpeciSpeciáális metlis metóódus: a konstruktor.dus: a konstruktor.def __init__(self, def __init__(self, ttööbbi_parambbi_paramééterekterek):):

......

2010/11. tavasz [email protected]

OsztOsztáályok attriblyok attribúútumaitumaiAttribAttribúútumot adhatunk az oszttumot adhatunk az osztáályhoz lyhoz éés s kköözvetlenzvetlenüül az egyes objektum l az egyes objektum ppééldldáányokhoz is.nyokhoz is.Ha egy osztHa egy osztáály adott attribly adott attribúútumtumáát t megvmegvááltoztatjuk, az hatltoztatjuk, az hatáással lesz az ssal lesz az öösszes olyan psszes olyan pééldldáány adott attribny adott attribúútumtumáára, ra, ahol azt mahol azt méég nem vg nem vááltoztattuk meg ltoztattuk meg ppééldldáány szinten.ny szinten.

2010/11. tavasz [email protected]

KivKivéételkezeltelkezelééssLogikLogikáája a megszokott.ja a megszokott.Nem kNem kööteleztelezőő megadni a kivmegadni a kivéétel ttel tíípuspusáát.t.OpcionOpcionáálisan klisan köövetkezhet egy "else" vetkezhet egy "else" éés s egy "finally" egy "finally" áág is.g is.PPéélda:lda:try:try:1/01/0

except ZeroDivisionError:except ZeroDivisionError:print "Nullprint "Nulláával nem osztunk!"val nem osztunk!"

2010/11. tavasz [email protected]

EgyebekEgyebekMegjegyzMegjegyzéések: #sek: #(a sor v(a sor vééggééig ig éérvrvéényes)nyes)TTööbb soros utasbb soros utasííttáásoksok

Sor vSor vééggéén 'n '\\' (backslash)' (backslash)Ha nem zHa nem záártuk be a nyitott zrtuk be a nyitott záárróójelet, a jelet, a kköövetkezvetkezőő sort automatikusan folytatsort automatikusan folytatóósornak veszi.sornak veszi.

2010/11. tavasz [email protected]

ÁÁttekintttekintééssA nyelv tA nyelv töörtrtééneteneteAlapvetAlapvetőő tudnivaltudnivalóókkSzintaxisSzintaxisNNééhháány egyszerny egyszerűű ppééldalda

Hello World!Hello World!

print "Hello World!"print "Hello World!"

For ciklusFor ciklus

szotar = {1:"egyik", 2:"masik", 3:"harmadik"}szotar = {1:"egyik", 2:"masik", 3:"harmadik"}for kulcs, ertek in szotar.items():for kulcs, ertek in szotar.items():

print kulcs, "print kulcs, "--", ertek", ertek

for szam in xrange(1,21):for szam in xrange(1,21):print szam,print szam,

While ciklus, kivWhile ciklus, kivéételektelektry:try:

while i<10:while i<10:print i,print i,i=i+2i=i+2

except:except:print "Hiba!"print "Hiba!"

While ciklus, kivWhile ciklus, kivéételektelektry:try:

i=0i=0while i<10:while i<10:print i,print i,i=i+2i=i+2

except:except:print "Hiba!"print "Hiba!"

Lista szLista szűűrréése, lambda se, lambda ffüüggvggvéényeknyek

lista = range(1,21)lista = range(1,21)print filter(lambda x: x % 4 == 0, lista)print filter(lambda x: x % 4 == 0, lista)

Lambda fLambda füüggvggvéényny

def make_increment(n):def make_increment(n):return lambda x: x+nreturn lambda x: x+n

f = make_increment(5)f = make_increment(5)g= make_increment(3)g= make_increment(3)print f(10)print f(10)print g(10)print g(10)

FeladatFeladatKKéészszíítstsüünk oszthatnk oszthatóóssáágot vizsggot vizsgáállóó

ffüüggvggvéényt.nyt.GenerGenerááljunk egy 1ljunk egy 1--ttőől 50l 50--ig terjedig terjedőőszszáámlistmlistáát, szt, szűűrjrjüük ki az elkk ki az elkéészszíített tett

ffüüggvggvéény segny segíítstsééggéével a hvel a háárommal / rommal / nnééggyel / ggyel / ööttel / httel / hééttel / kilenccel oszthatttel / kilenccel oszthatóó

szszáámokat.mokat.

MegoldMegoldáássdef oszthatosag(mivel):def oszthatosag(mivel):

return lambda n: n % mivel ==0return lambda n: n % mivel ==0lista = range(1,51)lista = range(1,51)print "3print "3--mal:", filter(oszthatosag(3),lista)mal:", filter(oszthatosag(3),lista)print "4print "4--gyel:", filter(oszthatosag(4),lista)gyel:", filter(oszthatosag(4),lista)print "5print "5--tel:", filter(oszthatosag(5),lista)tel:", filter(oszthatosag(5),lista)print "7print "7--tel:", filter(oszthatosag(7),lista)tel:", filter(oszthatosag(7),lista)print "9print "9--cel:", filter(oszthatosag(9),lista)cel:", filter(oszthatosag(9),lista)

2010/11. tavasz [email protected]

Minimalista megoldMinimalista megoldááss

def oszthatosag(mivel):def oszthatosag(mivel):return lambda n: n % mivel ==0return lambda n: n % mivel ==0

for i in [3,4,5,7,9]:for i in [3,4,5,7,9]:print i,":", print i,":", filter(oszthatosag(i),range(1,51))filter(oszthatosag(i),range(1,51))

AbszolAbszolúút minimalista megoldt minimalista megoldááss

for i in [3,4,5,7,9]:for i in [3,4,5,7,9]:print i,":", filter(print i,":", filter(lambda n: n % i ==0lambda n: n % i ==0, range(1,51)), range(1,51))

2010/11. tavasz [email protected]

Feladat2Feladat2

GenerGeneráálj 20 db vlj 20 db vééletlenszletlenszáámot 0 mot 0 éés 10 s 10 kköözzöött! tt! ÍÍrd ki, melyik szrd ki, melyik száámbmbóól hl háány darab ny darab van a listvan a listáában!ban!

# v# vééletlenszletlenszáám generm generáálláás: random moduls: random modul

2010/11. tavasz [email protected]

MegoldMegoldááss

import randomimport randomlista=[]lista=[]for i in xrange(20):for i in xrange(20):

lista.append(random.randint(0,10))lista.append(random.randint(0,10))print listaprint listafor i in xrange(10):for i in xrange(10):

print i,print i,””: : ””, lista.count(i), lista.count(i)# vagy: print i,# vagy: print i,””: : ””, len(filter(lambda x: x==i, lista)), len(filter(lambda x: x==i, lista))

2010/11. tavasz [email protected]

2010/11. tavasz [email protected]

TovTováábbi anyagokbbi anyagokhttp://www.python.org/http://www.python.org/http://opensource.nokia.com/projects/pythttp://opensource.nokia.com/projects/pythonfors60honfors60http://mobilenin.com/pys60/menu.htmhttp://mobilenin.com/pys60/menu.htmhttp://www.forum.nokia.com/Tools_Docs_http://www.forum.nokia.com/Tools_Docs_and_Code/Tools/Runtimes/Python_for_S6and_Code/Tools/Runtimes/Python_for_S60/0/

2010/11. tavasz [email protected]

TovTováábbi anyagokbbi anyagokKKöönyvek:nyvek:

Mark Pilgrim: Mark Pilgrim: Dive Into PythonDive Into PythonForstnerForstner--EklerEkler--KelKeléényi: nyi: BevezetBevezetéés a mobilprogramozs a mobilprogramozáásbasba