Home » Articole » Articole » Calculatoare » Programare » Python » Exemplu de funcții avansate în limbajul de programare Python

Exemplu de funcții avansate în limbajul de programare Python

postat în: Python 0

Pentru a arăta modalități mai avansate de utilizare a funcțiilor, vom face acum o parcurgere pentru următorul program:

def mult(a, b):
    if b == 0:
        return 0
    rest = mult(a, b - 1)
    value = a + rest
    return value
result = mult(3, 2)
print("3 * 2 = ", result)

Practic, acest program creează o funcție de multiplicare a numărului întreg pozitiv (care este mult mai lentă decât funcția de multiplicare încorporată) și apoi demonstrează această funcție folosind funcția. Acest program demonstrează utilizarea recursiunii, adică o formă de iterație (repetiție) în care există o funcție care se autoinvocă în mod repetat până când o condiție de ieșire este îndeplinită. Utilizează adunări repetate pentru a da același rezultat ca și înmulțirea: de ex. 3 + 3 (adunare) oferă același rezultat ca 3 * 2 (înmulțire).

Întrebare: Care este primul lucru pe care îl face programul?

Răspuns: Primul lucru făcut este că funcția
mult
este definită cu liniile:

def mult(a, b):
    if b == 0:
        return 0
    rest = mult(a, b - 1)
    value = a + rest
    return value

Aceasta creează o funcție care ia doi parametri și returnează o valoare când este finalizată. Mai târziu, această funcție poate fi rulată.

Ce se întâmplă mai departe?

Următoarea linie după funcție, result = mult(3, 2) este rulată.

Ce face această linie?

Această linie va atribui valoarea returnată a lui mult(3, 2) variabilei result.

Și ce returnează mult(3, 2)?

Trebuie să facem o prezentare a funcției mult pentru a afla.

Ce se întâmplă mai departe?

Variabila a primește valoarea 3 atribuită acesteia și variabila b primește valoarea 2 atribuită acesteia.

Și apoi?

Linia if b == 0: este rulată. Deoarece b are valoarea 2, aceasta este falsă, astfel încât linia return 0 este omisă.

Și atunci ce?

Se rulează linia rest = mult(a, b - 1). Această linie setează variabila locală rest la valoarea mult(a, b - 1). Valoarea lui a este 3 și valoarea lui b este 2, deci apelul funcției este mult(3,1)

Deci, care este valoarea lui mult(3,1)?

Va trebui să rulăm funcția mult cu parametrii 3 și 1.

Deci, ce se întâmplă în continuare?

Variabilele locale din noua rulare a funcției sunt setate astfel încât a să aibă valoarea 3 și b să aibă valoarea 1. Deoarece acestea sunt valori locale, acestea nu afectează valorile anterioare ale lui a și b.

Și apoi?

Deoarece b are valoarea 1, declarația if este falsă, deci următoarea linie devine rest = mult(a, b - 1).

Ce face această linie?

Această linie va atribui mult(3, 0) pentru rest.

Deci care este acea valoare?

Va trebui să rulăm funcția încă o dată pentru a afla asta. De data aceasta a are valoarea 3 și b are valoarea 0.

Deci, ce se întâmplă în continuare?

Prima linie din funcție de rulat este if b == 0:.
b
are valoarea 0, astfel încât următoarea linie de rulat este return 0

Și ce face linia return 0?

Această linie returnează valoarea 0 din funcție.

Deci?

Deci acum știm că mult(3, 0) are valoarea 0. Acum știm ce a făcut linia rest = mult(a, b - 1) deoarece am rulat funcția mult cu parametrii 3 și 0. Am terminat de rulat mult(3, 0) și acum revenim la rularea mult(3, 1). Variabilei rest i se atribuie valoarea 0.

Ce linie urmează?

Linia value = a + rest este rulată în continuare. În această rulare a funcției, a = 3 și rest = 0, deci acum value =
3
.

Ce se întâmplă mai departe?

Linia return value este rulată. Aceasta returnează 3 din funcție. Aceasta iese și din rularea funcției mult(3, 1). După ce se apelează return , revenim la rularea mult(3, 2).

Unde eram înmult(3, 2)?

Am avut variabilele a = 3 și b = 2 și am examinat linia rest = mult(a, b - 1).

Deci ce se întâmplă acum?

