Python clasa a 9-a · Manual Python
Laborator Python
LECȚIE

3.3. Funcții cu și fără valoare returnată

Transmiterea parametrilor, variabile locale/globale și mecanismul de apel

ANALIZĂ
→
PROIECTARE
→
IMPLEMENTARE
→
TESTARE
→
DEPANARE
01
OBIECTIVE

La finalul lecției vei putea...

  • să diferențiezi o funcție care produce o valoare de una care realizează doar un efect, precum afișarea;
  • să utilizezi instrucțiunea return pentru a transmite rezultatul unei funcții;
  • să folosești valoarea returnată într-o expresie sau să o memorezi într-o variabilă;
  • să explici rolul parametrilor și transmiterea argumentelor la apel;
  • să diferențiezi variabilele locale de variabilele globale;
  • să explici de ce este preferabil ca datele necesare unei funcții să fie transmise prin parametri;
  • să urmărești mecanismul de apel, executare și revenire dintr-o funcție;
  • să alegi între o funcție cu valoare returnată și una care realizează un efect.
02
EXPLICAȚIE

return, parametri și domeniul variabilelor

2.1. Funcție fără valoare returnată

def afiseaza_patrat(x):
    print(x * x)

a = 6
afiseaza_patrat(a)

Funcția produce un efect, aici afișarea unui rezultat.

2.2. Funcție cu valoare returnată

def patrat(x):
    return x * x

p = patrat(6)
print(p)
print(p + 10)

La apelul patrat(6), funcția calculează 36 și îl returnează. Valoarea poate fi atribuită, afișată sau folosită într-o expresie.

2.3. return oprește execuția

def semn(x):
    if x > 0:
        return 1
    if x < 0:
        return -1
    return 0

Când se execută un return, funcția se încheie pe acel traseu.

2.4. Variabile locale și globale

def calcul():
    x = 10
    print("În funcție:", x)

x = 25
calcul()
print("În programul principal:", x)

Variabila creată în funcție este locală. O variabilă definită în afara funcțiilor poate fi accesată pentru citire, dar este preferabil să transmitem datele prin parametri.

mesaj = "Salut"

def afiseaza():
    print(mesaj)

afiseaza()

2.5. Transmiterea parametrilor

def modifica(x):
    x = x + 10
    print("În funcție:", x)

a = 5
modifica(a)
print("În programul principal:", a)

Pentru valorile numerice folosite aici, modificarea parametrului în interiorul funcției nu schimbă automat variabila din programul principal. Pentru a transmite rezultatul folosim return.

03
EXEMPLU INTUITIV

Acțiune sau rezultat

Fără return

Ca un buton care aprinde un bec: funcția produce un efect.

Cu return

Ca un aparat de măsură: primești o valoare pe care o poți folosi mai departe.

Ce alegem?

Vrem să folosim rezultatul unei funcții într-o expresie. Ce este necesar?

04
PYTHON

Funcții care returnează valori

def afiseaza_dublu(x):
    print(2 * x)

def dublu(x):
    return 2 * x

a = 7
afiseaza_dublu(a)
b = dublu(a)
print("b =", b)
print("b + 1 =", b + 1)

Prima funcție produce efectul de afișare. A doua produce o valoare care este preluată în b.

Valoarea returnată

Dacă f(x) returnează x*x, cât este f(4)?

05
ALGORITM / PSEUDOCOD

Subprogram cu rezultat returnat

subprogram dublu(x) returnează
    returnează 2 * x
■

citește n
r ← Apel dublu(n)
afișează r

În pseudocod, subprogramul este declarat cu un rezultat returnat. În Python, mecanismul este exprimat prin return.

06
ATENȚIE!

print() nu este return

  • print() afișează o valoare; return transmite o valoare către locul apelului.
  • Dacă o funcție este folosită într-o expresie, ea trebuie să returneze o valoare potrivită.
  • return încheie executarea funcției pe acel traseu.
  • O variabilă locală nu trebuie confundată cu una globală cu același nume.
  • Evită folosirea inutilă a variabilelor globale. Parametrii fac dependențele mai clare.
  • Modificarea unui parametru numeric în funcție nu modifică automat variabila din programul principal.
  • O funcție poate avea mai multe puncte de return dacă fiecare caz este clar justificat.
07
EXEMPLU REZOLVAT

CMMDC ca funcție cu valoare returnată

Problemă

Se citesc două numere naturale a și b. Definiți funcția cmmdc(a, b) care returnează CMMDC-ul folosind algoritmul lui Euclid cu împărțiri repetate.

Algoritm

subprogram cmmdc(a, b) returnează
    cât timp b ≠ 0 execută
        r ← a % b
        a ← b
        b ← r
    ■
    returnează a
■

citește a, b
g ← Apel cmmdc(a, b)
afișează g

Python

def cmmdc(a, b):
    while b != 0:
        r = a % b
        a = b
        b = r
    return a

a = int(input("a = "))
b = int(input("b = "))
g = cmmdc(a, b)
print("CMMDC =", g)

Urmărirea variabilelor

Pasabr
04818-
1181212
21266
3600

Testare

Pentru 48 și 18, resturile sunt 12, 6, 0, iar rezultatul este 6. Testăm și valori egale și situații precum un număr egal cu 1.

Verificare

Algoritmul lui Euclid păstrează CMMDC-ul prin înlocuirea perechii cu (b, a % b). Când b devine 0, a este CMMDC-ul.

08
EXERCIȚII DE BAZĂ

Transformăm efectele în rezultate

  1. Transformă funcția afiseaza_patrat(x) într-o funcție patrat(x) care returnează rezultatul.
  2. Definește o funcție maxim(a, b) care returnează maximul celor două numere.
  3. Definește o funcție este_par(n) care returnează True dacă n este par și False în caz contrar.
  4. Definește o funcție suma_cifre(n) care returnează suma cifrelor lui n.
  5. Definește o funcție numar_divizori(n) care returnează numărul divizorilor pozitivi ai lui n.
  6. Scrie un program care apelează o funcție de două ori și adună cele două rezultate returnate.
  7. Demonstrează printr-un exemplu diferența dintre print() și return.
09
EXERCIȚII DE APROFUNDARE

Reutilizare, domenii și rezultate

  1. Definește o funcție care returnează numărul de factori primi distincți ai unui număr.
  2. Definește o funcție care returnează cifra maximă a unui număr natural.
  3. Definește o funcție care returnează valoarea obținută prin inversarea cifrelor unui număr.
  4. Definește o funcție care returnează conversia unui număr din baza 10 în baza 2 ca șir de caractere, fără bin().
  5. Construiește o funcție care returnează CMMMC(a,b), folosind CMMDC(a,b). Explică de ce este utilă reutilizarea funcției.
  6. Construiește un exemplu în care o variabilă locală are același nume ca una globală și explică ce valoare este folosită în fiecare context.
  7. Analizează un program care modifică o variabilă globală din mai multe funcții. Rescrie-l folosind parametri și return.
10
VERIFICARE

Verifică-ți înțelegerea

Mini-quiz

1. Ce transmite return?

2. Ce se întâmplă după return?

3. Variabila creată în corpul funcției este, în mod obișnuit...

4. Ce este de preferat pentru datele necesare funcției?

5. Ce rămâne în a după modifica(a), dacă a=5 și funcția face x=x+10?

11
MINI-PROIECT

Biblioteca de funcții numerice

Biblioteca de funcții numerice

Realizează un modul de funcții pentru probleme cu numere: suma cifrelor, numărul de divizori, testul de primalitate, CMMDC și CMMC. Funcțiile care calculează valori trebuie să le returneze.

  • nu folosi variabile globale pentru datele principale;
  • transmite prin parametri valorile necesare;
  • folosește return pentru rezultate;
  • testează fiecare funcție separat cu cel puțin trei cazuri;
  • include cel puțin un caz-limită și explică rezultatul.