Python Carte [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Introducere in Python

Cuprins 1. Primii pasi in Python 2. Ce este Python? 3. Unde se gaseste? 4. Cum se ruleaza un program Python? 5. Cateva precizari inainte de a scrie primul program 6. Tipuri de date si variabile 7. Stringuri 8. Liste si Tupluri 9. Dictionare 10. Structuri conditionale 11. Structuri repetitive 12. Functii 13. Includerea de cod extern 14. Clase si obiecte 15. Exceptii 16. Alte particularitati Python 17. Exemple de programe rezolvate 18. Exercitii propuse 19. Resurse

Primii pasi in Python Python este un limbaj de scripting de nivel inalt. Vom prezenta in continuare primii pasi care trebuie facuti pentru a scrie un program Python, cateva exemple si unele ponturi care sa va ajute in depasirea problemelor de inceput.

Ce este Python? Python este un limbaj de programare care castiga tot mai multa popularitate, fiind comparat uneori cu Perl. Ce este de fapt Python? Este un limbaj de scripting, ceea ce inseamna ca este interpretat si nu compilat, economisind mult timp in procesul de dezvoltare si depanare. Python este un limbaj de nivel inalt - permite scrierea de programe complexe mult mai rapid si usor decat in limbaje de genul C sau C++. Limbajul combina o putere remarcabila cu o sintaxa foarte clara. Are module, clase, exceptii si tipuri dinamice de nivel inalt. Ofera interfete la multe apeluri sistem si librarii, precum si la diverse sisteme de ferestre (X11, Motif, Tk, Mac, MFC). Implementarea Python este portabila: ruleaza pe Linux, Unix, Windows, OS/2, Mac OS X, Amiga si chiar pe unele telefoane mobile de la Nokia. Python a fost portat, de asemenea, pe masinile virtuale Java si .NET.

Unde se gaseste? Python se poate downloada de pe site-ul oficial, sectiunea Download. Pe un system Linux, e posibil sa fie deja instalat. Verificati asta dintr-o consola: $ python Python 2.3.4 (#2, Sep 24 2004, 08:39:09) [GCC 3.3.4 (Debian 1:3.3.4-12)] on linux2 Type "help", "copyright", "credits" or "license" for more information.

1

>>> Daca nu il aveti instalat, pasul urmator ar fi sa-l cautati pe CD-urile distributiei de Linux cu care lucrati. O alternativa ar fi folosirea serviciului apt-get de pe o distributie Debian (sau yum pentru RedHat). apt-get install python Sau il puteti descarca, apoi compila si instala manual: ./configure make make install Pe un system Windows se poate downloada de la Download fisierul Python 2.5.2 Windows installer (versiunea 2.5.2 incepand cu 22 Feb 2008). Se ruleaza fisierul: python-2.5.2.msi (apoi se urmeaza pasii de instalare). Dupa instalare se poate adauga calea catre executabilul python in global PATH, pentru a putea fi gasit de oriunde: “Control Panel” -> “System” ->[in plus pt Windows Vista: -> “Advanced System Settings” in partea superioara stanga] -> Tabul “Advanced” -> “Environment Variables” -> In zona de “System Variables” se cauta variabila “path” in lista, se da “Edit” ->se adauga la sfarsitul randului “Variable value” caracterul “;” urmat de calea catre executabilul “python.exe” (de ex, se adauga: “;c:\Python25”, fara ghilimele) -> 3xOK. Cum se ruleaza un program Python? In Windows, daca extensia .py este deja inregistrata, un dublu-clik pe numele scriptului este suficient. Se poate edita programul folosind IDLE (Python GUI) si apasand tasta F5 pentru rulare sau se poate executa din consola (Start->Run->cmd). Daca folositi Linux, exista mai multe posibilitati: fie se lanseaza interpretorul cu numele scriptului: $ cat hello.py print 'Hello World!' $ python hello.py Hello World! fie prima linie din program este de forma #!/calea/catre/interpretor iar scriptul se face executabil: $ cat hello.py #!/usr/bin/python print 'Hello World!' $ chmod +x hello.py $ ./hello.py Hello World!

Cateva precizari inainte de a scrie primul program Python este un limbaj interpretat. In Python, o linie noua termina o declaratie; pentru a continua o declaratie pe mai multe linii, se foloseste caracterul ”\”. In Python pe langa liniile noi, indentarea este mai mult decat parte a stilului de programare, este chiar parte din sintaxa (identarea se refera la spatiile/distanta intre inceputul unui rand si primul cuvant). Un bloc de cod are toate liniile identate cu acelasi numar de spatii (nu exista begin si end sau {} ca in C). Instructiunile dintr-un bloc de cod vor fi grupate unele sub altele, pe acelasi nivel de identare. Structurile de control, definirea de rutine, clase, toate necesita o mai mare grija in scrierea codului. Exemplu de folosire a identarii pentru a delimita blocurile de cod : a=1 """

2

Afisam numerele de la 1 la 10 """ while a 100): raise ValueError,j O instructiune try poate avea mai multe clauze except. Ultima clauza except poate sa nu aiba specificata nici o exceptie de tratat fiid astfel folosita pentru a trata toate exceptiile netratate de celelalte clauze. Instructiunile try pot avea optional si o clauza else. Instructiunile din blocul else sunt executate atunci cand blocul try nu genereaza nici o exceptie.

Alte particularitati Python Generarea de numere pseudo-aleatoare se face la fel de usor ca in alte limbaje. Se importa modulul random (import random), se seteaza eventual seed-ul folosind random.seed, iar random.randint(a,b) spre exemplu va intoarce un intreg cuprins in intervalul inchis [a,b]. Lucrul cu liste este foarte comod in Python. Listele pot fi folosite si sub forma de stiva sau coada prin intermediul functiilor puse la dispozitie (append() si pop() ). Afisarea unei liste se poate face folosind un simplu print lista. O lista se initializeaza la fel de simplu: lista = [] Putem referi o sublista a unei liste, ajutandu-ne de doi indecsi: sublista = lista[index1:index2] Indexarea se face de la zero. Mai sus, se vor intoarce elementele listei initiale de la index1 la index2-1. Astfel, lista[n: (n+1)] va intoarce o lista care contine un singur element, cel de pe pozitia n, iar lista[n:n] va intoarce []. In plus, exista o suita de functii foarte utile pentru obiectele de tip lista. Cele mai folosite sunt: len(lista) intoarce numarul de elemente din lista lista.append(x) adauga un element la sfarsitul listei lista.extend(alta_lista) concateneaza alta_lista la lista lista.sort() sorteaza elementele listei reverse() inverseaza ordinea elementelor din lista Unele apeluri de functii pot arunca exceptii care trebuie prinse. Exista mecanismul try-except, asemanator celui try-catch din Java. Lucrul cu fisiere este, de asemenea, simplu. Pentru a obtine un obiect de tip fisier, se apeleaza functia open, de obicei cu doi parametri: numele (calea) fisierului si modul de acces (r - read only; w - write only si daca exista va fi suprascris; a - append; r+ - citire si scriere; rb, wb, r+b - deschide fisierul in mod binar): f = open('input.txt','w') Odata obtinut obiectul fisier f, se vor putea folosi functiile pentru lucrul cu fisiere: read, readline, readlines, write, seek sau close ca metode ale clasei file (exemplu: f.read()). Uneori, pentru a scrie obiecte Python in fisiere, acestea trebuie transformate intr-un string, proces numit pickling (iar procesul invers: unpickling). Folosind modulul pickle cu functiile pickle.dump si pickle.load, acest lucru poate fi realizat cu usurinta. Urmatorul exemplu este concludent: # Salvam un dictionar intr-un fisier folosind pickle

9

import pickle culoare_favorita = { "caisa": "galbena", "portocala": "orange", "cireasa": "rosie" } print culoare_favorita pickle.dump( culoare_favorita, open( "save.p", "w" ) ) # Incarcam dictionarul inapoi din fisier folosind pickle culoarea_mea_fav = pickle.load( open( "save.p" ) ) print culoarea_mea_fav # culoarea_mea_fav e acum { "caisa": "galbena", "portocala": "orange", "cireasa": "rosie" } Pentru lucrul cu siruri de caractere exista functii ajutatoare precum rstrip, lower, etc.

Exemple de programe rezolvate 1)

