Fundamentele programării (II) - Python

În cadrul acestui episod vom introduce noțiunile de variabilă și vom lucra cu numere și texte. Vom presupune că deja știți să utilizați un mediu de programare (fie el și online); dacă nu, vă recomandăm să citiți din nou episodul anterior.

Variabile

Chiar și pentru cele mai simple programe, la un moment dat avem nevoie să păstrăm anumite informații. Nu am avut nevoie de acest lucru atunci când doar am afișat un mesaj, dar atunci când am avut nevoie de numele utilizatorului a trebuit să păstrăm informația respectivă. Să ne amintim ultimul program de data trecută:

În linia 1, avem o instrucțiune prin care preluăm informația introdusă de utilizator și o păstrăm în ceva de numit nume. Aceasta este o așa numită variabilă.

Putem să ne gândim la variabile ca și niște borcane, de diferite dimensiuni care conțin diferite bunătăți de la bunica. Folosim borcane de anumite dimensiuni pentru dulceață, alte borcane pentru murături, alte borcane pentru condimente. Fiecare borcan are o anumită etichetă (denumirea unei variabile) folosită pentru a păstra o anumită ordine în cămară.

Variabilele pot fi văzute ca fiind niște recipiente care păstrează informații. Practic, cu ajutorul lor ajungem undeva în memoria calculatorului, luăm o mică parte din ea și îi dăm o denumire pentru a o putea folosi ulterior.

Avem nevoie de variabile pentru cele mai diverse scopuri. Dacă scriem un program care controlează un roboțel, vom avea nevoie de variabile care să conțină poziția acestuia, orientarea sa etc. În schimb, dacă programul nostru simulează un joc de fotbal, am avea nevoie de variabile pentru a păstra scorul.

În principiu, dacă trebuie să ținem minte ceva, cel mai simplu este să punem acel ceva într-o variabilă.

Majoritatea limbajelor moderne necesită declararea unei variabile înainte ca aceasta să poată fi utilizată. Python nu este un astfel de limbaj. Declarația este opțională. În Python, aceste variabile au și un tip care este determinat în momentul executării programului, însă îl putem schimba. Mai exact, putem asocia aceeași denumire unei alte variabile cu tip diferit.

Termenul variabilă implică faptul că ea se poate modifica. Prin diverse mecanisme, informația conținută de o variabilă se poate schimba în timpul execuției programului. De exemplu, într-un joc de fotbal, la începutul unui meci variabila care ar păstra numărul golurilor marcate de echipa gazdă ar conține informația 0. Dar, dacă echipa marchează un gol, informația respectivă trebuie să devină 1. Dacă se mai marchează unul, variabila va conține informația 2 și așa mai departe. Dar, dacă începe un joc nou, informația redevine 0. Această informație păstrată de către variabilă poartă denumirea de valoare a variabilei.

În Python, este posibil ca în momentul declarării unei variabile să precizăm și ce valoare dorim să aibă la început. Pentru aceasta, după denumirea ei  adăugăm semnul =, urmat de valoarea dorită. O astfel de declarație ar putea fi:

Spunem că o astfel de variabilă este inițializată.

Numere

În majoritatea limbajelor există mai multe feluri de numere, chiar mai multe feluri de numere întregi. Python face din nou notă discordantă; numerele sunt doar numere.

Am văzut cum declarăm o variabilă și cum o inițializăm. Dar, am spus că valorile variabilelor se pot modifica. Pentru aceasta avem nevoie de o instrucțiune. O astfel de instrucțiune arată așa:

Valoarea variabilei a va fi acum 2457 indiferent care a fost înainte. Informația înlocuită se pierde. Nu vom ști cât a fost acea valoare înainte, deci dacă avem nevoie de ea, ar fi fost bine să o punem altundeva (într-o altă variabilă de exemplu).

Instrucțiunea anterioară este validă numai dacă a este într-adevăr o variabilă de tip numeric. Ea trebuie să fi fost declarată anterior (nu neapărat și inițializată).

Să nu credeți că a = 2457 este o ecuație sau ceva asemănător; este o comandă. Calculatorului i se spune ca în zona de memorie corespunzătoare variabilei a să fie pusă valoarea 2457. O astfel de comandă se numește atribuire.

Printr-o instrucțiune de atribuire, unei variabile i se dă o valoare.

Așadar, o instrucțiune de atribuire conține denumirea variabilei care va primi valoarea, urmată se semnul = și apoi de valoarea propriu zisă. În cazul nostru, valoarea a fost numărul 2457.

Există mai multe modalități de a reprezenta numerele; 2457 este varianta care ni se pare nouă naturală; nu e nicio șmecherie, e chiar numărul care urmează după 2456 și e înainte de 2458. Fără să explicăm de ce și doar pentru a arăta că se poate și altfel dacă chiar vrem, același număr poate fi reprezentat prin 0x999. Instrucțiunea următoare are exact același efect:

În Python, numerele sunt numere simple dacă nu apare nimic altceva lipit de ele. Alte simboluri sau caractere le modifică semnificația. Partea 999 din 0x999 nu reprezintă deloc numărul 999.

Lucrurile pot deveni și mai ciudate: 2, '2' și "2" sunt complet diferite. Primul este numărul 2, iar celelalte sunt string-uri. Mai multe despre string-uri în secțiunea următoare.

Numerele cu zecimale pot și ele fi reprezentate așa cum ni se pare nouă natural; 2.5 este o valoare corectă; dar, putem avea și ciudățenii ca 1e-4 sau 5D.

Nu dorim să explicăm aceste lucruri care par bizare; dorim doar să atragem atenția că în multe cazuri lucrurile nu sunt ceea ce par.

String-uri

String-urile reprezintă, de obicei, texte; textul este cuprins între ghilimele sau apostroafe. Următoarele două string-uri au aceeași valoare:

În principiu, avem un apostrof, unul sau mai multe semne și apoi un alt apostrof sau ghilimele, unul sau mai multe semne și din nou ghilimele. De exemplu, string-ul + trebuie scris '+' sau "+".

Dar, ce ne facem dacă vrem să avem chiar valoarea apostrof într-un string delimitat prin apostroafe? Ați putea crede că ''' este soluția, dar nu e chiar așa. Al doilea apostrof este interpretat ca fiind sfârșitul elementelor care descriu stringul și al treilea nu mai este înțeles. Ca urmare, instrucțiunea s = ''' nu este corectă. O problemă similară apare în cazul string-urilor delimitate prin ghilimele care conțin ghilimele. Instrucțiunea s = """ nu este nici ea corectă,

Avem două variante; majoritatea limbajelor oferă una singură. Uneori, în Python, scăpăm de această problemă, alegând delimitatorii. De exemplu, un string care conține doar ghilimele poate fi scris '"', iar unul care conține doar un apostrof poate fi scris "'".

Ați ghicit probabil, dacă string-ul conține atât apostroafe, cât și ghilimele, avem o problemă. Ni se oferă o soluție… Putem marca al apostroafele sau ghilimelele din interiorul string-urilor cu un simbol special care să indice faptul că acesta nu trebuie interpretat ca sfârșit al descrierii string-ului, ci ca semn propriu-zis. Elementul special este \ (backslash). Următoarele instrucțiuni sunt corecte:

Marcajele din a doua și a treia linie sunt redundande, dar sunt permise.

Ar părea că ni s-au rezolvat toate problemele, dar… dacă avem nevoie fix de backslash? s = '\' sau s = "\" nu sunt corecte fiindcă backslash-ul indică faptul că următorul element trebuie interpretat ca fiind semnul apostrof, respectiv ghilimele. Soluția este să marcăm semnul backslash cu un alt backslash. Deci, pentru a atribui unei variabile valoarea \, va trebui să scriem una dintre următoarele instrucțiuni:

Dar… avem probleme suplimentare. Spuneam că string-urile sunt folosite în special pentru a păstra valori care reprezintă texte. Și textele pot avea mai multe linii. Cum facem?

Dacă scriem:

sau

vom vedea că nu e corect.

Avem conceptul de caracter special de sfârșit de linie. Dacă dorim să avem textul Gazeta de Informatică scris pe trei rânduri (câte un cuvânt pe o linie), vom scrie:

sau

Se spune că mai există o soluție, dar este o capcană. Dacă punem un \ la sfârșitul liniilor, atunci putem folosi mai multe linii. Iată un exemplu:

Dar, backslash-ul spune acum doar ca descrierea string-ului continuă pe linia următoare, nu include și caracterul special de sfârșit de linie. Instrucțiunea de mai sus este echivalentă cu:

Pentru a putea scrie textul pe mai multe linii și el să fie interpretat așa cum ne-am aștepta, ar trebui să scriem ceva de genul:

Situația este aceeași dacă folosim apostroafe pentru delimitarea string-urilor.

Mai avem însă o alternativă. Dacă folosim trei ghilimele sau trei apostroafe la începutul și la sfârșitul textului, atunci putem avea mai multe linii. Iată un exemplu cu ghilimele:

Varianta cu apostroafe are același efect:

Python este un limbaj care permite multe lucruri, unele mai bizare decât altele. Există numeroase alte soluții sau artificii care ne permit să lucrăm cu astfel de string-uri.

Va urma

În cadrul episodului următor vom prezenta detalii referitoare la modul în care sunt efectuate operațiile (nu neapărat matematice) și vom vedea ce sunt și la ce sunt folosite comentariile.