Ce vei învăța astăzi?
După această lecție vei înțelege de ce folosim subprograme (blocuri de cod cu un nume, care pot fi rulate de mai multe ori), cum se definește o funcție în Python și cum o apelăm (o folosim scriind numele ei urmat de paranteze) pentru a o folosi de mai multe ori.
De ce folosim subprograme?
Definiție: Un subprogram (numit și funcție) este un bloc de cod cu un nume, pe care îl putem rula de mai multe ori dintr-un singur loc.
Analogia din viața reală:
Gândește-te la o rețetă de tort. Dacă vrei să faci tortul de 3 ori, nu rescrii rețeta de 3 ori. O scrii o singură dată, apoi o folosești ori de câte ori ai nevoie.
Exact așa face un subprogram: scriem codul o dată și îl apelăm de multe ori.
Beneficii: reutilizare (nu repetăm cod), claritate (programul e mai ușor de citit) și modularizare (împărțim problema în bucăți mici).
Definirea unei funcții cu def
În Python, o funcție se definește cu cuvântul cheie def, urmat de numele funcției și de paranteze. După două puncte, scriem corpul funcției, indentat (adică scris cu patru spații la începutul fiecărui rând).
def nume_functie():
print("Corpul funcției - instrucțiuni indentate")
nume_functie()
Antetul (prima linie a funcției, formată din def, numele și parantezele) este linia def nume_functie():. Corpul sunt instrucțiunile indentate de sub antet. Apelul este folosirea funcției, scriind numele ei urmat de paranteze.
Apelul unei funcții
O funcție nu se execută singură atunci când o definim. Ea se execută doar când scriem un apel, adică numele ei urmat de paranteze: nume_functie().
def saluta():
print("Salut! Bine ai venit la orele de Python!")
saluta()
saluta()
saluta()
Observă: am scris codul o singură dată în funcție, dar l-am rulat de 3 ori prin apeluri. Dacă vrem să afișăm mesajul de 100 de ori, tot o singură funcție folosim.
def mesaj():
print("Învăț să programez în Python!")
for i in range(4):
mesaj()
Exercițiu de completare
Completează enunțul cu cuvintele potrivite:
În Python, o ______ este un bloc de cod cu un nume, pe care îl putem rula de mai multe ori. Pentru a o defini, folosim cuvântul cheie ______. Instrucțiunile din interiorul funcției, scrise cu indentare, formează ______-ul funcției. Pentru a o folosi, scriem un ______, adică numele ei urmat de paranteze.
Bancă de cuvinte:
Test de înțelegere
Test rapid - subprograme în Python:
1. Definim o funcție în Python cu ajutorul cuvântului cheie:
2. Corpul funcției este format din instrucțiunile:
3. Apelăm o funcție scriind:
Test suplimentar
Test suplimentar - subprograme:
1. Ce afișează programul def salut(): print("Bună ziua!") urmat de apelul salut()?
2. O funcție definită cu def se execută:
3. Care secvență apelează corect funcția numita nume_functie?
Aprofundare
Funcție sau procedură? În unele limbaje clasice (Pascal, C++) se face distincție între funcție (întoarce o valoare prin return) și procedură (doar execută acțiuni, fără valoare returnată). În Python nu există această distincție: totul se definește cu def, iar o funcție fără return întoarce implicit valoarea specială None (un fel de „nimic" pe care Python îl întoarce atunci când funcția nu are return).
- Documentarea funcțiilor: imediat sub antet putem scrie un șir de caractere între trei ghilimele, numit docstring, care descrie rolul funcției. Putem citi documentația cu
help(nume_functie). - Funcții anidate: Python permite definirea unei funcții în interiorul alteia; funcția interioară este vizibilă doar în interiorul celei exterioare.
- Funcția goală: dacă nu avem încă nimic de scris în corp, folosim instrucțiunea
pass; altfel obținemIndentationError. - Ordinea definiției: la momentul apelului funcția trebuie să fie deja definită în program, altfel primim
NameError. - Caz particular: apelurile pot fi înlănțuite - o funcție poate apela altă funcție, iar Python gestionează singur stiva de apeluri și se întoarce la locul corect.
PbInfo - Funcție care afișează
Enunț:
Cerință: Se definește funcția afiseaza() care afișează pe ecran mesajul "Salut!". Să se apeleze funcția.
Date de intrare:
Programul nu citește date de la tastatură.
Date de ieșire:
Programul va afișa pe ecran mesajul "Salut!" (prin apelul funcției).
Restricții și precizări:
Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.
Exemplu:
Intrare:
(fără date de intrare)
Ieșire:
Salut!
Cum gândim soluția:
- Definim funcția cu
def afiseaza(): - În corpul funcției afișăm mesajul cu
print("Salut!") - La final apelăm funcția cu
afiseaza()
Scrie soluția în Python:
Soluție corectă:
def afiseaza():
print("Salut!")
afiseaza()
Ce învățăm: o funcție se definește cu def, corpul este indentat, iar funcția se execută doar prin apel.
PbInfo - Mesaj repetat
Enunț:
Cerință: Se definește funcția mesaj(n) care afișează mesajul "Salut" de n ori. Să se citească n de la tastatură și să se apeleze funcția.
Date de intrare:
Programul citește de la tastatură un număr natural n.
Date de ieșire:
Programul va afișa de n ori cuvântul "Salut", fiecare pe o linie.
Restricții și precizări:
Valorile citite sunt numere întregi, iar n este un număr natural, cu 1 <= n <= 1000.
Exemplu:
Intrare:
3
Ieșire:
Salut Salut Salut
Cum gândim soluția:
- Definim funcția cu parametrul n:
def mesaj(n): - În corp folosim
for i in range(n)pentru a afișa de n ori - Citim n cu
input()și apelăm funcția cumesaj(n)
Scrie soluția în Python:
Soluție corectă:
def mesaj(n):
for i in range(n):
print("Salut")
n = int(input())
mesaj(n)
Ce învățăm: o funcție poate primi date prin parametri, iar o buclă repetă o instrucțiune de n ori.
Exercițiul Practic: Primele funcții în Python
Sarcini de lucru
Completează următoarele sarcini pentru a-ți consolida cunoștințele despre definirea și apelul funcțiilor
Sarcina 1: Tabla înmulțirii cu 3
Cerință: Scrie un program în care definești o funcție tabla() care afișează tabla înmulțirii cu 3 (de la 3*1 până la 3*10), apoi apelează funcția.
Soluție:
def tabla():
for i in range(1, 11):
print("3 *", i, "=", 3 * i)
tabla()
Verifică: funcția este definită o dată cu def, iar corpul ei folosește o buclă for cu range(1, 11).
Sarcina 2: Două funcții, START și STOP
Cerință: Scrie un program cu două funcții: una afișează "START", cealaltă afișează "STOP". Apelează-le la rând: mai întâi start(), apoi stop().
Soluție:
def start():
print("START")
def stop():
print("STOP")
start()
stop()
Verifică: cele două funcții sunt definite separat, iar apelurile le rulează în ordinea scrisă.