Variabila rest primește 3 alocat acestuia. Următoarea linie
value = a + rest
setează valoarea la 3 + 3 sau 6.

Deci acum ce se întâmplă?

Următoarea linie rulează, aceasta returnează 6 din funcție. Acum revenim la rularea liniei result = mult(3, 2) care acum poate atribui valoarea 6 variabilei result.

Ce se întâmplă mai departe?

Următoarea linie după funcție, print("3 * 2 = ", result) este rulată.

Și ce face aceasta?

Se imprimă 3 * 2 = și valoarea rezultatului care este 6. Linia completă tipărită este 3 * 2 = 6.

Ce se întâmplă în general?

Practic am folosit două fapte pentru a calcula multiplu al celor două numere. Primul este că orice număr multiplicat cu 0 este 0 (x * 0 = 0). Al doilea este că un număr multiplicat cu un alt număr este egal cu primul număr plus primul număr multiplicat cu al doilea număr minus 1 (x
* y = x + x * (y - 1)
). Deci, ceea ce se întâmplă este că 3 * 2 este mai întâi convertit în 3 + 3 * 1. Apoi 3 * 1 este convertit în 3 + 3 * 0. Apoi știm că orice număr multiplicat cu 0 este 0, deci 3 * 0 este 0. Atunci putem calcula că 3 + 3 * 0 este 3 + 0 care este 3. Acum știm ce este 3 * 1, astfel încât să putem calcula că 3 + 3 * 1 este 3 + 3 care este 6.

Astfel funcționează totul:

mult(3, 2)
3 + mult(3, 1)
3 + 3 + mult(3, 0)
3 + 3 + 0
3 + 3
6

Recursiune

Constructele de programare care rezolvă o problemă prin rezolvarea unei versiuni mai mici a aceleiași probleme se numesc recursive. În exemplele din acest capitol, recursiunea este realizată prin definirea unei funcții care se autoapelează. Acest lucru facilitează implementarea soluțiilor la sarcinile de programare, deoarece poate fi suficient să luați în considerare următorul pas al unei probleme în loc de întreaga problemă deodată. De asemenea, este util, deoarece permite exprimarea unor concepte matematice cu un cod simplu, ușor de citit.

Orice problemă care poate fi rezolvată cu recursivitate ar putea fi reimplementată cu bucle. Utilizarea acestuia din urmă are ca rezultat o performanță mai bună. Cu toate acestea, implementările echivalente care utilizează bucle sunt de obicei mai greu de realizat corect.

Probabil cea mai intuitivă definiție a recursiunii este:

Recursiunea

Dacă tot nu îl înțelegi, vezi recursiunea.

Încercați să parcurgeți exemplul factorial dacă exemplul de multiplicare nu îl înțelegeți.

Exemple

factorial.py

#definește o funcție care calculează factorialul

def factorial(n):
    if n == 0:
        return 1
    if n<0:
        return "Error, negative numbers do not have factorial values!!"
    return n * factorial(n - 1)

print("2! =", factorial(2))
print("3! =", factorial(3))
print("4! =", factorial(4))
print("5! =", factorial(5))
print("-3! =", factorial(-3))

Rexultat:

2! = 2
3! = 6
4! = 24
5! = 120
-3! = Error, negative values do not have factorial values!!

countdown.py

def count_down(n):
    print(n)
    if n > 0:
        return count_down(n-1)

count_down(5)

Rezultat:

5
4
3
2
1
0

(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)

Proiectarea, dezvoltarea şi întreţinerea siturilor web
Proiectarea, dezvoltarea şi întreţinerea siturilor web

Ghidul complet pentru proiectarea, dezvoltarea și întreținerea siturilor web, o resursă indispensabilă

Nu a fost votat 13.67 lei54.71 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Promovarea afacerilor prin campanii de marketing online
Promovarea afacerilor prin campanii de marketing online

Descoperă cum să-ți promovezi afacerea eficient în era digitală!

Nu a fost votat 22.81 lei45.29 lei Citește mai mult
Inteligența, de la originile naturale la frontierele artificiale - Inteligența Umană vs. Inteligența Artificială
Inteligența, de la originile naturale la frontierele artificiale – Inteligența Umană vs. Inteligența Artificială

Inteligența: redefinirea frontierelor. Explorarea Inteligenței Umane și Artificiale. Descoperă, învață și imaginează-ți viitorul.

Nu a fost votat 22.81 lei49.64 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *