Home » Articole » Articole » Calculatoare » Programare » Python » Depanarea programelor scrise în limbaj Python

Depanarea programelor scrise în limbaj Python

postat în: Python 0

„De îndată ce am început să programăm, am constatat, spre surprinderea noastră, că nu era atât de ușor să obținem programele corect pe cât ne-am gândit. Depanarea a trebuit să fie descoperită. Îmi amintesc exact momentul în care mi-am dat seama că o mare parte din viața mea de atunci urma să fie consumată pentru a găsi greșeli în propriile mele programe”. — Maurice Wilkes descoperind depanarea, 1949

Până acum, dacă te-ai încurcat cu programele, probabil ai descoperit că uneori programul face ceva ce nu ai vrut să facă. Acest lucru este destul de comun. Depanarea este procesul de a afla ce face computerul și apoi de a-l face să facă ceea ce dorești să facă. Acest lucru poate fi dificil. Odată am petrecut aproape o săptămână urmărind și reparând o eroare cauzată de cineva care a pus un x acolo unde ar fi trebuit să fie un y.

Acest capitol va fi mai abstract decât capitolele precedente.

Ce ar trebui să facă programul?

Primul lucru de făcut (sună evident) este să vă dați seama ce ar trebui să facă programul dacă rulează corect. Vino cu niște cazuri de testare și vezi ce se întâmplă. De exemplu, să presupunem că am un program pentru a calcula perimetrul unui dreptunghi (suma lungimii tuturor laturilor). Am următoarele cazuri de testare:

înălțimea lățimea perimetrul
3 4 14
2 3 10
4 4 16
2 2 8
5 1 12

Acum îmi rulez programul pe toate cazurile de testare și văd dacă programul face ceea ce mă aștept să facă. Dacă nu, atunci trebuie să aflu ce face computerul.

Mai frecvent, unele dintre cazurile de testare vor funcționa și altele nu. Dacă acesta este cazul, ar trebui să încercați și să vă dați seama ce au în comun cele care funcționează. De exemplu, aici este rezultatul unui program de perimetru (puteți vedea codul într-un minut):

Height: 3
Width: 4
perimeter = 15
Height: 2
Width: 3
perimeter = 11
Height: 4
Width: 4
perimeter = 16
Height: 2
Width: 2
perimeter = 8
Height: 5
Width: 1
perimeter = 8

Observați că nu a funcționat pentru primele două intrări, a funcționat pentru următoarele două și nu a funcționat pe ultima. Încercați să vă dați seama ce este în comun cu cele care funcționează. Odată ce aveți o idee despre care este problema, este mai ușor să găsiți cauza. Cu propriile programe, ar trebui să încercați mai multe cazuri de testare dacă aveți nevoie de ele.

Ce face programul?

Următorul lucru de făcut este să te uiți la codul sursă. Unul dintre cele mai importante lucruri de făcut în timpul programării este citirea codului sursă. Principala modalitate de a face acest lucru sunt explicațiile de cod.

O verificare a codului începe la prima linie și continuă până când programul este terminat. Buclele while și instrucțiunile if înseamnă că unele linii nu pot fi executate niciodată, iar unele linii sunt rulate de mai multe ori. La fiecare linie vă dați seama ce a făcut Python.

Să începem cu programul de perimetru simplu. Nu-l introduceți, îl veți citi, nu îl veți rula. Codul sursă este:

height = int(input("Height: "))
width = int(input("Width: "))
print("perimeter =", width + height + width + width)

Întrebare: Care este prima linie pe care o rulează Python?

  • Răspuns: Prima linie este întotdeauna rulată prima. În acest caz este: height = int(input("Height: "))

Ce face acea linie?

  • Imprimă Height: , așteaptă ca utilizatorul să introducă un șir de caractere și apoi îl convertește într-o înălțime variabilă întreagă.

Care este următoarea linie care rulează?

  • În general, următoarea linie de jos este: width =
    int(input("Width: "))

Ce face acea linie?

  • Imprimă Width: , așteaptă ca utilizatorul să introducă un număr și pune ceea ce introduce utilizatorul în lățimea variabilă.

Care este următoarea linie care rulează?

  • Când următoarea linie nu este indentată mai mult sau mai puțin decât linia curentă, este linia imediat după aceea, deci este: print("perimeter = ", width
    + height + width + width)
    (De asemenea, poate rula o funcție în linia actuală, dar acesta este un capitol viitor.)

Ce face acea linie?

  • Mai întâi imprimă perimeter = , apoi imprimă suma valorilor conținute în variabile, width și height, din width + height + width + width.

width + height + width + width calculează corect perimetrul?

  • Să vedem, perimetrul unui dreptunghi este partea de jos (lățimea) plus partea stângă (înălțimea) plus partea de sus (lățimea) plus partea dreaptă (nu?). Ultimul item ar trebui să fie lungimea părții drepte sau înălțimea.

Înțelegi de ce perimetrul a fost calculat „corect” uneori ?

  • A fost calculat corect când lățimea și înălțimea erau egale.

Următorul program pentru care vom face o prezentare a codului este un program care ar trebui să imprime 5 puncte pe ecran. Totuși, aceasta este ceea ce scoate programul:

. . . . 

Și iată programul:

number = 5
while number > 1:
    print(".",end=" ")
    number = number - 1
print()

Acest program va fi mai complex de parcurs, deoarece are acum porțiuni indentate (sau structuri de control). Să începem.

Care este prima linie care urmează să fie rulată?

  • Prima linie a fișierului: number = 5

Ce face?

  • Pune numărul 5 în numărul variabil.

