Sunteți pe pagina 1din 24

Introducere n Python

Noiuni de baz ale limbajului Python


Principalele caracteristici ale limbajului Python sunt: 1. este un limbaj de nivel nalt; 2. are o sintax simpl; 3. este open source; 4. exist implementate numeroase biblioteci pentru Python: pachetul standard Python este un ansamblul de biblioteci standard care ofer foarte multe funcionaliti; biblioteca NumPy ofer numeroase funcionaliti pentru calcul numeric; biblioteca SciPy ofer rutine specifice pentru rezolvarea de ecuaii, integrri, ecuaii difereniale; PyGame se utilizeaz pentru dezvoltarea de interfee grafice i evenimente; PIL (Python Image Library) se utilizeaz pentru manipularea i procesarea de imagini; Biopython este un utilitar foarte puternic care permite citirea multor tipuri de fiiere utilizate n bioinformatic. De asemenea, asigur accesul la cele mai utilizate baze de date locale sau pe Internet.

5. este un limbaj interpretat; 6. este un limbaj uor de nvat i de utilizat; 7. este un limbaj preferat n diverse comuniti tiintifice, academice i de cercetare; 8. este flexibil la numeroase paradigme de programare: programare imperativ, programare funcional, programare orientat pe obiecte; 9. este un limbaj complet dinamic i are management automat al memoriei (garbage collector); 10. blocurile sunt delimitate prin indentare; 11. este un limbaj case sensitive; 12. codul surs este scurt, uor de testat, de depanat i de ntreinut; 13. permite concentrarea efortului de dezvoltare pe problem i nu pe detaliile de implementare ale limbajului de programare; 14. codul surs este independent de platform; 15. indexarea ncepe de la 0.

Adrese utile i instruciuni de instalare pentru Python


Site oficial Python: http://www.python.org/ Interpretorul Python: http://www.python.org/download/releases/ Python 2.5.4 (versiune utilizat n cadrul exemplelor care urmeaz): http://www.python.org/download/releases/2.5.4/ Biblioteca NumPy: http://sourceforge.net/projects/numpy/files/ Biblioteca SciPy: http://sourceforge.net/projects/scipy/files/ Biblioteca Biopython: http://biopython.org Documentaie Python: o http://docs.python.org/library/ o http://docs.python.org/reference/ o http://docs.python.org/tutorial/ o http://www.scipy.org/Numpy_Functions_by_Category o http://docs.scipy.org/doc/ o Plugin PyDev pentru Eclipse: http://pydev.org/ o PyDev se descarc de la adresa o http://sourceforge.net/projects/pydev/files/ o i apoi se dezarhiveaz n directorul dropins din Eclipse sau se copiaz adresa http://pydev.org/updates/ n directorul Help>Install New Software din Eclipse. o De asemenea, trebuie setat interpretorul, python.exe, atunci cnd se creeaz pentru prima dat un proiect nou Pydev Project. o Mediul de dezvoltare Eclipse Classic: o http://www.eclipse.org/downloads/download.php? file=/eclipse/downloads/drops/R-3.5.2-01002111343/eclipse-SDK-3.5.2win32.zip

Scurt tutorial pentru Python i exemple de cod


1.1.1 Formatarea codului i comentarii
1. blocurile de instruciuni sunt delimitate prin indentare: TAB sau spaii 2. o instruciune se poate continua pe urmtoarea linie utiliznd caracterul '\' 3. pentru comentarea unei singure linii se utilizeaz caracterul '#' 4. pentru comentarea mai multor linii, se ncadreaz textul respectiv ntre secvene formate din trei caractere apostrof sau ghilimele: Exemplul 1
# acesta este un comentariu a = 3; # variabila a ia valoarea 3 """ Acesta este un comentariu pe mai multe linii """ ''' Acesta este alt comentariu pe mai multe linii ''' print 1 + 2 \ + 3

1.1.2 Instruciunea de afiare print


