avagy python a mobilon -...

Post on 11-Aug-2019

250 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

PyS60PyS60

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

2010/11. tavasz 2nagy.gabriella@nik.uni-obuda.hu

1. rész: Python alapok

2010/11. tavasz 3nagy.gabriella@nik.uni-obuda.hu

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

2010/11. tavasz 4nagy.gabriella@nik.uni-obuda.hu

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

2010/11. tavasz 5nagy.gabriella@nik.uni-obuda.hu

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 6nagy.gabriella@nik.uni-obuda.hu

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

2010/11. tavasz 7nagy.gabriella@nik.uni-obuda.hu

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 8nagy.gabriella@nik.uni-obuda.hu

A nyelv elnevezA nyelv elnevezéésese

2010/11. tavasz 9nagy.gabriella@nik.uni-obuda.hu

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

2010/11. tavasz 10nagy.gabriella@nik.uni-obuda.hu

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 11nagy.gabriella@nik.uni-obuda.hu

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 12nagy.gabriella@nik.uni-obuda.hu

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 13nagy.gabriella@nik.uni-obuda.hu

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

2010/11. tavasz 14nagy.gabriella@nik.uni-obuda.hu

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 15nagy.gabriella@nik.uni-obuda.hu

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 16nagy.gabriella@nik.uni-obuda.hu

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 17nagy.gabriella@nik.uni-obuda.hu

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 18nagy.gabriella@nik.uni-obuda.hu

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 19nagy.gabriella@nik.uni-obuda.hu

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 20nagy.gabriella@nik.uni-obuda.hu

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 21nagy.gabriella@nik.uni-obuda.hu

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 22nagy.gabriella@nik.uni-obuda.hu

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 23nagy.gabriella@nik.uni-obuda.hu

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 24nagy.gabriella@nik.uni-obuda.hu

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 25nagy.gabriella@nik.uni-obuda.hu

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 26nagy.gabriella@nik.uni-obuda.hu

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 27nagy.gabriella@nik.uni-obuda.hu

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 28nagy.gabriella@nik.uni-obuda.hu

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 29nagy.gabriella@nik.uni-obuda.hu

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 30nagy.gabriella@nik.uni-obuda.hu

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 31nagy.gabriella@nik.uni-obuda.hu

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 32nagy.gabriella@nik.uni-obuda.hu

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 33nagy.gabriella@nik.uni-obuda.hu

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 34nagy.gabriella@nik.uni-obuda.hu

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 35nagy.gabriella@nik.uni-obuda.hu

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 36nagy.gabriella@nik.uni-obuda.hu

ÁÁ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 45nagy.gabriella@nik.uni-obuda.hu

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 46nagy.gabriella@nik.uni-obuda.hu

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 47nagy.gabriella@nik.uni-obuda.hu

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 48nagy.gabriella@nik.uni-obuda.hu

2010/11. tavasz 49nagy.gabriella@nik.uni-obuda.hu

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 50nagy.gabriella@nik.uni-obuda.hu

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

top related