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

3.2. Subprograme definite de utilizator

def, parametri, apel, corpul funcției și mecanismul de executare

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

La finalul lecției vei putea...

  • să explici rolul subprogramelor definite de utilizator;
  • să identifici antetul, parametrii și corpul unei funcții Python;
  • să definești o funcție folosind instrucțiunea def;
  • să apelezi o funcție cu argumente potrivite;
  • să explici diferența dintre parametrul formal și argumentul efectiv;
  • să urmărești mecanismul de executare al unei funcții;
  • să folosești funcții pentru a evita repetarea acelorași instrucțiuni;
  • să proiectezi funcții simple pentru operații matematice și prelucrări algoritmice deja cunoscute.
02
EXPLICAȚIE

Definirea și apelul funcțiilor

Pe măsură ce programele cresc, aceeași prelucrare poate apărea în mai multe locuri. Un subprogram definit de utilizator grupează instrucțiuni care realizează o operație clară și poate fi apelat ori de câte ori este necesar.

2.1. Definirea unei funcții

def mesaj():
    print("Bun venit!")

mesaj()
mesaj()

Cuvântul-cheie def începe definiția. După numele funcției urmează parantezele și două puncte. Instrucțiunile indentate formează corpul funcției. Definirea nu execută corpul.

2.2. Parametri și argumente

def patrat(x):
    print(x * x)

patrat(5)
patrat(12)

În definiție, x este parametru formal. La apel, 5 și 12 sunt argumente efective.

2.3. Mecanismul de executare

  1. Programul ajunge la definiția funcției; corpul nu este executat atunci.
  2. Programul întâlnește un apel.
  3. Argumentele sunt transmise parametrilor.
  4. Se execută corpul funcției.
  5. După terminarea corpului, execuția revine după apel.
  6. La un nou apel, procesul se repetă cu noile argumente.

2.4. Mai mulți parametri

def suma(a, b):
    print(a + b)

suma(7, 4)
suma(20, 5)

Numărul și poziția argumentelor trebuie să corespundă parametrilor necesari.

03
EXEMPLU INTUITIV

Funcția ca operație reutilizabilă

Rețeta

Aceeași rețetă poate fi folosită de mai multe ori, schimbând cantitățile.

Funcția

Definim o operație o singură dată și o solicităm prin apel, cu datele necesare.

Ce se execută?

Ce se întâmplă la patrat(5) dacă def patrat(x) este deja definită?

04
PYTHON

Funcții definite de utilizator

def suma(a, b):
    print("Suma =", a + b)

def diferenta(a, b):
    print("Diferența =", a - b)

x = int(input("x = "))
y = int(input("y = "))

suma(x, y)
diferenta(x, y

Funcțiile sunt definite înainte de apel. Variabilele x și y sunt argumente efective, iar a și b sunt parametri formali.

Parametru sau argument?

În def f(x): ..., ce este x?

05
ALGORITM / PSEUDOCOD

Definim separat subprogramul și apelul

subprogram suma(a, b)
    s ← a + b
    afișează s
■

citește x, y
Apel suma(x, y)

Pseudocodul separă definiția subprogramului de apelul său. În Python, forma corespunzătoare folosește def și indentarea corpului.

06
ATENȚIE!

Greșeli frecvente

  • Definirea unei funcții nu înseamnă apelarea ei. Corpul se execută la apel.
  • Parametrul formal apare în definiție; argumentul efectiv apare la apel.
  • Numărul și poziția argumentelor trebuie să corespundă parametrilor necesari.
  • Corpul funcției trebuie indentat corect.
  • O funcție trebuie să aibă o responsabilitate clară.
  • În această lecție funcțiile sunt folosite în principal pentru organizarea instrucțiunilor; return va fi aprofundat în lecția 3.3.
07
EXEMPLU REZOLVAT

Afișarea divizorilor printr-o funcție

Problemă

Se citește un număr natural n. Să se definească o funcție care afișează toți divizorii pozitivi ai lui n și să fie apelată pentru n.

Analiză

Intrare: n > 0. Ieșire: divizorii pozitivi. Grupăm parcurgerea cunoscută într-o funcție.

Algoritm

subprogram afiseaza_divizori(n)
    pentru d ← 1, n execută
        dacă n % d = 0 atunci
            afișează d
        ■
    ■
■

citește n
Apel afiseaza_divizori(n)

Python

def afiseaza_divizori(n):
    for d in range(1, n + 1):
        if n % d == 0:
            print(d, end=" ")

n = int(input("n = "))
afiseaza_divizori(n)

Urmărirea variabilelor

EtapăndAcțiune
apel12-se transmite 12 funcției
112112 % 1 = 0 → afișează 1
212212 % 2 = 0 → afișează 2
312312 % 3 = 0 → afișează 3
412412 % 4 = 0 → afișează 4
612612 % 6 = 0 → afișează 6
12121212 % 12 = 0 → afișează 12

La apel, parametrul primește valoarea citită. Execuția intră în funcție, parcurge valorile lui d, apoi revine în programul principal.

08
EXERCIȚII DE BAZĂ

Primele funcții

  1. Definește funcția salut() care afișează un mesaj și apeleaz-o de trei ori.
  2. Definește funcția afiseaza_patrat(x), care afișează pătratul lui x.
  3. Definește funcția afiseaza_maxim(a, b), care afișează maximul celor două valori.
  4. Definește funcția afiseaza_paritate(n), care afișează dacă n este par sau impar.
  5. Definește funcția afiseaza_cifre(n), care afișează cifrele unui număr folosind prelucrarea cunoscută din capitolul 2.
  6. Definește funcția suma_cifre(n), care, în această etapă, afișează suma cifrelor lui n.
  7. Definește o funcție care afișează divizorii unui număr și apeleaz-o pentru două numere citite.
09
EXERCIȚII DE APROFUNDARE

Reutilizare și combinare

  1. Definește o funcție care afișează toți divizorii proprii ai unui număr.
  2. Definește o funcție care afișează dacă un număr este prim. Folosește o parcurgere eficientă deja studiată.
  3. Definește o funcție care afișează CMMDC-ul a două numere, folosind algoritmul lui Euclid.
  4. Definește o funcție care afișează conversia unui număr natural din baza 10 în baza 2.
  5. Scrie un program în care aceeași funcție de verificare a divizibilității este apelată pentru mai multe perechi.
  6. Analizează un program în care aceeași secvență apare de trei ori. Rescrie-l folosind o funcție și explică avantajul.
10
VERIFICARE

Verifică-ți înțelegerea

Mini-quiz

1. Care este rolul lui def?

2. În definiția f(x), x este...

3. Când se execută corpul?

4. În f(7,3), 7 și 3 sunt...

5. Ce trebuie să fie corect în corpul funcției?

11
MINI-PROIECT

Trusa de operații algoritmice

Trusa de operații algoritmice

Construiește un program care citește mai multe valori și pune la dispoziție, prin funcții separate, operații precum afișarea divizorilor, verificarea parității, calculul sumei cifrelor și afișarea CMMDC pentru două valori.

  • fiecare funcție are o singură responsabilitate principală;
  • parametrii sunt folosiți pentru datele necesare funcției;
  • programul principal conține citirea datelor și apelurile;
  • include cel puțin trei seturi de date de test;
  • explică, pentru un apel, traseul execuției de la programul principal la funcție și înapoi.