Tutorial Python

download Tutorial Python

of 27

Transcript of Tutorial Python

Introducere in Python - Partea I Instalarea Python Ce este python? Python este un limbaj de programare interpretat. Pentru cei care nu stiu, un limbaj de programare este ceea ce scrii pentru a-i spune unui calculator ce are de facut. Oricum, computerul nu citeste limbajul in mod direct exista sute de limbaje de programare si nu ar putea sa le inteleaga pe toate. Deci, cand cineva scrie un program, il va scrie in limbajul selectat si apoi il va compila aceasta inseamna transformarea intr-o multime de 0 si de 1, pe care computerul le poate intelege rapid si usor. Diversele programele pe care le poti cumpara pentru calculatorul tau sunt deja compilate pentru Windows daca incerci sa deschizi un astfel de program cu Notepad sau Wordpad, vei vedea doar o multime de caractere ciudate. Un program care este compilat pentru Windows nu va functiona pe un alt sistem de operare. Diferenta dintre Python si astfel de programe este ca acest limbaj nu este niciodata compilat in totalitate la rulare, fiecare instructiune este transformata in serii de 0 si 1 pe care computerul tau le poate intelege. In plus, totul este facut pe loc codul este executat pe masura ce rulezi programul. Daca ai iesi din program si ai reveni in alta zi, bitii ar fi din nou compilati. Ti se pare a fi pierdere de timp? Poate, dar asta inseamna ca un program Python poate rula pe diferite sisteme de operare, fara a necesita ajustari. Ai putea trimite programul unui prieten, care utilizeaza un alt tip de computer. Sau ai putea posta programul pe Internet, de unde sa fie descarcat de persoane lucrand pe calculatoare diferite. Acesta este miracolul unui limbaj de programare interpretat este un limbaj pe care orice sistem il poate INTELEGE. Cum se instaleaza python Mai intai downloadeaza Python urmand acest link( http://www.python.org/download/). Pentru acest tutorial a fost utilizata versiunea 2.6.2. Executa fisierul downloadat si urmeaza comenzile. OK! Sa speram ca totul a mers bine! Acum, pentru a testa daca functioneaza, tasteaza urmatoarea instructiune in fereastra de comenzi - daca lucrezi pe Windows, cauta Python in Programs, acceseaza Python (command line), apoi ruleaza urmatoarea comanda: print "Hello World!" Incearca, vezi ce se intampla. Pentru a inchide fereastra, tasteaza 'quit()', apoi apasa Enter. 'Programe' foarte simple Introducere OK! Am instalat python, si acum? Pai, sa programam! Si este usor (cel putin pentru moment). Python face sa fie usor de rulat linii singulare de cod programe mono-liniare. Sa incercam! Deschidem IDLE Mergi in meniul de start, gaseste Python si ruleaza programul denumit 'IDLE' (Vine de la Integrated Development Environment Mediu Integrat de Dezvoltare). Acum te afli in mediul IDLE. Acesta este locul in care iti vei petrece majoritatea timpului. Aici poti deschide o noua fereastra pentru a scrie un program sau poti pierde vremea cu linii singulare de cod, ceea ce vom si face. Tasteaza urmatoarele si apasa enter: >>> print "Hello World!" Ce s-a intamplat? Tocmai ai creat un program care afiseaza cuvintele 'Hello, World'. Mediul IDLE in care te afli compileaza imediat orice ai tastat. Este extrem de util pentru testare, de exemplu la definirea variabilelor, sau pentru a verifica daca o anumita linie de cod functioneaza. Matematica in Python

Cu Python poti efectua anumite operatii matematice, cum ar fi: - Adunare >>> 1 + 1 2 >>> 20+80 100 >>> 18294+449566 467860 -Scadere >>> 6-5 1 - Inmultire >>> 2*5 10 - Ridicare la putere >>> 5**2 25 - Impartire >>> 21/3 7 >>> 23/3 7 >>> 23.0/3.0 7.6666 - Restul impartirii >>> 23%3 2 >>> 49%10 9 In plus, poti afisa sume si variabile printr-un singur apel al functiei print, utilizand virgula pentru a separa diferitele sectiuni: >>> print "un kilobyte este 2^10 bytes, sau", 2**10, "bytes" un kilobyte este 2^10 bytes, sau 1024 bytes In tabelul de mai jos poti vedea toti operatorii Python prezentati mai sus. Iti amintesti de ordinea operatiilor din matematica? Se aplica si in python. Iata, ca sa iti amintesti: paranteze() ridicare la putere ** inmultire *, impartire \, si restul impartirii % adunare + si scadere Ordinea operatiilor Iata cateva exemple pe care le-ai putea incerca: >>> 1 + 2 * 3 7 >>> (1 + 2) * 3 9

In primul exemplu, computerul calculeaza mai intai 2 * 3, apoi adauga 1. Aceasta, deoarece inmultirea este efectuata inaintea adunarii. In cel de-al doilea exemplu, computerul calculeaza mai intai 1 + 2, apoi inmulteste cu 3. Aceasta, din cauza parantezelor care incadreaza adunarea. Mai aminteste-ti si ca in matematica se calculeaza de la stanga la dreapta, exceptand cazul in care exista paranteze. Paratezele interioare sunt calculate primele. Priveste urmatoarele exemple: >>> 4 - 40 - 3 -39 >>> 4 - (40 - 3) -33 In primul exemplu, se calculeaza intai 4 -40, apoi - 3. In cel de-al doilea exemplu, se calculeaza mai intai 40 - 3 si apoi se scade din 4. Comentarii Ultimul lucru pe care trebuie sa-l cunosti pentru a putea trece la programe cu mai multe linii de cod sunt comentariile. Tasteaza urmatoarele (si da, rezultatul executiei este afisat): >>> #Iata un comentariu >>> Un comentariu este o portiune de cod care nu este rulata. In python, creezi un comentariu punand caracterul # inainte. Acesta va ascunde tot ce se afla dupa el in acea linie si nimic inainte. Deci ai putea tasta urmatoarele: >>> print "mancarea e foarte buna" #primul comentariu mancarea e foarte buna >>># print "mancarea e foarte buna" (nu se intampla nimic deoarece codul se afla dupa #) >>> print "mancarea e foarte buna" primul comentariu (vei primi un mesaj de eroare deoarece nu ai folosit # pentru comentariu Comentariile sunt importante pentru a adauga informatiile necesare altui programator pentru a intelege codul, dar nu influenteaza cu nimic computerul. In plus, poti utiliza comentariile pentru a deactiva anumite portiuni de cod, urmand sa le reactivezi mai tarziu. Variabile si scripturi Introducere Deci, putem executa programe monoliniare. Si? Vrei sa trimiti programele altor oameni, pentru a le putea utiliza, fara sa stie cum sa le scrie. Editare in Notepad Scrierea programelor din python intr-un fisier, este FOARTE usoara. Programele Python sunt simple documente text le poti deschide in notepad pentru a le observa. Deci, deschide notepad si tasteaza urmatoarele: #Un program simplu. print "Mary had a little lamb," print "it's fleece was white as snow;" print "and everywhere that Mary went",

print "her lamb was sure to go." Pastreaza totul la fel, inclusiv pozitionarea virgulelor. Salveaza fisierul ca fiind 'mary.py' si asigura-te ca notepad nu adauga extensia .txt. Dezactiveaza 'Hide known file extensions' in Windows Explorer, daca iti va fi mai usor. Utilizarea mediului IDLE Acum, deschide programul Python IDLE (ar trebui sa fie in meniul de start). Click File > Open, gaseste mary.py si deschide-l. Daca nu poti gasi mary.py, seteaza dialogul de deschidere la 'Files of type: All Files (*)'. Se va deschide o noua fereastra, prezentand programul pe care tocmai l-ai scris. Pentru a rula programul, click Run>Run Module (sau doar apasa F5). Programul va rula in ecranul principal Python (Denumit Python Shell) si va afisa urmatoarele: Mary had a little lamb, it's fleece was white as snow; and everywhere that Mary went her lamb was sure to go. Mai poti utiliza si IDLE pentru a crea programe Python, asa cum ai facut in notepad. Pur si simplu acceseaza File > New Window. De acum vei scrie toate programele in python IDLE am folosit notepad doar ca demonstratie pentru a iti arata ca un fisier .py este doar un simplu fisier text, pe care oricine il poate vedea. Exista cateva aspecte de mentionat: Mai intai, comentariul nu a fost afisat. Aceasta este bine, deoarece, aminteste-ti comentariile nu sunt compilate. (incearca sa compilezi dupa indepartarea # - va rezulta o invalmaseala) Apoi, a 3-a si a 4-a linie au fost concatenate, deoarece exista o virgula la sfarsitul celei de-a treia linii de cod. Aceasta opreste programul din a crea o noua linie pe ecran atunci cand afiseaza textul. Variabile Acum sa incepem introducerea variabilelor. Variabilele stocheaza o valoare care poate fi analizata sau schimbata ulterior. Pentru a crea un program care utilizeaza variabile, deschide IDLE, apoi acceseaza File>New Window apare o noua fereastra in care este usor sa editezi programe. Tasteaza urmatoarele (sau doar copy si paste insa citeste cu multa atentie si compara codul cu rezultatul oferit de catre program): #utilizarea variabilelor print "Acest program este un test pentru variabile" v=1 print "Valoarea lui v este acum", v v=v+1 print "v este incrementat cu 1, luand valoarea", v v = 51 print "v poate retine orice valoare numerica" print "de exemplu, v este acum", v print "v inmultit cu 5 este", v*5 print "dar valoare lui v ramane", v print "pentru a retine aceasta valoare in, trebuie sa scrii v = v * 5" v=v*5 print "iata, v este acum", v, "si nu", v / 5 Siruri de caractere Dupa cum poti observa, variabilele stocheaza valori pe care le poti schimba oricand si le utiliza mai tarziu. Poti insa atasa nu numai numere, ci si text. O variabila care suporta text se numeste string. Incearca acest program: #variabile de tip string si concatenarea lor word1 = "Buna" word2 = "dimineata"

word3 = "si tie!" print word1, word2 sentence = word1 + " " + word2 + " " +word3 print sentence Rezultatul va fi: Buna dimineata Buna dimineata si tie! Dupa cum poti vedea, variabilele de mai sus retin text. Denumirile variabilelor pot contine mai mult decat o litera aici avem word1, word2, and word3. Dupa cum mai poti observa, sirurile de caractere pot fi unite (concatenate) pentru a crea cuvinte sau propozitii mai lungi. Oricum, concatenarea nu adauga spatii intre cuvinte de aceea trebuie sa adaugi tu spatiile punand " " intre elemente. Iti amintesti de ordinea operatiilor din matematica? Se aplica si in python. Iata, ca sa iti amintesti: paranteze() ridicare la putere ** inmultire *, impartire \, si restul impartirii % adunare + si scadere Ordinea operatiilor Iata cateva exemple pe care le-ai putea incerca: >>> 1 + 2 * 3 7 >>> (1 + 2) * 3 9 In primul exemplu, computerul calculeaza mai intai 2 * 3, apoi adauga 1. Aceasta, deoarece inmultirea este efectuata inaintea adunarii. In cel de-al doilea exemplu, computerul calculeaza mai intai 1 + 2, apoi inmulteste cu 3. Aceasta, din cauza parantezelor care incadreaza adunarea. Mai aminteste-ti si ca in matematica se calculeaza de la stanga la dreapta, exceptand cazul in care exista paranteze. Paratezele interioare sunt calculate primele. Priveste urmatoarele exemple: >>> 4 - 40 - 3 -39 >>> 4 - (40 - 3) -33 In primul exemplu, se calculeaza intai 4 -40, apoi - 3. In cel de-al doilea exemplu, se calculeaza mai intai 40 - 3 si apoi se scade din 4. Comentarii Ultimul lucru pe care trebuie sa-l cunosti pentru a putea trece la programe cu mai multe linii de cod sunt comentariile. Tasteaza urmatoarele (si da, rezultatul executiei este afisat): >>> #Iata un comentariu >>> Un comentariu este o portiune de cod care nu este rulata. In python, creezi un comentariu punand caracterul # inainte. Acesta va ascunde tot ce se afla dupa el in acea linie si nimic inainte. Deci ai putea tasta urmatoarele: >>> print "mancarea e foarte buna" #primul comentariu

mancarea e foarte buna >>># print "mancarea e foarte buna" (nu se intampla nimic deoarece codul se afla dupa #) >>> print "mancarea e foarte buna" primul comentariu (vei primi un mesaj de eroare deoarece nu ai folosit # pentru comentariu Comentariile sunt importante pentru a adauga informatiile necesare altui programator pentru a intelege codul, dar nu influenteaza cu nimic computerul. In plus, poti utiliza comentariile pentru a deactiva anumite portiuni de cod, urmand sa le reactivezi mai tarziu. Variabile si scripturi Introducere Deci, putem executa programe monoliniare. Si? Vrei sa trimiti programele altor oameni, pentru a le putea utiliza, fara sa stie cum sa le scrie. Editare in Notepad Scrierea programelor din python intr-un fisier, este FOARTE usoara. Programele Python sunt simple documente text le poti deschide in notepad pentru a le observa. Deci, deschide notepad si tasteaza urmatoarele: #Un program simplu. print "Mary had a little lamb," print "it's fleece was white as snow;" print "and everywhere that Mary went", print "her lamb was sure to go." Pastreaza totul la fel, inclusiv pozitionarea virgulelor. Salveaza fisierul ca fiind 'mary.py' si asigura-te ca notepad nu adauga extensia .txt. Dezactiveaza 'Hide known file extensions' in Windows Explorer, daca iti va fi mai usor. Utilizarea mediului IDLE Acum, deschide programul Python IDLE (ar trebui sa fie in meniul de start). Click File > Open, gaseste mary.py si deschide-l. Daca nu poti gasi mary.py, seteaza dialogul de deschidere la 'Files of type: All Files (*)'. Se va deschide o noua fereastra, prezentand programul pe care tocmai l-ai scris. Pentru a rula programul, click Run>Run Module (sau doar apasa F5). Programul va rula in ecranul principal Python (Denumit Python Shell) si va afisa urmatoarele: Mary had a little lamb, it's fleece was white as snow; and everywhere that Mary went her lamb was sure to go. Mai poti utiliza si IDLE pentru a crea programe Python, asa cum ai facut in notepad. Pur si simplu acceseaza File > New Window. De acum vei scrie toate programele in python IDLE am folosit notepad doar ca demonstratie pentru a iti arata ca un fisier .py este doar un simplu fisier text, pe care oricine il poate vedea. Exista cateva aspecte de mentionat: Mai intai, comentariul nu a fost afisat. Aceasta este bine, deoarece, aminteste-ti comentariile nu sunt compilate. (incearca sa compilezi dupa indepartarea # - va rezulta o invalmaseala) Apoi, a 3-a si a 4-a linie au fost concatenate, deoarece exista o virgula la sfarsitul celei de-a treia linii de cod. Aceasta opreste programul din a crea o noua linie pe ecran atunci cand afiseaza textul. Variabile Acum sa incepem introducerea variabilelor. Variabilele stocheaza o valoare care poate fi analizata sau

schimbata ulterior. Pentru a crea un program care utilizeaza variabile, deschide IDLE, apoi acceseaza File>New Window apare o noua fereastra in care este usor sa editezi programe. Tasteaza urmatoarele (sau doar copy si paste insa citeste cu multa atentie si compara codul cu rezultatul oferit de catre program): #utilizarea variabilelor print "Acest program este un test pentru variabile" v=1 print "Valoarea lui v este acum", v v=v+1 print "v este incrementat cu 1, luand valoarea", v v = 51 print "v poate retine orice valoare numerica" print "de exemplu, v este acum", v print "v inmultit cu 5 este", v*5 print "dar valoare lui v ramane", v print "pentru a retine aceasta valoare in, trebuie sa scrii v = v * 5" v=v*5 print "iata, v este acum", v, "si nu", v / 5 Siruri de caractere Dupa cum poti observa, variabilele stocheaza valori pe care le poti schimba oricand si le utiliza mai tarziu. Poti insa atasa nu numai numere, ci si text. O variabila care suporta text se numeste string. Incearca acest program: #variabile de tip string si concatenarea lor word1 = "Buna" word2 = "dimineata" word3 = "si tie!" print word1, word2 sentence = word1 + " " + word2 + " " +word3 print sentence Rezultatul va fi: Buna dimineata Buna dimineata si tie! Dupa cum poti vedea, variabilele de mai sus retin text. Denumirile variabilelor pot contine mai mult decat o litera aici avem word1, word2, and word3. Dupa cum mai poti observa, sirurile de caractere pot fi unite (concatenate) pentru a crea cuvinte sau propozitii mai lungi. Oricum, concatenarea nu adauga spatii intre cuvinte de aceea trebuie sa adaugi tu spatiile punand " " intre elemente. Instructiuni conditionale OK! Am acoperit (sper) buclele 'while'. Acum sa analizam ceva diferit instructiunile conditionale. Instructiunile conditionale reprezinta sectiuni de cod care sunt rulate daca sunt indeplinite anumite conditii. Sunt similare buclei 'while' pe care tocmai ai scris-o, care ruleaza doar cand x nu este egal cu 0, cu diferenta ca instructiunile conditionale sunt rulate doar o singura data. Cea mai intalnita instructiune de acest tip (in orice limbaj de programare) este 'if'. Iata cum actioneaza: if {conditii ce trebuiesc indeplinite }: {executa asta} {si asta} {si asta} {acest cod este executat oricum } {pentru ca nu este indentat }

Iata si un exemplu: #EXEMPLUL 1 y=1 if y == 1: print "y este egal 1, doar verificam" #EXEMPLUL 2 print "Vom afisa numerele pare pana la 20" n=1 while n 5: print "Asta nu trebuie sa se intample." else: print "Asta trebuie sa se intample." 'a' nu este mai mare decat cinci, deci va fi executat codul din ramura 'else' 'elif' este doar o modalitate mai scurta de a spune 'else if'. De exemplu: z=4 if z > 70: print "Ceva rau s-a intamplat " elif z < 7: print "Asta e normal " Instructiunea 'if' impreuna cu 'else' si 'elif' urmeaza acest tipar: if {conditie 1}: {executa acest cod} elif {conditie 2}: {executa acest cod} elif {conditie 3}: {executa acest cod} else: {executa acest cod} 'Ceea ce trebuie sa retii este ca poti avea oricate declaratii elif, dar o singura instructiune else, care trebuie pusa la sfarsit. Un alt lucru foarte important este ca trebuie sa inchei cu : (doua puncte) fiecare linie ce contine if, elif, else sau while. Indentarea codului Indentarea codului este o practica intalnita in mai toate limbajele de programare, dar in Python este o

necesitate. Aceasta inseamna ca daca o bucla 'while' contine 5 linii de cod, trebuie sa pui un anumit numar de spatii la inceputul fiecarei dintre cele cinci linii. Iata un exemplu: a = 10 while a > 0: print a if a > 5: print "a este mare!" elif a % 2 != 0: print "a este impar" print "si mai mic sau egal decat 5" else: print "acest numar nu este mai mare decat 5" print "si nu este impar" a=a-1 print "am decrementat a cu o unitate" print "daca este mai mare ca 0, repetam bucla" print "se pare ca a nu este mai mare ca 0" print "bucla s-a terminat!" Observa cele trei nivele de indentare: Fiecare linie din primul nivel incepe fara spatii. Este codul principal si va fi executat mereu. Fiecare linie din cel de-al doilea nivel incepe cu patru spatii. Cand exista un 'if' sau o bucla la primul nivel, tot ce se afla la al doilea nivel va fi considerat un singur bloc de cod, pana cand incepe o noua linie din primul nivel. Fiecare linie din cel de-al treilea nivel incepe cu 8 spatii. s.a.m.d In afara de while, mai exista un tip de bucla denumita for, despre care vei putea citi in urmatoarele tutoriale. ================================================================== Introducere in Python - Partea a II-a. Functii. Functii Introducere Ce sunt functiile? In esenta, functiile sunt sectiuni de cod ce executa o anumita sarcina si pe care le poti incorpora in propriile programe mai mari. Dupa ce ai creat o functie, o poti utiliza oricand, oriunde. Aceasta te scuteste de timpul si de efortul de a-i spune iar si iar computerului ce sa faca de fiecare data cand executa o sarcina obisnuita, de exemplu preluarea inputului de la tastatura. Utilizarea unei functii Python are o multime de functii predefinite pe care le poti utiliza imediat, prin simpla apelare a acestora. Apelarea inseamna transmiterea unor parametri, pe care functia ii va folosi pentru a returna un rezultat. Iata forma generala pe care o are apelarea unei functii: nume_functie(parametri) Vezi? Usor. nume_functie identifica functia pe care vrei sa o utilizezi (de exemplu, functia raw_input, care va fi prima functie Python pe care o vom analiza). Parametrii sunt valorile pe care le trimiti functiei pentru a-i spune ce ar trebui sa faca si cum ... de exemplu, daca o functie inmulteste un numar cu 5 si valoarea parametrului este 70, functia va executa 70x5. Parametri si valori returnate comunicarea cu functiile

Sa presupunem ca avem un program ce realizeaza inmultirea cu 5, dar cum arata asta in limbaj Python? Programul trebuie sa vada rezultatul, sa vada ce reprezinta 70x5 sau daca exista vreo problema undeva (de exemplu daca parametrul furnizat este o litera in loc de un numar). Deci, cum lucreaza o functie? In esenta, cand un computer ruleaza o functie, nu vede numele acesteia, ci rezultatul a ceea ce a executat functia. Variabilele functioneaza la fel computerul nu vede numele variabilei, ci valoarea acesteia. Sa denumim aceasta functie care inmulteste un numar cu 5 - multiply(). Deci, daca ai tastat: a = multiply(70) Computerul vede de fapt: a = 350 Observatie: Nu te obosi sa testezi acest cod pentru a functiona, trebuie mai intai sa definesti functia multiply(). Functia va fi executata, apoi va returna un numar in programul principal, bazat pe parametrii oferiti. Acum sa incercam apelul unei functii predefinite si sa vedem cum lucreaza. Functia respectiva este denumita raw_input si ii solicita utilizatorului sa tasteze ceva, apoi transforma datele introduse intr-un sir de caractere (string). Incearca te rog codul de mai jos: # aceasta linie retine datele introduse in variabila a a = raw_input("Scrie un text, ce va fi afisat din nou pe ecran:") # afiseaza continutul variabilei a print a Sa spunem ca in programul de mai sus ai tastat hello . Pentru computer, acest program ar arata astfel: a = "hello" print "hello" Aminteste-ti, o variabila este doar o valoare stocata. Pentru computer, variabila a nu arata ca un a vede valoarea stocata in interiorul sau. Functiile sunt similare programul principal (acesta este cel care ruleaza functia) va vedea doar valorile primite ca urmare a apelarii. Un calculator Sa scriem un alt program care va actiona ca un calculator. De data aceasta vom face ceva mai aventuros. Va exista un meniu care te va intreba daca doresti sa inmultesti doua numere, sa le aduni, sa le imparti sau sa le scazi. Exista o singura problema functia raw_input returneaza un string, iar noi avem nevoie de numarul 1, nu de litera 1 (si da, in python este o diferenta). Din fericire, avem la dispozitie functia input care returneaza ce ai tastat, dar de data aceasta ca numar. Daca ai tastat un numar intreg, ceea ce rezulta este un numar intreg. Si daca scrii acel numar intr-o variabila, variabila va fi de tip integer, ceea ce inseamna ca o poti utiliza in operatii aritmetice. Acum, sa cream acest calculator. Ne dorim un meniu care este afisat de fiecare data cand terminam de adunat, scazut, etc. Cu alte cuvinte, sa execute o bucla continua. Sa scriem asta intr-un limbaj pe intelesul tuturor: INCEPE PROGRAMUL afiseaza mesaj de inceput in timp ce programul ruleaza, executa: #Afiseaza operatiile aritmetice permise afiseaza Optiunea 1 - adunare afiseaza Optiunea 2 - scadere afiseaza Optiunea 3 - inmultire

afiseaza Optiunea 4 - impartire afiseaza Optiunea 5 - iesire din program citeste optiunea aleasa daca este optiunea 1: citeste primul numar citeste cel de-al doilea numar aduna numerele afiseaza rezultatul daca este optiunea 2: citeste primul numar citeste cel de-al doilea numar efectueaza scaderea afiseaza rezultatul daca este optiunea 3: citeste primul numar citeste cel de-al doilea numar inmulteste-le afiseaza rezultatul daca este optiunea 4: citeste primul numar citeste cel de-al doilea numar efectueaza impartirea afiseaza rezultatul daca este optiunea 5: iesire din bucla afiseaza un mesaj de iesire TERMINA PROGRAMUL Acum sa ii dam o forma pe care o poate intelege python: #program calculator # variabila loop indica programului daca sa execute bucla sau nu # 1 inseamna executa bucla, orice alta valoare inseamna iesire din bucla loop = 1 # aceasta variabila retine optiunea aleasa de utilizator choice = 0 while loop == 1: #afiseaza optiunile print "Bine ai venit la calculator.py" print "Optiunile tale sunt:" print " " print "1) Adunare" print "2) Scadere" print "3) Inmultire" print "4) Impartire" print "5) Iesire din calculator.py" print " " choice = input("Alege optiunea dorita: ") if choice == 1:

add1 = input("Aduna asta: ") add2 = input("cu asta: ") print add1, "+", add2, "=", add1 + add2 elif choice == 2: sub2 = input("Scade asta: ") sub1 = input("din asta: ") print sub1, "-", sub2, "=", sub1 - sub2 elif choice == 3: mul1 = input("Inmulteste asta: ") mul2 = input("cu asta: ") print mul1, "*", mul2, "=", mul1 * mul2 elif choice == 4: div1 = input("Imparte asta: ") div2 = input("la asta: ") print div1, "/", div2, "=", div1 / div2 elif choice == 5: loop = 0 print "Iti multumim ca ai utilizat calculator.py!" Este un program impresionant! Copiaza asta in python IDLE, salveaza codul cu numele de 'calculator.py' si ruleaza-l (F5). Joaca-te putin incearca-i toate optiunile, introducand numere intregi sau rationale (in python, zecimalele sunt delimitate prin punct(.), cunoscut in programare ca floating point). Incearca sa introduci text si vei vedea cum programul nu va mai rula (aceasta problema se poate rezolva prin validarea datelor si erori, la care ne vom referi mai tarziu.) Definirea propriilor functii Este bine sa utilizezi functiile altora, dar ce-ar fi sa-ti scrii propriile functii, pentru a economisi timp si poate pentru a le utiliza in alte programe? Aici intra in scena operatorul def (Un operator este ceva ce ii spune programului python ce sa faca, de ex. operatorul + ii spune sa adune, operatorul if ii spune sa execute ceva daca sunt indeplinite anumite conditii.) Iata cum functioneaza operatorul def: def nume_functie(parametru_1,parametru_2): {acesta este codul functiei} {si mai mult cod} {si mai mult cod} return {valoare ce trebuie returnata in programul principal} {cod ce nu face parte din functie} {pentru ca nu este indentat} # nu uita sa pui ":" la sfarsitul liniei ce incepe cu 'def' nume_functie reprezinta denumirea functiei, fiind urmat de codul functiei, care este indentat incepand cu urmatoarea linie (ne vom ocupa mai tarziu de parametru_1 si parametru_2, acum imagineaza-ti ca nu se afla nimic intre paranteze). Functiile ruleaza complet independent de programul principal. Iti amintesti ca am spus ca atunci cand computerul apeleaza o functie, nu vede functia, ci valoarea returnata de aceasta? O functie este asemeni unui program in miniatura caruia ii sunt transmisi niste parametri ii ruleaza singur si apoi returneaza o valoare. Programul principal vede doar valoarea returnata. Daca acea functie ar fi zburat pana la luna si inapoi si la sfarsit ar avea: return "Hello" atunci tot ceea ce ar vedea programul ar fi string-ul hello .

Deoarece este un program distinct, o functie nu vede niciuna dintre variabilele aflate in programul principal si programul principal nu vede vreuna din variabilele definite in cadrul functiei. De exemplu, iata o functie care afiseaza cuvantul hello pe ecran si apoi returneaza valoarea 1234 : # Mai jos este definita functia def hello(): print "hello" return 1234 # Iata apelul functiei print hello() Gandeste-te la ultima linie de cod de mai sus. Ce am facut? Introdu codul in IDLE (poti sari peste comentarii) si vezi ce face. Rezultatul arata astfel: hello 1234 Deci, ce s-a intamplat? 1. Cand a fost rulat 'def hello()', a fost creata o functie denumita hello . 2. Cand a fost rulata linia 'print hello()', a fost executata functia hello (a fost rulat codul acesteia). 3. Functia hello a afisat hello pe ecran, apoi a returnat numarul 1234 in programul principal. 4. Programul principal vede acum linia ca fiind print 1234 si ca rezultat a afisat 1234 . Argumentele functiilor Ne vom mai referi la un singur subiect legat de functii transmiterea parametrilor. Aminteste-ti cum am definit prototipul unei functii: def nume_functie(parametru_1,parametru_2): {acesta este codul functiei} {si mai mult cod} {si mai mult cod} return {valoare ce trebuie returnata in programul principal} In codul de mai sus, parametru_1 si parametru_2 (intre paranteze) reprezinta argumentele functiei. O functie poate avea oricate argumente, separate prin virgule. La apelul acesteia, prima valoare aflata in interiorul parantezelor va fi transmisa variabilei parametru_1. Cea de-a doua (dupa prima virgula) va merge la variabila parametru_2. Aceasta se intampla indiferent de cat de multi parametri exista in functie (de la 0 la infinit). De exemplu: def functie_amuzanta(cuvant1,cuvant2,cuvant3): print "Propozitia creata este: " + cuvant1 + cuvant2 + cuvant3 return cuvant1 + cuvant2 + cuvant3 Ca exemplu, poti apela functia de mai sus astfel: functie_amuzanta("La ","multi ","ani!"). Prima valoare (care este La ) va fi trimisa in variabila denumita cuvant1. Cea de-a doua valoare din paranteze ( multi ) va fi in variabila denumita cuvant2 si asa mai departe. Astfel sunt trimise valorile din programul principal in functii in paranteze, dupa numele functiei. Un program complet Aminteste-ti de programul calculator. Ti s-a parut cam confuz? Cred ca da, deci sa-l rescriem cu ajutorul functiilor. Mai intai vom defini toate functiile pe care le vom utiliza cu ajutorul operatorului def. Apoi vom avea programul principal, cu acel cod confuz inlocuit de functii dragute si clare, ceea ce il va face mai usor de citit si de inteles. # program calculator # NU AVEM NEVOIE DE COD AICI # In continuare definim functiile

# Functia menu afiseaza meniul def menu(): #afiseaza optiunile print "Bine ai venit la calculator.py" print "Optiunile tale sunt:" print " " print "1) Adunare" print "2) Scadere" print "3) Inmultire" print "4) Impartire" print "5) Iesire din calculator.py" print " " return input ("Alege optiunea: ") # Functia add aduna doua numere def add(a,b): print a, "+", b, "=", a + b # Functia sub scade doua numere def sub(a,b): print b, "-", a, "=", b - a # Functia mul inmulteste doua numere def mul(a,b): print a, "*", b, "=", a * b # Functia div imparte doua numere def div(a,b): print a, "/", b, "=", a / b # ACUM INCEPE PROGRAMUL PRINCIPAL loop = 1 choice = 0 while loop == 1: choice = menu() if choice == 1: add(input("Aduna asta: "),input("cu asta: ")) elif choice == 2: sub(input("Scade asta: "),input("din asta: ")) elif choice == 3: mul(input("Inmulteste asta: "),input("cu asta: ")) elif choice == 4: div(input("Imparte asta: "),input("la asta: ")) elif choice == 5: loop = 0 print "Iti multumim ca ai utilizat calculator.py!" # AICI SE TERMINA PROGRAMUL Programul initial avea 34 linii de cod. Noul program are 35! Este putin mai lung, dar daca il privesti cum trebuie, este de fapt mai simplu. Toate functiile necesare au fost definite la inceput. Aceasta nu este de fapt o parte a programului principal

formeaza o multime de programele pe care le vei apela mai tarziu. Le-ai putea reutiliza in alt program daca ai avea nevoie, fara a-i spune din nou computerului cum sa adune si sa scada. Daca privesti partea principala a programului (intre linia loop=1 si 'print "Iti multumim..."'), sunt doar 15 linii de cod. Aceasta inseamna ca daca ai fi vrut sa scrii acest program in mod diferit, ar fi trebuit sa scrii aproximativ 15 linii fata de 34 de linii cate ai fi avut in mod normal fara functii. Trucuri pentru transmiterea parametrilor Functia add ar putea fi apelata astfel: add(input("Aduna asta: "),input("cu asta: ")) Am vrut sa am totul intr-o singura linie, cu cat mai putine variabile posibil. Iti amintesti cum aratau functiile in programul principal? Daca numerele transmise functiei add() ar fi fost 2 si 30, programul principal ar fi vazut urmatoarele: add(2,30) Aceasta va rula apoi functia add, adunand 2 si 30, apoi afisand rezultatul. Functia de adunare nu include instructiunea return, ceea ce inseamna ca nu returneaza nimic in programul principal. Pur si simplu aduna 2 numere si afiseaza rezultatul pe ecran, dar programul principal nu vede nimic din toate acestea. In loc de (input("Aduna asta: ") si input("cu asta: ")) ai putea utiliza ca parametri doua variabile. De exemplu: num1 = 45 num2 = 7 add(num1,num2) Pentru ce avem mai sus, aminteste-ti ca functia careia ii trimiti variabilele nu le poate modifica sunt utilizate pur si simplu ca valori. O alta modalitate ar fi sa apelezi functia direct cu valorile numerice: add(45,7) Exemplul de mai sus este corect deoarece singurul lucru vazut de functie sunt valorile transmise ca parametri. Aceste valori sunt asezate in argumentele corespunzatoare din definitia functiei add , respectiv in variabilele a si b. Pe scurt: Singurul lucru vazut de functii sunt parametrii trimisi din programul principal. Singurul lucru vazut de programul principal sunt valorile returnate de functii. In urmatoarea parte a acestei serii vei putea analiza si alte exemple de utilizare a functiilor. ====================================================================== Introducere in Python - Partea a III-a. Liste si bucla for. Enumerari, liste si dictionare Introducere Inca te doare capul de la ultima discutie despre functii? Nu te ingrijora, urmatoarea sectiune te va solicita mai putin. Ne intoarcem la ceva simplu variabile. Rolul variabilelor este de a stoca o anumita informatie. Ele pot intoarce acea informatie la un moment dat si informatia detinuta poate fi modificata oricand. Dar daca trebuie sa stochezi o lista lunga de date care nu se schimba in timp, cum ar fi de exemplu lunile anului? Sau poate o lista de informatii care este actualizata in timp, cum ar fi numele pisicilor tale? Ai

putea avea noi pisici, unele ar putea muri, etc. Dar ce spui despre o carte de telefon? Pentru aceasta ai nevoie de ceva referinte ai avea o lista de nume si atasat fiecarui nume un numar de telefon. Cum ai face asta? Solutia Liste, enumerari si dictionare Pentru problemele descrise mai sus, Python ofera trei solutii diferite enumerari, liste si dictionare: Listele sunt exact ceea ce par liste de valori. Fiecare este numerotata, incepand de la 0 prima este numerotata cu 0, a doua cu 1, a treia cu 2, etc. Poti sterge valori din lista sau poti adauga altele noi la finalul acesteia. De exemplu, numele pisicilor tale. Enumerarile sunt asemeni listelor, dar nu le poti schimba valorile. Valorile pe care le acorzi de la inceput sunt valorile cu care ramai blocat tot restul programului. Din nou, fiecare valoare este numerotata incepand cu 0, pentru o referire mai facila. De exemplu: denumirile lunilor anului. Dictionarele sunt exact ceea ce le spune numele dictionare. Intr-un dictionar, avem un index de cuvinte si pentru fiecare dintre ele, o definitie. In python, indexul este denumit cheie (key), iar definitia - valoare (value). Valorile dintr-un dictionar nu sunt numerotate si nu se afla intr-o anumita ordine. Poti adauga, indeparta si modifica valorile din dictionare. De exemplu, cartea de telefon. Enumerarile Enumerarile sunt destul de usor de creat. Tot ceea ce trebuie sa faci este sa le dai un nume, si sa specifici valorile pe care le contin. De exemplu, iata o enumerare cu lunile anului: lunile_anului = ('Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',\ 'Iulie','August','Septembrie','Octombrie','Noiembrie',' Decembrie') Observa ca particula \ de la finalul primului rand leaga prima linie de urmatoarea. Este o metoda utila pentru ca randurile lungi sa devina mai inteligibile. Din punct de vedere tehnic, nu trebuie sa aplici parantezele (acele '(' si ')' ) dar astfel codul este mai putin confuz. Poti avea spatii dupa virgule daca doresti dar nu conteaza prea mult. Python organizeaza valorile dintr-o enumerare intr-un index util, numerotat incepand cu 0, in ordinea in care le-ai introdus. Va fi organizata astfel: Index Valoare 0 Ianuarie 1 Februarie 2 Martie 3 Aprilie 4 Mai

5 Iunie 6 Iulie 7 August 8 Septembrie 9 Octombrie 10 Noiembrie 11 Decembrie

Si acestea sunt enumerarile! Foarte usor... Listele Listele sunt foarte asemanatoare enumerarilor. Listele pot fi editate, deci valorile lor pot fi modificate. De cele mai multe ori, utilizam liste si nu enumerari, deoarece dorim sa schimbam valorile daca este necesar. Listele sunt definite intr-un mod similar enumerarilor. Sa spunem ca ai 5 pisici, numite Tom, Snappy, Kitty, Jessie si Chester. Pentru a le aseza sub forma unei liste, ar trebui sa scrii: pisici = ['Tom', 'Snappy', 'Kitty', 'Jessie', 'Chester'] Dupa cum poti observa, codul este exact la fel ca al enumerarilor, CU EXCEPTIA FAPTULUI ca toate valorile se afla intre paranteze patrate si nu intre paranteze rotunde. Din nou, nu exista spatii dupa virgule. Valorile din liste sunt apelate la fel ca si in cazul enumerarilor. De exemplu, pentru a afisa numele celei de-a treia pisici, ar trebui sa tastezi: print pisici[2] Poti accesa si o anumita sectiune dintr-o lista. De exemplu, pisici[0:2] va returna primele doua pisici. Specificul listelor consta in posibilitatea modificarii lor. Pentru a adauga o valoare in lista, utilizeaza functia append(). Sa spunem ca ai o noua pisica numita Catherine. Pentru a o adauga in lista, ar trebui sa tastezi: pisici.append('Catherine') Este cam ciudat, nu? Apelul functiei apare dupa denumirea listei, fiind delimitata de aceasta printr-un punct. Aceasta sintaxa va fi explicata in urmatoarele tutoriale. Pentru moment, retine ca un element este adaugat intr-o lista astfel: #adauga o noua valoare la sfarsitul listei: nume_lista.append(valoare_noua)

#ex. adauga numarul 5038 in lista 'numbers': numbers.append(5038) Am clarificat? Bine! Acum, situatia nefericita Snappy a fost impuscat de un vecin si trebuie sa-l indepartezi din lista. Este usor: #Sterge cea de-a doua pisica, Snappy. del pisici[1] Tocmai ai indepartat cea de-a doua pisica din lista. Si dupa aceasta parte morbida, sa trecem la Dictionare Sa presupunem ca trebuie sa anunti cateva persoane cu privire la decesul pisicii favorite. Pentru aceasta, ai nevoie de o carte de telefon. Listele utilizate mai sus nu sunt prea adecvate pentru o carte de telefon. Trebuie sa afli un numar pe baza numelui cuiva si nu invers asa cum am procedat cu pisicile. In exemplele cu pisici si cu lunile anului, iam oferit computerului un numar si acesta ne-a oferit un nume. Acum vrem sa-i furnizam computerului un nume si sa ne returneze un numar. De aceea avem nevoie de dictionare. Deci cum cream un dictionar? Lasa deoparte echipamentul de lupta, nu este chiar atat de greu. Aminteste-ti, dictionarele au chei si valori. Intr-o carte de telefon, ai numele persoanelor si apoi numerele. Observi ceva asemanari? Crearea unui dictionar seamana foarte mult cu cea a unei enumerari sau a unei liste. Enumerarile au ( si ) iar listele [ si ]. Ce crezi ca au dictionarele? Iata un exemplu de dictionar care contine 4 numere de telefon: #Creeaza o agenda telefonica: agenda = {'Andrew Parson':8806336, \ 'Emily Everett':6784346, 'Peter Power':7658344, \ 'Lewis Lame':1122345} Pentru a afisa numarul de telefon al lui Lewis Lame, am scrie: print agenda['Lewis Lame'] Observa cum in loc de a identifica o valoare dupa numar, ca in cazul pisicilor sau al lunilor anului, identificam valoarea utilizand o alta valoare in acest caz numele persoanei. Ok, am creat o noua agenda telefonica. Acum vrei sa adaugi noi numere de telefon. Iata cum: #Adauga persoana 'Gingerbread Man' in agenda agenda['Gingerbread Man'] = 1234567 Tot ceea ce spune acea linie este ca in cartea de telefon exista o persoana numita Gingerbread Man si ca numarul sau este 1234567. Cu alte cuvinte cheia este 'Gingerbread Man' iar valoarea este 1234567. Stergerea inregistrarilor dintr-un dictionar se face ca si in cazul listelor. Sa spunem ca Andrew Parson este vecinul vostru care a impuscat pisica. Nu vrei sa mai vorbesti vreodata cu el deci nu mai ai nevoie de numarul sau. Ca intr-o lista, trebuie sa tastezi: del agenda['Andrew Parson'] Din nou, este foarte usor. Operatorul del sterge orice functie, variabila sau inregistrare dintr-o lista sau dictionar.

Iti amintesti de functia append pe care am utilizat-o pentru liste? Sunt destule functii asemanatoare care pot fi utilizate pentru dictionare. Mai jos poti vedea un program ce incorporeaza cateva dintre aceste functii, insotite de explicatii. Scrie acest program in Python IDLE (poti sari peste comentarii). Experimenteaza cat doresti. #Cateva exemple de dictionare #Mai intai definim un dictionar care este gol ages = {} #Adaugam cateva nume in dictionar ages['Sue'] = 23 ages['Peter'] = 19 ages['Andrew'] = 78 ages['Karren'] = 45 #Utilizam functia has_key() #Aceasta functie are prototipul: #nume_functie.has_key(nume_cheie) #si returneaza TRUE daca dictionarul #contine cheia respectiva #si FALSE in caz contrar if ages.has_key('Sue'): print "Sue este in dictionar. Ea are", \ ages['Sue'], "ani" else: print "Sue nu este in dictionar" #Utilizam functia keys() #Aceasta functie returneaza o lista #cu toate denumirile cheilor din dictionar. print "Dictionarul contine urmatoarele persoane:" print ages.keys() #Cheile pot fi retinute intr-o lista: keys = ages.keys() #Similar, functia values() #returneaza o lista cu valorile din dictionar. print "Varstele persoanelor sunt:", \ ages.values() #Retinem valorile intr-o lista: values = ages.values() #Poti ordona o lista folosind functia sort() #Nu poti ordona dictionare print keys keys.sort() print keys print values values.sort() print values

#Poti afla numarul de elemente dintr-un dictionar #utilizand functia len() print "Dictionarul are ", \ len(ages), "elemente" Bucla for In esenta, bucla for executa ceva pentru fiecare valoare din lista. Modul in care este setata poate parea putin confuz, dar de fapt este foarte simplu. Iata un exemplu al utilizarii acesteia: # Exemplu bucla 'for' # In primul rand creeaza o lista pe care o vom parcurge: newList = [45, 'mananca', 90210, "Buna dimineata", -67] # creeaza bucla: # Parcurge newList si pune fiecare element # in variabila value si afiseaz-o for value in newList: print value Dupa cum vezi, bucla trece prin toate valorile listei mentionate dupa in. Apoi le aseaza in value, executa codul imbricat in bucla si trece la urmatoarea valoare. Urmatorul exemplu parcurge un string care este citit de la tastatura: # exemplu de program ce parcurge un string word = raw_input("Introdu sirul de caractere: ") for letter in word: call = "Litera " + letter + "!" print call print "Sirul de caractere este:" print word + "!" Tocmai ai invatat cateva lucruri: Dupa cum vezi, variabilele string sunt liste de caractere. Programul trece prin fiecare litera (sau valoare) din cuvant si le afiseaza pe ecran. Crearea unei functii meniu Pana acum ai invatat despre variabile, liste, bucle si functii. In continuare vei putea vedea cateva exemple de programe ce utilizeaza notiunile parcurse. # FUNCTIA MENU # Programul citeste un string cu optiunile din meniu # si o intrebare # Asigura-te ca optiunile nu se repeta. def menu(list, question): for entry in list: print 1 + list.index(entry), print ") " + entry return input(question) - 1 Iata explicatia codului: def menu(list, question) defineste functia menu cu doi parametri: o lista cu optiunile meniului si intrebarea pentru alegerea unei optiuni. for entry in list parcurge lista entry list.index(entry) utilizeaza functia .index() pentru localiza pozitia elementului entry.

Elementul entry este afisat, apoi se trece la elementul urmator Dupa iesirea din bucla for, input(question) - 1 afiseaza intrebarea, apoi returneaza valoarea in programul principal. Nu a fost prea greu, nu? Programul propriu-zis are 5 linii acesta este miracolul a ceea ce am invatat pana acum! Vom verifica functia pe care am scris-o in urmatoarele exemple. Primul tau Joc Cum va arata primul tau program? Ce-ai spune despre un (foarte) simplu joc de aventuri? Pare a fi amuzant! Va cuprinde doar o camera a unei case si va fi extrem de simplu. Vor exista 5 articole si o usa. Intr-unul dintre cele 5 articole se va afla o cheie pentru usa. Trebuie sa gasesti cheia si sa deschizi usa. Iti voi oferi intai o varianta in pseudocod, apoi in python: # Versiunea in pseudocod a jocului Introdu functia menu in program Afiseaza un mesaj ce cuprinde descrierea camerei. Utilizatorul poate inspecta 6 obiecte: un vas cu plante, un tablou,\ o vaza, o veioza, un pantof si usa Spune calculatorului ca usa e incuiata Spune calculatorului unde se afla cheia Afiseaza meniul cu obiectele: Afiseaza cele 6 optiuni Afiseaza intrebarea "Ce obiect vrei sa examinezi?" daca utilizatorul vrea sa se uite catre: vasul cu plante: In cazul in care cheia e ascunsa aici, da-i cheia altfel spune-i ca nu se afla aici tablou: la fel ca mai sus etc. usa: daca utilizatorul are cheia, deschide usa altfel spune-i sa mai caute Afiseaza un mesaj de succes pentru completarea jocului. Din acesta putem scrie un program adevarat. Esti pregatit? Iata-l (treci peste comentarii): #PRIMUL TAU JOC #functia menu def menu(list, question): for entry in list: print 1 + list.index(entry), print ") " + entry return input(question) - 1 #Creeaza lista cu obiectele din camera: items = ["vas cu plante","tablou","vaza","veioza","pantof","usa"] #Cheia se afla in vaza (al doilea element din lista de mai sus): keylocation = 2

#Utilizatorul nu a gasit cheia: keyfound = 0 loop = 1 #Scrie un text de introducere: print "Aseara ai adormit in camera ta." print "Dimineata te-ai trezit incuiat intr-o camera necunoscuta, " print "si nu stii cum si cand ai ajuns acolo. In camera poti vedea " print len(items), "obiecte:" for x in items: print x print "" print "Usa e incuiata. Crezi ca poti gasi cheia?" #Atat timp cat utilizatorul se afla in camera #parcurge o bucla infinita: while loop == 1: choice = menu(items,"Ce obiect vrei sa examinezi? ") if choice == 0: if choice == keylocation: print "Ai gasit o cheie in vasul cu plante." print "" keyfound = 1 else: print "Vasul cu plante e gol." print "" elif choice == 1: if choice == keylocation: print "Ai gasit o cheie in spatele tabloului." print "" keyfound = 1 else: print "Nu se afla nimic in spatele tabloului." print "" elif choice == 2: if choice == keylocation: print "Ai gasit o cheie in vaza." print "" keyfound = 1 else: print "Vaza e goala." print "" elif choice == 3: if choice == keylocation: print "Ai gasit o cheie sub veioza." print "" keyfound = 1 else: print "Nu se afla nimic sub veioza." print ""

elif choice == 4: if choice == keylocation: print "Ai gasit o cheie in pantof." print "" keyfound = 1 else: print "Nu se afla nimic in pantof." print "" elif choice == 5: if keyfound == 1: loop = 0 print "Ai incercat cheia si usa a fost descuiata." print "" else: print "Usa e incuiata, trebuie sa gasesti cheia." print "" # Aminteste-ti ca \ continua codul pe urmatoarea linie print "Felicitari \ ai reusit sa iesi din camera." Un joc foarte simplu, dar amuzant. Nu fii speriat de numarul mare de linii de cod pentru ca multe dintre ele sunt instructiuni if , foarte usor de citit. Sa imbunatatim jocul Prima intrebare pe care ar trebui sa ti-o pui este functioneaza programul? Raspunsul este da. Apoi ar trebui sa te intrebi functioneaza bine? nu chiar. Functia menu() este grozava te scuteste de a tasta mult cod. Bucla 'while' este putin confuza 4 nivele de indentare intr-un singur program. Se poate si mai bine! In urmatoarele tutoriale vei vedea ca acest exemplu ar putea fi mult mai usor implementat cu ajutorul claselor. Dar, momentan, sa ne multumim cu o functie ce va reduce dezordinea. Ii vom transmite 2 parametri optiunea aleasa si locatia cheii. Valoarea returnata este 1 in cazul in care cheia a fost gasita si 0 in caz contrar. Sa vedem cum functioneaza: def inspect(choice,location): if choice == location: print "" print "Ai gasit cheia!" print "" return 1 else: print "" print "Nimic interesant aici." print "" return 0 Acum programul principal poate fi ceva mai simplu. Iata bucla while modificata: while loop == 1: keyfound = inspect(menu(items,"Ce obiect vrei sa examinezi? "),keylocation) if keyfound == 1: print "Ai incercat cheia si usa a fost descuiata!" loop = 0 Acum programul devine cu mult mai scurt de la 83 linii greoaie la 50 linii clare! Desigur, pierzi ceva din

versatilitate, toate articolele din camera vor genera aceleasi mesaje. In plus, jocul devine mai putin interesant deoarece usa este descuiata automat dupa ce gasesti cheia. Totodata, programul devine ceva mai greu de modificat. Cam atat despre liste si bucla for. In urmatorul tutorial din aceasta serie vei putea citi despre clase, obiecte, si utilizarea lor in Python. ================================================================= Introducere in Python - Partea a IV-a. Clase si obiecte Introducere Programarea in general se bazeaza foarte mult pe reutilizarea codului. De obicei, aceasta se realizeaza cu ajutorul functiilor. Daca ai scris deja un cod ce indeplineste o anumita sarcina, atunci il poti executa de oricate ori vrei daca il incluzi intr-o functie. In plus, o functie poate fi apelata de oriunde din cod si computerul va sti intotdeauna la ce te referi. Desigur, functiile isi au limitele lor. Ele nu stocheaza informatii cum ar valorile variabilelor, ceea ce inseamna ca de fiecare data cand este rulata, o functie incepe de la zero. Atunci, ce se intampla daca anumite functii si variabile se afla in stransa legatura si trebuie sa interactioneze destul de mult? Obiectele din lumea reala au doua caracteristici: stare si comportament. Cainii au stare (nume, culoare, rasa, le este foame) si comportament (latra, alearga, dau din coada). Si bicicletele au stare (trepte de viteza, cadenta a pedalei, frane) si comportament (schimbarea vitezei, schimbarea cadentei pedalei, aplicarea franei). Comportamentul unui obiect poate fi modelat cu usurinta cu ajutorul functiilor. Dar ce se intampla atunci cand vrei sa retii starea unui obiect? Ce se intampla daca de fiecare data cand te plimbi cu bicicleta, lantul slabeste, materialul de pe sa se uzeaza cate putin, devii din ce in ce mai frustrat si apare o noua zgarietura pe ghidon? O functie nu poate face asta. O functie conduce la un singur rezultat, nu la patru, cinci sau cinci sute. Avem nevoie de o modalitate de grupare a functiilor si a variabilelor intr-un singur loc, pentru a putea interactiona intre ele. Identificarea starii si a comportamentului in cazul obiectelor reale reprezinta o metoda minunata de a incepe sa gandesti in termenii programarii orientate pe obiecte. Obiectele software sunt din punct de vedere conceptual similare obiectelor lumii reale: si acestea au stare si comportament. Un obiect isi pastreaza starea in campuri (variabile in anumite limbaje de programare) si isi expun comportamentul prin metode (functii in anumite limbaje de programare). Metodele opereaza asupra starii interne a unui obiect si servesc ca mecanism primar in cazul comunicarii de la obiect la obiect. Ascunderea starii interne si solicitarea ca orice interactiune sa se execute prin intermediul metodelor obiectelor poarta numele de incapsulare a datelor principiul fundamental al programarii orientate pe obiecte. Crearea unei clase In lumea reala, deseori vei gasi multe obiecte individuale de acelasi fel. Pot exista mii de alte biciclete, toate avand aceleasi caracteristici, fiind acelasi model. Fiecare bicicleta a fost construita dupa acelasi tipar, deci contine aceleasi componente. In termenii programarii orientate pe obiecte, spunem ca bicicleta este o instanta a clasei de obiecte cunoscute sub numele de biciclete. Deci, o clasa reprezinta tiparul dupa care sunt create obiectele individuale, ce poarta numele de instante ale clasei. Deci cum definesti o clasa? In primul rand, declaratia unei clase trebuie sa inceapa cu operatorul class: # Definitia unei clase class nume_clasa: [instructiune 1] [instructiune 2]

[instructiune 3] [etc] Mai jos poti vedea un exemplu de cod ce defineste o clasa FormaGeometrica: #Exemplu de clasa class FormaGeometrica: def __init__(self,x,y): self.x = x self.y = y descriere = "Aceasta forma nu a fost descrisa inca" autor = "Nu exista un autor al acestei forme " def aria(self): return self.x * self.y def perimetrul(self): return 2 * self.x + 2 * self.y def seteazaDescriere(self,text): self.descriere = text def seteazaAutor(self,text): self.autor = text def scaleaza(self,scale): self.x = self.x * scale self.y = self.y * scale Dupa cum poti vedea, clasa Shape contine o descriere a unei forme geometrice (data de variabile) si operatiunile pe care le poti efectua cu forma (date de functii). Acesta este un aspect foarte important nu ai creat de fapt o forma, ci descrierea unei forme. Forma are o latime (x), o inaltime (y) si metode cu ajutorul caruia ii poti calcula aria si perimetrul. Ceea ce trebuie sa retii este ca definirea unei clase nu ruleaza nici un cod, ci are rolul de a grupa functii si variabile intr-o singura entitate. Functia denumita __init__ este apelata cand cream o instanta a clasei FormaGeometrica - adica, atunci cand cream o forma propriu-zisa, conform sablonului pe care il avem. Functia __init__ poarta denumirea de constructorul clasei. Pentru a te referi la elementele unei clase din interiorul acesteia, trebuie sa utilizezi operatorul self. De asemenea, self reprezinta primul parametru pentru orice functie definita in cadrul unei clase. Orice functie sau variabila creata pe primul nivel de indentare apartine automat clasei. Pentru a accesa aceste functii si variabile in alta locatie din cadrul clasei, denumirea lor trebuie sa fie precedata de self si de un punct (ex. self.nume_variabila). Utilizarea unei clase Este interesant ca putem crea o clasa, dar cum o putem utiliza? Iata cum poti crea un obiect de tipul FormaGeometrica: dreptunghi = FormaGeometrica (100,45) Valorile furnizate intre paranteze sunt de fapt parametri transmisi functiei __init__. Aceasta va fi executata automat, initializand proprietatile x si y ale obiectului cu valorile 100 si respectiv 45. Instanta clasei este retinuta in variabila rectangle. In acest moment, iti poti imagina instanta clasei noastre, rectangle, ca fiind o colectie de variabile si de functii. Pentru a accesa proprietatile si metodele obiectului din afara clasei vei inlocui cuvantul cheie self cu numele variabilei, respectiv rectangle. De exemplu: #afiseaza aria dreptunghiului:

print dreptunghi.aria() #afiseaza perimetrul dreptunghiului: print dreptunghi.perimetrul() #seteaza descrierea dreptunghiului dreptunghi. seteazaDescriere("Un dreptunghi a carui latime este de doua ori mai \mare decat inaltimea") #scaleaza dreptunghiul cu 50% dreptunghi.scaleaza(0.5) #afiseaza aria dreptunghiului scalat print dreptunghi.aria() Desigur, poti crea oricat de multe instante ale unei clase. Iata un exemplu: dreptunghi_lung = Shape(120,10) dreptunghi_inalt = Shape(130,120) Ambele obiecte, dreptunghi_lung cat si dreptunghi_inalt, au propriile functii si variabile sunt total independente una de alta. Iata cativa termeni specifici pentru programarea orientata pe obiecte: Atunci cand cream o clasa se numeste ca o definim. Gruparea variabilelor si metodelor similare poarta numele de incapsulare. O variabila definita in interiorul unei clase poarta numele de proprietate. O functie definita in interiorul unei clase poarta numele de metoda. Un obiect este o instanta a unei clase. O clasa reprezinta o structura de date - ea retine informatii si defineste metodele necesare pentru procesarea acestora. Mostenirea Cunoastem modul in care clasele grupeaza variabile si functii, cunoscute sub denumirea de atribute si metode, in asa fel incat datele si codul care le proceseaza sa se afle in aceeasi locatie. Putem crea oricate instante ale acelei clase, pentru a nu mai fi necesar sa scriem un nou cod pentru fiecare obiect pe care il cream. Dar in cazul adaugarii de noi elemente designului unei biciclete? Aici intervine mostenirea. Programarea orientata pe obiecte le permite claselor sa mosteneasca starile si comportamentele comune din alte clase, ceea ce inseamna crearea unei clase copil pe baza unei clase parinte. Clasa copil contine toate proprietatile si metodele clasei parinte, dar poate include si elemente noi. In cazul in care vreuna dintre noile proprietati sau metode are aceeasi denumire ca o proprietate sau metoda din clasa parinte, vor fi utilizate cele din clasa copil. Python face mostenirea foarte usoara. Iti amintesti de clasa FormaGeometrica? Sa zicem ca am vrea sa definim o clasa noua, sa spunem un patrat, pe baza clasei precedente: class Patrat(FormaGeometrica): def __init__(self,x): self.x = x self.y = x Dupa cum poti observa, numele clasei parinte a fost trecut intre paranteze dupa numele clasei copil. Aceasta inseamna ca noua clasa Patrat va contine toate proprietatile si metodele clasei FormaGeometrica. Singurul lucru pe care trebuie sa-l mai faci este sa redefinesti functia __init__, astfel incat latimea (x) si inaltimea(y) obiectului de tip Patrat sa fie egale.

Sa aplicam ce am invatat si sa cream o noua clasa, de aceasta data mostenita din Patrat: class PatratDublu(Patrat): def __init__(self,y): self.x = 2 * y self.y = y def perimetrul(self): return 2 * self.x + 3 * self.y Aceasta clasa va reprezenta doua patrate lipite, ceea ce inseamna ca trebuie sa redefinim si functia ce calculeaza perimetrul. Ca exercitiu, incearca sa creezi o instanta a acestei clase. Referinte si liste de obiecte Operatorul de atribuire functioneaza diferit pentru obiecte. In cazul variabilelor scalare, daca scriem variabila2 = variabila1 inseamna ca variabila2 va prelua valoarea variabilei 1. In cazul obiectelor, daca avem o atribuire instanta2 = instanta1, cele doua variabile vor reprezenta referinte catre acelasi obiect. Cu alte cuvinte, daca proprietatile obiectului instanta1 sunt modificate, aceasta modificare va fi vizibila si in instanta2. In alte limbaje, astfel de atribuiri sunt efectuate cu ajutorul pointerilor, dar in python aceasta operatie se efectueaza transparent. Aspectul final pe care il vom discuta se refera la dictionare de obiecte. Tinand minte ceea ce tocmai am invatat despre pointeri, putem atribui o instanta a unei clase unei intrari dintr-o lista sau dictionar. Aceasta permite gruparea mai multor obiecte sub un singur nume de lista sau dictionar. Iata un exemplu: # Acest exemplu presupune ca au fost deja definite # clasele FormaGeometrica, Patrat si PatratDublu. # Mai intai cream dictionarul: dictionary = {} # Apoi definim cateva obiecte pe care le adaugam in dictionar: dictionary["Patrat dublu 1"] = PatratDublu(5) dictionary["Dreptunghi lung"] = FormaGeometrica(600,45) # Calculam aria unui obiect din dictionar: print dictionary["Dreptunghi lung"].aria() # Setam autorul unui obiect din dictionary, apoi il afisam dictionary["Patrat dublu 1"].seteazaAutor("Autor") print dictionary["Patrat dublu 1"].autor Dupa cum poti observa, pur si simplu am inlocuit numele de variabila din partea stanga cu un element din dictionar. Interesant, nu? Cam atat despre clase si obiecte. In urmatorul tutorial vei putea citi despre module si utilizarea lor in Python. =====================================================================