Jump to content

Tutorial python : Şirurile de caractere în Python | Partea 4


Recommended Posts

pythonincepatori4.png

 

Salut,

Astăzi vom discuta despre şiruri de caractere (sau stringuri) în Python.

Definiţie

Un string reprezintă orice tip de text inclus între ghilimele simple, duble sau triple.

De exemplu: s = 'Python' este acelasi lucru cu s = "Python" sau s = """Python""".

Între ghilimele simple şi duble nu există nici o diferenţă, însă ghilimelele triple sunt folosite pentru a reprezenta texte care se întind pe mai multe linii. Mai mult, şi ghilimelele triple pot fi simple sau duble, fără nici o diferenţă între acestea.

Exemplu:

 

s = """ acest text este
scris
pe mai multe randuri """

s = ''' Şi textul acesta
este scris pe mai multe rânduri '''

 

Deşi interpretatorului Python nu îi pasă ce tip de ghilimele folosim pentru a defini stringul nostru, suntem obligaţi totuşi să încheiem reprezentarea cu acelaşi tip de ghilimele cu care am început. Prin urmare, nu sunt permise scrieri precum s = 'text".

Aşa cum spuneam în lecţia anterioară, calculatorul va reprezenta orice tip de date drept o înşiruire de 0 şi 1. Caracterele sunt mai greu de reprezentat pentru un calculator, aşa că pentru a-şi uşura munca, se foloseşte de un encoding. Un encoding va indica o reprezentare a caracterelor într-un format mai uşor de înţeles pentru calculator. De exemplu, ASCII este un format de encoding mai vechi folosit pentru a reprezenta 256 de caractere (printre care toate cele de pe tastatura voastră). Acest format leagă orice caracter la un număr întreg cuprins între 0 şi 255. Numărul 255 nu este întâmplător, această reprezentare reuşind să reprezinte caractere în 8 biţi (2 ** 8 = 256).

ASCII este totuşi un model de reprezentare destul de vechi şi depăşit de multitudinea de caractere disponibile în zilele noastre. Din acest motiv există multe alte sisteme de encoding. În mod implicit, Python va folosi sistemul UTF-8 pentru a reprezenta caracterele sale.

Putem accesa reprezentarea unui caracter folosind funcţia ord(caracter), unde caracter trebuie să fie un string de lungime 1. Inversul acestei funcţii este chr(numar), unde numar este un număr întreg, iar rezultatul funcţiei este caracterul reprezentat de acel număr.

Această discuţie nu este tocmai inutilă, reprezentarea acestor caractere este folosită pentru a efectua operaţii de comparaţie între stringuri (operaţii de mai mic sau mai mare decât) şi, deşi nu veţi avea nevoie să accesaţi în mod explicit reprezentarea unui string, sunt şanse ca la un moment dat să aveţi nevoie de o schimbare de encoding.

Operaţii pe stringuri

Un string Python poate fi privit drept o listă de caractere aflate într-o anumită ordine. Astfel, putem selecta un substring al stringului nostru folosind paranteze pătrate [].

Dacă vrem să selectăm un singur caracter, este suficient să specificăm în parantezele pătrate poziţia caracterului în string. Dacă vrem să selectăm mai multe caractere consecutive deodată, atunci avem la dispoziţie "notaţia slice".

Notaţia slice permite selectarea unor caractere dintr-un interval (selectarea unui substring). Pentru a specifica acest interval, în interiorul parantezelor pătrate scriem poziţiile de început şi de final, despărţite prin semnul :. Dacă poziţia de început este primul caracter al stringului sau poziţia de final este ultimul caracter, atunci putem omite precizarea acelei poziţii.

Exemplu:

 

>>> s = 'Python'
>>> s[2]
't'
>>> s[2:4]
'th'
>>> s[:2]
'Py'
>>> s[2:]
'thon'
>>> s[:]
'Python'

Observaţie: numărătoarea poziţiilor (indecşilor) caracterelor din string începe de la 0. Astfel, în exemplele de mai sus, pe prima poziţie se află caracterul P, pe a doua poziţie caracterul y şi aşa mai departe.

Atenţie: intervalul descris de notaţia slice este închis la capătul din stânga şi deschis la cel din dreapta. Cu alte cuvinte, elementul de pe poziţia de start a notaţiei va fi inclus în rezultat, iar caracterul indicat de poziţia de final nu va fi inclus. Observăm în exemplul de mai sus, pentru cazul s[2:4] au fost selectate caracterele t aflat pe poziţia 2 şi h aflat pe poziţia 3, dar o aflat pe poziţia 4 nu a fost inclus.

Până acum am prezentat o singură operaţie pe stringuri: operaţia de selectare. În continuare vom prezenta alte operaţii utile atunci când avem de-a face cu un astfel de tip de date.

Operaţiile aritmetice de adunare şi înmulţire sunt posibile asupra stringurilor, dar au un efect poate neaşteptat. Exemplu:

 

>>> s1 = 'Python'
>>> s2 = 'Sarpe'
>>> s1 + s2
'PythonSarpe'
>>> s1 * 2
'PythonPython'

După cum puteţi observa, adunarea a două stringuri rezultă în concatenarea acestora, iar înmulţirea unui string cu un număr natural, va multiplica textul stringului de atâtea ori cât indică numărul ales.

Atenţie: pentru adunare, ambele elemente trebuie să fie string, iar pentru înmulţire este necesar un string şi un număr întreg.

Pentru a verifica apartenenţa unui substring la un string, putem folosi cuvântul cheie in.

 >>> s1 = 'Python'
>>> 'i' in s1
False
>>> 'y' in s1
True

 

Alte câteva metode utile în lucrul cu stringurile sunt:

str(n) - realizează convertirea unui obiect care nu este string, într-un string (de exemplu 1 devine "1"
min(s), max(s) - returnează litera minimă/maximă din string (atenţie, toate literele mari vor fi considerate "mai mici" decât orice literă mică).
s.lower(), s.upper() - returnează o copie a stringului cu toate literele mici sau cu toate literele mari
len(s) - returnează un număr corespunzător dimensiunii stringului (numărul de caractere care îl alcătuiesc)
s.split(delimitator) - împarte stringul în bucăţi delimitate de parametrul "delimitator". Rezultatul va fi o listă, iar delimitatorul trebuie sa fie string
Pentru mai multe detalii despre funcţiile şi metodele suportate de stringuri, consultaţi documentaţia oficială.

Formatarea textului

O parte importantă în lucrul cu stringurile o reprezintă formatarea acestora.

Prin formatare vom intelege posibilitatea de a crea un string în mod dinamic folosind valori păstrate în variabile.

Prima şi cea mai simplă metodă de formatare o reprezintă concatenarea stringurilor implicate folosind operaţia de adunare:

 

>>> nume = 'Madalin'
>>> ani = 23
>>> 'numele meu este ' + nume + ' si am ' + str(ani) + ' ani'
'numele meu este Madalin si am 23 ani'

 

Observaţi convertirea variabilei ani folosind funcţia str(). Fără această convertire, am primi eroare deoarece nu putem adăuga un string şi un număr.

O altă metodă de formatare o reprezintă folosirea caracterului %:

 >>> nume = 'Madalin'
>>> ani = 23
>>> 'numele meu este %s si am %d ani' % (nume, ani)
'numele meu este Madalin si am 23 ani'

 

%s indică faptul că pe acea pozitie se asteaptă un element de tip string, iar %d indică prezenţa unui element de tip întreg. Sunt mai multe tipuri de astfel de simboluri specifice diferitelor tipuri de date, dar nu vom intra în detalii aici.

Observaţi totuşi absenţa funcţiei de convertire a variabilei ani. Din moment ce am specificat deja în interiorul formatării că ne aşteptăm la un număr pentru poziţia aceea, Python va realiza singur conversia. Totuşi ordinea parametrilor din paranteză contează.

A treia metodă de formatare a stringurilor este metoda format().

 >>> nume = 'Madalin'
>>> ani = 23
>>> 'numele meu este {} si am {} ani'.format(nume, ani)
'numele meu este Madalin si am 23 ani' 

 

Observăm că nu a fost nevoie de convertirea variabilei ani şi nici de specificarea unui tip de date pentru poziţiile în care vor urma să fie introduse valorile variabilelor noastre. Cu toate acestea, ordinea parametrilor încă este importantă ceea ce nu mereu ne convine.

Din fericire, acoladele pot conţine informaţii despre parametrii. Astfel, dacă punem un număr în interiorul acoladelor, atunci Python va asocia acel număr cu poziţia parametrilor din metoda format (atenţie totuşi, numărătoarea începe de la 0 şi se poate continua până la numărul parametrilor - 1).

 >>> 'numele meu este {1} si am {0} ani'.format(ani, nume)
'numele meu este Madalin si am 23 ani'

Mai mult, această metodă ne permite refolosirea parametrilor prin repetarea unui index (numărul parametrului)

Deja avem mai multă flexibilitate, dar încă nu e suficient. Ordinea parametrilor este încă importantă. Pentru a rezolva şi acest ultim inconvenient, putem scrie în locul numerelor dintre acolade, denumiri pentru variabilele care vor fi înlocuite (denumirile acestea pot fi diferite de numele variabilelor). În acest mod, poziţia parametrilor nu va mai conta pentru că vor fi identificaţi prin acea denumire. La fel ca în cazul indecşilor, şi această metodă ne permite să repetăm un anumit parametru prin reutilizarea numelui său în string.

 >>> 'numele meu este {nume} si am {varsta} ani'.format(nume=nume, varsta=ani)
'numele meu este Madalin si am 23 ani'

 

Ultima metodă de formatare (da, încă mai sunt) a fost adaugată în Python 3.6 şi presupune adaugarea caracterului f înaintea şirului nostru de caractere, iar între acolade, vom trece numele variabilelor pe care vrem să le includem în formatare (de această dată, numele variabilelor din acolade trebuie să coincidă cu cel din declarare).

 >>> nume = 'Madalin'
>>> ani = 23
>>> f'numele meu este {nume} si am {ani} ani'
'numele meu este Madalin si am 23 ani'

Această metodă este interesantă deoarece tot ce este în interiorul acelor acolade, va fi interpretat de Python. Astfel, putem avea expresii (operaţii aritmetice, apeluri de funcţii etc) direct în interiorul formatării. Exemplu:

 >>> nume = 'Madalin'
>>> ani = 23
>>> f'numele meu este {nume.upper()} si am {ani+2} ani'
'numele meu este MADALIN si am 25 ani'

 

Atât pentru astăzi, sper că am fost suficient de clar. Mai sunt enorm de multe lucruri de spus despre stringuri, însă cel mai bine se învaţă prin practică.

Dacă aveţi orice fel de întrebare, nu ezitaţi să scrieţi în comentarii, dacă nu, pe data viitoare.

 

Sursa: madalinfasie.ro

  • Like 1

 

  Pagina Facebook Gamelife   

                               Este nevoie de 20 de ani ca sa ti construiesti o reputatie si de 5 minute ca sa o strici ! Daca te gandesti la asta , vei face lucrurile diferit !

 

0BLLtz9.png

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...