Sunteți pe pagina 1din 8

Introducere in Python - Partea a II-a. Functii. 01.08.

2009 In acest tutorial vei putea citi despre functii predefinite in Python si functii definite de utilizator, cat si despre preluarea inputului de la tastatura. 3361 afisari (0 voturi) 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 0 30 min Rating

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 aduna numerele afiseaza rezultatul daca este optiunea 2: citeste primul numar citeste cel de-al doilea efectueaza scaderea afiseaza rezultatul daca este optiunea 3: citeste primul numar citeste cel de-al doilea inmulteste-le afiseaza rezultatul daca este optiunea 4: citeste primul numar citeste cel de-al doilea efectueaza impartirea afiseaza rezultatul daca este optiunea 5: iesire din bucla afiseaza un mesaj de iesire TERMINA PROGRAMUL

numar

numar

numar

numar

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 print print print print print print "Optiunile tale sunt:" " " "1) Adunare" "2) Scadere" "3) Inmultire" "4) Impartire" "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 + elif choice == 2: sub2 = input("Scade asta: ") sub1 = input("din asta: ") print sub1, "-", sub2, "=", sub1 elif choice == 3: mul1 = input("Inmulteste asta: ") mul2 = input("cu asta: ") print mul1, "*", mul2, "=", mul1 * elif choice == 4: div1 = input("Imparte asta: ") div2 = input("la asta: ") print div1, "/", div2, "=", div1 / elif choice == 5: loop = 0 ")

add2

sub2

mul2

div2

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. Copyright 2008-2010 E-LEARN.ro. Toate drepturile rezervate. Conceput si realizat de Neokinetics Software.

S-ar putea să vă placă și