1. instruciune built-in 2. parametrii instruciunii sunt separai prin virgul 3. afieaz parametrii instruciunii, separai prin spaii 4. impune automat '\n' la sfritul afirii, n cazul n care nu exist caracterul virgul dup ultimul parametru Exemplul 2 Ce afiseaz funcia print n urmatoarele cazuri. Cnd se obine eroare i de ce?
print 'Hello world' print "Hello world" print 'Hello "world" ' print 'Hello' world' print 'Hello \ world' print """ Hello world """ print " Hello world "

Exemplul 3 Ce afieaz urmtorul cod?


a = 3 b =18.5 c = 7 print "valorile variabilelor a si b sunt", a, \ 'respectiv', b print a+c print c/a print c%a print a**3 #ridicare la putere

1.1.3 iruri de caractere (string)


1. stringurile sunt imutabile (elementele irului nu pot fi modificate) 2. numrul de elemente al unui ir se obine cu funcia built-in len(sir) 3. sunt vectori de caractere care pornesc de la indicele 0 4. elementele au indicii de la 0 la len(sir)-1 5. sir[0:len(sir)] conine irul cu elemente de la 0 la len(sir)-1 Exemplul 4 irurile de caractere pot fi concatenate. S se ruleze urmatorul cod. Ce afieaz?
concatenare = 'Python versiunea ' + str(2.5)+ ' ' print concatenare concatenare2 = concatenare * 3 print concatenare2

Exemplul 5 De ce d eroare urmatorul cod?


sir = "stringurile sunt imutabile" sir[0] = "S" print sir

Exemplul 6 Se poate defini un alt obiect string ntr-o variabil care conine un string. n acest mod se poate modifica irul. S se testeze urmtorul cod. Care poziie din string este modificat?
sir = "stringurile sunt imutabile" sir = sir[:1]+'X'+sir[1:] print sir

Exemplul 7 Accesarea irului. Ce afieaz urmtorul cod? Unde d eroare?


sir = "lungime sir" print sir print len(sir) print sir[0] print sir[len(sir)-1] print sir[:100] print sir[100:] print sir[0:len(sir)] print sir[::2] print sir[100]

Exemplul 8 Indici negativi. S se testeze urmtorul cod. Ce afieaz?


sir = "testare indici negativi!" print sir print sir[-1] print sir[-3:] print sir[:-3] print sir[::-1] print sir[0]==sir[-0]

1.1.4 Liste
1. listele sunt mutabile 2. elementele listelor pot fi modificate 3. funcia built-in len(lista) ntoarce lungimea listei 4. listele pornesc de la indicele 0 5. elementele au indicii de la 0 la len(lista)-1 6. lista[0:len(lista)] conine lista cu elemente de la 0 la len(lista)-1 Exemplul 9 S se ruleze urmtorul cod. Ce se va gsi n variabila p?
m=[[1,2,3], [4,5,6], [7,8,9]] print m[0][2] m[0][2] = 0 print m[0] p = m[0] * 3

print p

Exemplul 10 Obiectele de tip list suport modificri. Printre operaiile pe liste se numar: pop, append, insert, remove, sort, del alte operatii: http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-buffer-xrange Ce afieaz codul de mai jos i de ce?
n = 4 m = [[0]]*n print m m[0].append(1) print m print [1]*5

Exemplul 11 Operatorii in i not in verific dac un element aparine sau nu unei liste. Ce va afia codul de mai jos i de ce?
print ['a'] + ['s'] print 'a' in ['b','a','c'] print 'a' in ['b','at','c'] print 'a' in "abcdefg" print 'a' in ['a','b'] and 'b' in ('a', 'c') print 'a' not in ['b','a','c'] print 'a' not in ['b','at','c'] print 'a' not in "abcdefg"

Exemplul 12 Accesarea elementelor se face ca i n cazul irurilor de caractere, att cu indici pozitivi, ct i negativi.
a=[1,2,3,4,5] print a print a[::2] print a[-2] print a[::-1]

