avagy python a mobilon -...

Post on 11-Aug-2019

220 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ééss

A nyelv tA nyelv töörtrtéénetenete

AlapvetAlapvetőő tudnivaltudnivalóókk

SzintaxisSzintaxis

NNééhháány egyszerny egyszerűű ppééldalda

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

ÁÁttekintttekintééss

A nyelv tA nyelv töörtrtéénetenete

AlapvetAlapvetőő tudnivaltudnivalóókk

SzintaxisSzintaxis

NNééhháány egyszerny egyszerűű ppééldalda

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

A nyelv tA nyelv töörtrtéénetenete

Guido van Rossum,Guido van Rossum,CWI (Centrum voor Wiskunde en Informatica), CWI (Centrum voor Wiskunde en Informatica), Amszterdam, HollandiaAmszterdam, 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óókk

CPythonCPython

Jython (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ééss

A nyelv tA nyelv töörtrtéénetenete

AlapvetAlapvetőő tudnivaltudnivalóókk

SzintaxisSzintaxis

NNéé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 tt táámogatmogatóó,,

platformfplatformfüüggetlenggetlen

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

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

AlapvetAlapvetőő tudnivaltudnivalóókk

A 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öökk

OsztOsztáályok, objektumoklyok, objektumok

ÖÖrrööklklőőddééss

Automatikus szemAutomatikus szeméétgytgyűűjtjtéés (garbage s (garbage collection)collection)

Dinamikus tDinamikus tíípusmeghatpusmeghatáározrozáás (late binding)s (late binding)

KivKivéételkezeltelkezelééss

Unicode tUnicode táámogatmogatááss

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

ÁÁttekintttekintééss

A nyelv tA nyelv töörtrtéénetenete

AlapvetAlapvetőő tudnivaltudnivalóókk

SzintaxisSzintaxis

NNéé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áárara

a 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

TokenekTokenek

Whitespace karakterrel elvWhitespace karakterrel elváálasztvalasztva

FajtFajtáái: azonosi: azonosííttóó, kulcssz, kulcsszóó, oper, operáátor, delimiter, tor, delimiter, literliterááll

Az azonosAz azonosííttóó kezdkezdőődhet betdhet betűűvel vagy vel vagy alulvonalulvonáással, szerepelhet benne szssal, szerepelhet benne száámjegy is, a mjegy is, a kiskis-- éés nagybets nagybetűűket megkket megküüllöönbnbööztetjztetjüükk

Lefoglalt kulcsszavak pl.: assert, exec, lambda, Lefoglalt kulcsszavak pl.: assert, exec, lambda, pass, raise, yieldpass, raise, yield

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

TTíípusok pusok éés vs vááltozltozóókk

TTíí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: None

Logikai Logikai éértrtéékkkkéént minden tnt minden tíípus hasznpus hasznáálhatlhatóó(0, None, (0, None, üüres string, nulla elemres string, nulla eleműű gygyűűjtemjteméény ny => False)=> 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: del

GlobGlobáális lis éés loks lokáális vlis vááltozltozóókk(f(füüggvggvéényben felvett vnyben felvett vááltozltozóó alapalapéértelmezetten rtelmezetten loklokáális!)lis!)

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

SzSzáámokmok

DecimDecimáálislis

OktOktáá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áákk

stringekstringek""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áákk

listlistáá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éényeinyei

index(e) index(e) –– 'e' els'e' elsőő elelőőfordulforduláássáának indexenak indexe

append(e) append(e) –– 'e' hozz'e' hozzááffűűzzéése a lista vse a lista vééggééhezhez

insert(i,e) insert(i,e) –– 'e' besz'e' beszúúrráása az isa az i--edik helyreedik helyre

remove(e) remove(e) –– 'e' els'e' elsőő elelőőfordulforduláássáának tnak töörlrléésese

pop([i]) pop([i]) –– az iaz i--edik elemet kiveszi a listedik elemet kiveszi a listáábbóól l éés s visszaadja az visszaadja az éértrtéékkéétt

stb.stb.

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

ListListáák generk generáálláásasa

A 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 rendezetlen tott elemek rendezetlen halmaza."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ááss

A blokkokat csak behA blokkokat csak behúúzzáással jelssal jelööljljüük, nincs k, nincs zzáá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 xfor 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" szerkezet

A 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 eseket is.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 is.l 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áályoklyok

class class osztosztáálynlynéévv ((őősosztsosztáályoklyok):):osztosztáálytlytöörzsrzs

TTöö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 tere a self (szerepe, mint 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úútumaitumai

AttribAttribúútumot adhatunk az oszttumot adhatunk az osztáályhoz lyhoz éés s kköözvetlenzvetlenüül az egyes objektum pl az egyes objektum pééldldáányokhoz nyokhoz is.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 sszes olyan polyan pééldldáány adott attribny adott attribúútumtumáára, ahol azt ra, ahol azt mméég nem vg nem vááltoztattuk meg pltoztattuk meg pééldldáány szinten.ny szinten.

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

KivKivéételkezeltelkezelééss

LogikLogikáá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 egy s egy "finally" "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

EgyebekEgyebek

MegjegyzMegjegyzéések: #sek: #(a sor v(a sor vééggééig ig éérvrvéényes)nyes)

TTööbb soros utasbb soros utasííttáásoksokSor vSor vééggéén 'n '\\' (backslash)' (backslash)

Ha nem zHa nem záártuk be a nyitott zrtuk be a nyitott záárróójelet, a kjelet, a köövetkezvetkezőősort automatikusan folytatsort automatikusan folytatóó sornak veszi.sornak veszi.

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

ÁÁttekintttekintééss

A nyelv tA nyelv töörtrtéénetenete

AlapvetAlapvetőő tudnivaltudnivalóókk

SzintaxisSzintaxis

NNéé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=0

while 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)

FeladatFeladat

KKéé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, t, szszűűrjrjüük ki az elkk ki az elkéészszíített ftett füüggvggvéény segny segíítstsééggéével a vel a hháárommal / nrommal / nééggyel / ggyel / ööttel / httel / hééttel / kilenccel ttel / kilenccel

oszthatoszthatóó szszáámokat.mokat.

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

return lambda n: n % mivel ==0return lambda n: n % mivel ==0

lista = 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,":", filter(oszthatosag(i),range(1,51))print i,":", 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 ks 10 köözzöött! tt! ÍÍrd rd ki, melyik szki, melyik száámbmbóól hl háány darab van a listny darab van 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 anyagok

http://www.python.org/http://www.python.org/

http://opensource.nokia.com/projects/pythonhttp://opensource.nokia.com/projects/pythonfors60fors60

http://mobilenin.com/pys60/menu.htmhttp://mobilenin.com/pys60/menu.htm

http://www.forum.nokia.com/Tools_Docs_anhttp://www.forum.nokia.com/Tools_Docs_and_Code/Tools/Runtimes/Python_for_S60/d_Code/Tools/Runtimes/Python_for_S60/

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

TovTováábbi anyagokbbi anyagok

KKöönyvek:nyvek:Mark Pilgrim: Mark Pilgrim: Dive Into PythonDive Into Python

ForstnerForstner--EklerEkler--KelKeléényi: nyi: BevezetBevezetéés a mobilprogramozs a mobilprogramozáásbasba

top related