Care este următoarea linie?

  • Următoarea linie este: while number > 1:

Ce face?

  • Ei bine, declarațiile while în general se uită la expresiile lor și, dacă sunt adevărate, ele fac următorul bloc de cod indentat, altfel omit următorul bloc de cod indentat.

Deci ce face acum?

  • Dacă number > 1 este adevărat, vor fi rulate următoarele două linii.

Deci este number > 1?

  • Ultima valoare pusă în number a fost
    5
    și
    5 > 1
    , deci da.

Deci, care este următoarea linie?

  • Deoarece while era adevărată, următoarea linie este:
    print(".",end=" ")

Ce face acea linie?

  • Imprimă un punct și, deoarece există argumentul suplimentar end=" ", următorul text tipărit nu va fi pe o altă linie de ecran.

Care este următoarea linie?

  • number = number - 1 , deoarece aceasta este următoarea linie și nu există modificări de indentare.

Ce face?

  • Aceasta calculează number - 1, care este valoarea curentă a lui number (sau 5) scade 1 din el și face noua valoare a numărului. Deci, practic, schimbă valoarea lui number de la 5 la 4.

Care este următoarea linie?

  • Ei bine, nivelul indentării scade, așa că trebuie să ne uităm la ce tip de structură de control este. Este o buclă while , așa că trebuie să ne întoarcem la clauza while care este while number > 1:

Ce face?

  • Se uită la valoarea numărului, care este 4, și o compară cu 1 și, deoarece 4 > 1, bucla while continuă.

Care este următoarea linie?

  • Deoarece bucla while a fost adevărată, următoarea linie este: print(".",end="
    ")

Ce face?

  • Tipărește un al doilea punct pe linie, care se termină cu un spațiu.

Care este următoarea linie?

  • Nicio modificare a indentării, așa că este: number = number - 1

Și ce face?

  • Ia valoarea curentă a numărului (4), scade 1 din ea, rezultând 3 și apoi face din 3 noua valoare a numărului.

Care este următoarea linie?

  • Deoarece există o modificare a indentului cauzată de sfârșitul buclei
    while
    , următoarea linie este: while number > 1:

Ce face?

  • Compară valoarea curentă a numărului (3) cu 1. 3 > 1, astfel încât bucla while continuă.

Care este următoarea linie?

  • Deoarece condiția buclei while a fost adevărată, următoarea linie este:
    print(".",end=" ")

Și ce face?

  • Un al treilea punct este imprimat pe linie.

Care este următoarea linie?

  • Este: number = number - 1

Ce face?

  • Ia valoarea curentă a numărului (3) scade din ea 1 și face din 2 noua valoare a numărului.

Care este următoarea linie?

  • Înapoi la începutul buclei while: while number > 1:

Ce face?

  • Compară valoarea curentă a numărului (2) cu 1. Deoarece 2 > 1, bucla while continuă.

Care este următoarea linie?

  • Deoarece bucla while continuă: print(".",end=" ")

Ce face?

  • Descoperă sensul vieții, universul și totul. Glumesc. (Trebuia să mă asigur că ești treaz.) Linia imprimă un al patrulea punct pe ecran.

Care este următoarea linie?

  • Este: number = number - 1

Ce face?

  • Ia valoarea curentă a numărului (2) scade 1 și face din 1 noua valoare a numărului.

Care este următoarea linie?

  • Înapoi la bucla while: while number > 1:

Ce face linia?

  • Compară valoarea curentă a numărului (1) cu 1. Deoarece 1 > 1 este fals (unul nu este mai mare decât unu), bucla while iese.

Care este următoarea linie?

  • Deoarece condiția buclei while a fost falsă, următoarea linie este linia de după ieșirea buclei while sau: print()

Ce face acea linie?

  • Face ecranul să treacă la următoarea linie.

De ce programul nu tipărește 5 puncte?

  • Bucla scoate 1 punct prea devreme.

Cum putem remedia asta?

  • Faceți ca bucla bucla să scoată 1 punct mai târziu.

Și cum facem asta?

Există mai multe moduri. O modalitate ar fi să schimbi bucla while la:  while number > 0: O altă modalitate ar fi să schimbi condiționalul la: number >= 1 Mai sunt câteva.

Cum îmi repar programul?

Trebuie să îți dai seama ce face programul. Trebuie să îți dai seama ce ar trebui să facă programul. Află care este diferența dintre cele două. Depanarea este o abilitate care trebuie exersată pentru a fi învățată. Dacă nu îți poți da seama după o oră, ia o pauză, discută cu cineva despre problemă sau contemplă scamele din buric. Revino peste un timp și probabil vei avea idei noi despre problemă. Baftă!

Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu

Ghid WordPress pentru dezvoltatori
Ghid WordPress pentru dezvoltatori

Resursa esențială care te va ghida pas cu pas în lumea complexă a platformei WordPress.

Nu a fost votat 19.26 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Big Data: Modele de afaceri - Securitatea megadatelor
Big Data: Modele de afaceri – Securitatea megadatelor

Nu rata oportunitatea de a rămâne competitiv într-o lume bazată pe date!

Nu a fost votat 19.26 lei28.91 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Ghid marketing pe Internet
Ghid marketing pe Internet

Autor: Nicolae Sfetcu (Ediţia a doua, Revizia 2) Unul din cele mai vechi ghiduri pentru marketing pe Internet în limba română, dar şi unul din cele mai concise şi mai practice ghiduri. Deşi au trecut mulţi ani de la scrierea … Citeşte mai mult

Nu a fost votat 0.00 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 *