Exemplul 13 Sortarea unei liste se poate face: a. utiliznd funcia built-in sorted

b. utiliznd funcia sort care aparine obiectului list o S se testeze codul de mai jos:
lista1 = sorted([3,2,1,9,7,10]) print lista1 lista2 = [9,2,5,'sortare','test',6] lista2.sort() print lista2

Exemplul 14 Ce valori primesc variabilele a, b, c?


a, b, c = [2, (3, 4),'x'] print a, b, c

1.1.5 Tupluri
1. tuplurile sunt liste imutabile 2. elementele tuplurilor nu pot fi modificate 3. functia built-in len(tuplu) ntoarce lungimea tuplului 4. ca i listele, tuplurile pornesc de la indicele 0 5. elementele au indici de la 0 la len(tuplu)-1 6. tuplu[0:len(tuplu)] conine lista cu elemente de la 0 la len(tuplu)-1 Exemplul 15 S se testeze codul de mai jos, s se tearg liniile care dau eroare. Ce se afieaz?
tuplu = ('b', '', 'f', 'k') print tuplu tuplu[2] = 'modificare' tuplu = tuplu[0:2] + (5,6,7) print tuplu print (1,2,3)*3

1.1.6 Dicionare (Hashmap)


1. dicionarele sunt liste de perechi cheie:valoare 2. dicionarele sunt mutabile 3. se definesc astfel: {cheie1:valoare1, cheie2:valoare2, ...} 4. cheile sunt unice 5. cheia trebuie s fie un obiect de tip imutabil 6. funcia built-in len(tuplu) ntoarce lungimea dicionarului 7. operatorul in testeaz dac o cheie este ntr-un dicionar

Exemplul 16

S se testeze codul de mai jos. Ce afieaz i de ce?


h = {"a": 1, 10:"x"} print h, h["a"], h[10] print 'a' in h print 'x' in h h["e"] =7; print h h['e']='sapte' print h print len(h)

1.1.7 Numere complexe


Python permite lucrul cu numere complexe prin obiectele de tip complex. Exemplul 17 La ce linie se genereaz eroare i de ce?
a=9+8j b=a print b b=0+0j print a.real, a.imag, b.real, b.imag a=0j b=0 print a.real,a.imag, b.real, b.imag

1.1.8 Tipul boolean


n Python variabilele boolean iau valorile True sau False. Exemplul 18
if 'a' in 'acest sir': b = True else: b = False print b

1.1.9 Tipuri de date mutabile/imutabile


1. datele n Python sunt reprezentate de obiecte i relaiile dintre ele 2. obiectele a cror valoare poate fi modificat se numesc mutabile, iar cele care nu se pot modifica se numesc imutabile 3. tipurile numerice (int, long, float, complex, boolean), irurile de caractere (string), tuplurile sunt tipuri de obiecte imutabile, n timp ce listele, vectorii, dicionarele sunt mutabile 4. operatorul is compar identitatea a dou obiecte 5. funcia id() ntoarce un ntreg care reprezint numarul de identificare al obiectului 6. funcia type() ntoarce tipul unui obiect 7. functia del terge referina ctre un obiect, nu obiectul n sine; eliberarea memoriei este realizat n mod dinamic de ctre sistemul de garbage collector. Exemplul 19 n care din urmatoarele 3 cazuri, a., b., c., se modific variabila a i n care nu? S se justifice rspunsul. a.
a = 9 b = a b = 0 print a

if a is b: print "a si b sunt referinte catre acelasi obiect" else: print "a si b sunt referinte catre", \ "obiecte diferite" print id(a),id(b) print type(a)

b.
a = [2,3,5] b = a b[2] = 0 print a if a is b: print "a si b sunt referinte catre acelasi obiect" print id(a),id(b) print type(a)

c.
a = [1,2,3] b = a del b print a

1.1.10 Cteva funcii/instruciuni built-in (implementate direct n interpretor)