Calculul sumelor partiale a primelor N numere naturale

Iata un exemplu simplu de script Python, in care se defineste o rutina si se apeleaza. #!/usr/bin/python # definim o functie care afiseaza numerele de la 1 la n si calculeaza suma lor def calc_suma( n): # n este parametru al functiei # virgula de la print suprima aparitia lui \n dupa textul tiparit print 1, suma = 1 i=2 # nu uitati de ':' de la sfarsitul liniilor care preced sub-blocuri! # adica dupa for, while, if, def etc. while i lista [a, ..., b-1] if x % i == 0: # nu uita de ':' ! return 0 return 1 def buildPrimes(max = 100): # se poate da o valoare implicita pentru parametru result = [] # initializez lista for i in range(1, max+1): if isPrime(i): result.append(i) # adaug la sfarsitul ei un nou element return result # pentru ca parametrul are o valoare implicita, vom putea apela si asa: buildPrimes() if len(argv) == 2: # argv[0]=nume script; len(argv)==2 inseamna un argument in plus n = int(argv[1]) print buildPrimes( n) else: # daca nu am un parametru try: n=int(raw_input("Dati N= ")) # raw_input citeste un string de la tastatura # daca a fost "prinsa" o exceptie: except(ValueError):

11

print "Asteptam un numar intreg." else: for k in buildPrimes( n): # tiparesc fiecare numar din lista print k, print # print simplu inseamna de fapt newline Exemple de executie: $ python prim.py 30 [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29] sau $ python prim.py Dati N= 50 1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 Pe Windows, pentru a da un argument din linia de comanda, sunt suficiente numele scriptului si argumentul: c:\> prim.py 30

Exemple Python 1. ''' program ce determina oglinda unui numar creat de Vasile Cioban 11.10.2012 ''' def Citeste(): n=int(input("dati un numar natural:")) return n; def Oglinda(a): Og=0 while (a>0):

12

UltCifra=a % 10 Og=Og*10+UltCifra a=a//10 return Og; a=Citeste(); d=Oglinda(a); print ("Oglinda="+str(d)); print ("program terminated");

2.

''' program ce determina daca un numar este prim creat de Vasile Cioban 11.10.2012 ''' def Prim(n): i=2; while (i*i n: return 1; else: return 0; n=int(input("dati un numar natural:")); if (Prim(n)==1): print (n," este prim"); else: print (n," nu este prim");

3. ''' program ce determina daca cel mai mare dicvizor comun numar a doua numere creat de Vasile Cioban 11.10.2012 ''' def Citeste(): n=int(input("dati un numar natural:")) return n; def CMMDC(a,b): while (a!=b): if a>b: a-=b else: b-=a;

#a=a-b #b=b-a

13

return a; a=Citeste(); b=Citeste(); d=CMMDC(a,b); print ("cmmdc("+str(a)+","+str(b)+")="+str(d)); print ("cmmdc(",a,",",b,")=",d);

4.

def gcd(a, b): """ Compute the greatest common divisor of two positive integers a, b integers a,b >=0 Return the greatest common divisor of two positive integers. """ if a == 0: return b if b == 0: return a while a != b: if a > b: a = a - b else: b = b - a return a def test_gcd(): assert gcd(2, 3) == 1 assert gcd(2, 4) == 2 assert gcd(6, 4) == 2 assert gcd(0, 2) == 2 assert gcd(2, 0) == 2 assert gcd(24, 9) == 3 test_gcd()

5. ''' program ce determina 2 numere prime gemene strict mai mici decat un numar natural dat creat de Vasile Cioban 18.10.2012 ''' def Prim(n): i=2; while (i*i n: return 1; else: return 0; n=int(input("dati un numar natural:")); if (n%2==0): p1=n-1 p2=n-3 else: p1=n-2; p2=n-4; if (n