1. print afiare 2. dir() - funcie built-in care afieaz toate simbolurile definite n mediul de rulare n momentul apelrii 3. abs(x) modulul lui x 4. all(iterable) ntoarce True dac toate elementele listei sunt True 5. any(iterble) ntoarce True dac cel puin unul din elementele listei este True 6. int(x) convertete un ir de caractere sau un numr la integer 7. complex(real, imag) ntoarce un numar complex 8. len(sequence) ntoarce lungimea unui obiect secven (ir de caractere, list, tuplu, dicionar) 9. long(x) convertete un ir de caractere sau un numr la long integer 10. float(x) convertete un ir de caractere sau un numr la un numr real 11. str(x) convertete un obiect la un ir de caractere 12. sum(iterable) suma elementelor unui obiect secven care are elemente numerice 13. min(iterable) minimul unui obiect de tip secven 14. max(iterable) maximul unui obiect de tip secven 15. round(x) rotunjirea numrului x 16. range([start,]stop[,step]) ntoarce o list care conine elemente aflate n progresie aritmetic, cu primul termen start, raia step i fr a depi valoarea stop; de exemplu, ce va afia:
print range(10,100,20)

17. map(f, secventa) aplic f pe fiecare element al secvenei i ntoarce o list cu rezultatele 18. zip (iterable1, iterable2, ) funcie built-in care ntoarce o list de tupluri, n care tuplul i conine al i-lea element din fiecare secven; pentru a obine secvenele iniiale se poate utiliza zip(*zipped), unde zipped este lista de tupluri obinut la apelul:
zip(iterable1, iterable2, )

19. reduce(f, secventa) funcia reduce va ntoarce un singur rezultat obinut n urma aplicrii funciei f (care are doi parametri) pe elementele secvenei, astfel:
f(secv[0], secv[1]) = r0

f(r0, secv[2]) = r1 f(rn-1, secv[n])

1.1.11 Citirea i scrierea n fiier


S se ruleze urmatoarele exemple de scrieri i citiri din fiier: Exemplul 20
f = file('myfile.txt') data = f.read() f.close() f = file('myfile2.txt','w') f.write(data) f.close()

Exemplul 21
f = open('myfile3.txt', 'w') print f f.write('test1 ') f.close() f = open('myfile3.txt', 'a') f.write('test2') f.close()

f = open('myfile3.txt', 'r') print f.read() f.close()

Exemplul 22
f = open('myfile3.txt', 'a') f.write('\ntest3') f.close() f = open('myfile3.txt', 'r') print f.readlines() f.close() f = open('myfile3.txt', 'r') print f.readline() print f.readline() f.close()

1.1.12 Structuri de control


S se testeze urmtoarele exemple. Ce afieaz? 1. if
if 2 > 3: print "if" elif 6 > 5: print "elif"

else: print "else"

2. while
n = 10 s = 0 while n > 0: s += n n -= 1 print n, s

3. for
for i in [7, 9 , 14, 'k']: print i, print for i in range(10): print i, print for i in range(4,10): print i, print for i in "abc": print i,

print for x, y in [[2, 3], [4, 5], [6, 7]]: print (x, y),

4. intruciunile continue i break Exemplul 23 Afiarea numerelor prime din intervalul [2, 9]:
for n in range(2, 10): for x in range(2, n): if n % x == 0: print n, '=', x, '*', n/x break else: #daca s-a parcurs toata lista print n, 'este prim'

1.1.13 Funcii
1. funciile sunt obiecte 2. funciile ntorc o valoare 3. dac funcia nu ntoarce nimic, va ntoarce implicit obiectul None. Exemplul 24 Generarea irului lui Fibonacci:
def fib(n): a, b = 0, 1 while a < n:

print a, a, b = b, a+b

Ce va afisa:
print fib(7)

dar:
fib(7)

Exemplul 25 Suma numerelor de la n la m-1:


def suma(n,m=10): s=0 for i in range(n,m): s+=i return s

Ce afieaz urmtoarele linii de cod ?


print suma(1,5) print suma(3) print suma(m=3, n=1) print suma() print suma

Exemplul 26 Intruciunea pass din corpul unei funcii nu face nimic; se utilizeaz n cazul n care n corpul funciei nu se implementeaza nimic, pentru a nu se genera eroare.
def f(): pass # Remember to implement this!

Aplelul f() nu va face nimic.

Exemplul 27 Variabile globale:


x=10 def test_global(a): global x y=a+x x=7 return y

Ce va ntoarce funcia dup primul apel, dar dup al doilea?


print test_global(5) print test_global(5)

1.1.14 Importarea de module si variabile de mediu


1. cnd se import sau se ruleaz un modul sunt instaniate anumite variabile de mediu: __name__ conine numele modulului, dac acesta nu este modulul principal (este importat), sau conine irul __main__ dac este modulul principal (care ruleaz) __builtins__ numele simbolic al bibliotecii care conine funciile built-in __file__ __doc__

Exemplul 28 Ce afieaz urmtoarele linii de cod?


print __name__ print __builtins__ print __file__ print __doc__ print dir()

2. importarea de module se face in felul urmator: Exemplul 29 Se import clasa Thread din modulul threading:
from threading import Thread x = Thread() # obiect de tip Thread asignat lui x print dir()

Se import tot modulul threading:


from threading import * print dir()

Exemplul 30
import math print math.ceil(12.4) print math from math import floor print floor(12.6)

print round(12.6)

3. crearea unui modul

Exemplu 31 S se creeze un modul numit functie.py care implementeaz funcia de calculare a sumei numerelor dintr-un interval:
def suma(n,m): #suma nr de la n la m-1 s=0 for i in range(n,m): s+=i return s print "modulul:", __name__ if __name__=="__main__": print suma(3,15) print dir() print "ruleaza ca modul principal"

n alt fiier, s se creeze un script numit test.py cu urmtoarele linii de cod:


from functie import suma print suma(3,15) print dir() print __name__

S se ruleze pe rnd ambele module. Ce se afieaz i de ce?

Aplicatii:
1. Sa se testeze urmatoarele linii de cod si sa se precizeze care genereaza eroare si de ce. De asemenea, sa se precizeze ce afiseaza liniile care nu genereaza eroare. 1. Tupluri: t=('a','b','c') t.append('x') print t + 'x' print t + ('x') print t + ('x',) print t + ('x','y') 2. Siruri de caractere: sir = 'abc' print sir + 'x' print sir + ('x') print sir + ('x',) 3. Liste: l=['a','b','c'] print l + 'x' print l + ['x'] print l + ['x',] print l + ['x','y'] l.append('x') print l l.append('y') print l l.append(['r', 't']) print l 2. S se scrie o funcie catenaADN(secv) care primete ca parametru o secven de ADN sub forma unui ir de caractere, de exemplu ATCGAACAATCAAGC, i care ntoarce catena complementar inversat, tot sub forma unui ir de caractere. 3. S se implementeze o funcie ADN(n) care genereaza o secven aleatoare de ADN ca o succesiune de baze azotate Adenina, Guanina, Timina, Ciozina sub forma unui sir de caractere de dimensiune n. Indicii: s se utilizeze funciile seed(x) i randint(a,b) din modulul random; seed(x) trebuie apelat o singur dat pentru a iniia algoritmul de generare de numere aleatoare (pseudoaleatoare);

pentru ca la fiecare apel al funciei ADN() s se genereze o alt secven de numere aleatoare, este recomandat s se seteze ca seed timpul sistemului; timpul sistemului n secunde este ntors de funcia time() care se gsete n modulul time; funcia seed(time()) trebuie apelat o singur dat n funcia ADN(); numerele aleatoare se genereaz cu funcia randint(a,b) care ntoarce un numar aleator ntre a i b.