MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Lucrul cu șirurile de caractere

Un șir de caractere reprezintă o secvență de caractere în codificare Unicode, încadrată între ghilimele. Python permite utilizarea atât a ghilimelelor simple, cât și a celor duble pentru definirea șirurilor de caractere:

message = "Hello World!"
print(message)  # Hello World!

name = 'Tom'
print(name)  # Tom

Dacă un șir de caractere este lung, acesta poate fi împărțit în părți și plasat pe linii diferite de cod. În acest caz, întregul șir este încadrat între paranteze rotunde, iar părțile sale individuale între ghilimele:

text = ("Laudate omnes gentes laudate "
       "Magnificat in secula ")
print(text)

Dacă dorim să definim un text pe mai multe linii, acesta este încadrat între trei ghilimele duble sau simple:

'''
Acesta este un comentariu
'''
text = '''Laudate omnes gentes laudate
Magnificat in secula
Et anima mea laudate
Magnificat in secula
'''
print(text)

Atunci când folosim trei ghilimele simple, nu trebuie să confundăm acest lucru cu comentariile: dacă textul din trei ghilimele simple este atribuit unei variabile, acesta este un șir de caractere, nu un comentariu.

Secvențe de control în șiruri de caractere

Un șir de caractere poate conține o serie de simboluri speciale - secvențe de control sau secvențe de escape. Unele dintre ele sunt:

  • \\: permite adăugarea unei bare oblice în șir
  • \': permite adăugarea unei ghilimele simple în șir
  • \": permite adăugarea unei ghilimele duble în șir
  • \n: efectuează trecerea la o nouă linie
  • \t: adaugă o tabulare (4 spații)

Utilizare a unor secvențe:

text = "Message:\n\"Hello World\""
print(text)

Rezultatul afișat în consolă:

Message:
"Hello World"

Deși astfel de secvențe pot fi utile pentru a insera ghilimele în șir, pentru a adăuga tabulare sau a trece la o altă linie, ele pot, de asemenea, crea probleme. De exemplu:

path = "C:\python\name.txt"
print(path)

Aici, variabila path conține un anumit drum către un fișier. Cu toate acestea, în șir apar simbolurile \n, care vor fi interpretate ca o secvență de control. Astfel, vom obține următorul rezultat în consolă:

C:\python
ame.txt

Pentru a evita această situație, adăugați simbolul r înaintea șirului:

path = r"C:\python\name.txt"
print(path)

Inserarea valorilor în șiruri de caractere

Python permite inserarea valorilor altor variabile într-un șir de caractere. Pentru aceasta, variabilele sunt plasate între acolade {} în interiorul șirului, iar înaintea șirului se adaugă simbolul f:

userName = "Tom"
userAge = 37
user = f"name: {userName}  age: {userAge}"
print(user)   # name: Tom  age: 37

În acest caz, în locul {userName} va fi inserată valoarea variabilei userName, iar în locul {userAge} valoarea variabilei userAge.

Accesarea caracterelor dintr-un șir

Putem accesa caractere individuale dintr-un șir folosind indexul în paranteze pătrate:

string = "hello world"
c0 = string[0]  # h
print(c0)
c6 = string[6]  # w
print(c6)

c11 = string[11]  # eroare IndexError: string index out of range
print(c11)

Indexarea începe de la zero, astfel că primul caracter al șirului va avea indexul 0. Dacă încercăm să accesăm un index care nu există în șir, vom obține o excepție IndexError. De exemplu, în cazul de mai sus, șirul are 11 caractere, deci caracterele vor avea indecși de la 0 la 10.

Pentru a accesa caracterele de la sfârșitul șirului, putem folosi indici negativi. Astfel, indexul -1 va reprezenta ultimul caracter, iar -2 penultimul caracter, și așa mai departe:

string = "hello world"
c1 = string[-1]  # d
print(c1)
c5 = string[-5]  # w
print(c5)

În lucrul cu caracterele, trebuie să ținem cont de faptul că un șir de caractere este un tip de date imuabil (immutable), astfel că, dacă încercăm să modificăm un caracter din șir, vom primi o eroare, ca în exemplul următor:

string = "hello world"
string[1] = "R"

Putem doar să înlocuim întregul șir, atribuindu-i o altă valoare.

Parcurgerea șirului de caractere

Cu ajutorul buclei for, putem parcurge toate caracterele dintr-un șir:

string = "hello world"
for char in string:
   print(char)

Obținerea unui subșir

Dacă este necesar, putem obține dintr-un șir nu doar caractere individuale, ci și un subșir. Pentru aceasta, se folosește următoarea sintaxă:

  • string[:end]: extrage secvența de caractere începând de la indexul 0 până la indexul end (fără a-l include)
  • string[start:end]: extrage secvența de caractere începând de la indexul start până la indexul end (fără a-l include)
  • string[start:end:step]: extrage secvența de caractere începând de la indexul start până la indexul end (fără a-l include), cu un pas de step

Exemple de utilizare:

string = "hello world"

# de la indexul 0 la 5
sub_string1 = string[:5]
print(sub_string1)  # hello

# de la indexul 2 la 5
sub_string2 = string[2:5]
print(sub_string2)  # llo

# de la indexul 2 la 9, cu un pas de 2
sub_string3 = string[2:9:2]
print(sub_string3)  # lowr

Concatenarea șirurilor de caractere

Una dintre cele mai comune operații cu șirurile de caractere este concatenarea acestora. Pentru concatenarea șirurilor se folosește operatorul +:

name = "Tom"
surname = "Smith"
fullname = name + " " + surname
print(fullname)  # Tom Smith

Concatenarea a două șiruri este simplă, dar dacă trebuie să adăugăm un număr la un șir, acesta trebuie convertit în șir de caractere folosind funcția str():

name = "Tom"
age = 33
info = "Name: " + name + " Age: " + str(age)
print(info)  # Name: Tom Age: 33

Repetarea unui șir de caractere

Pentru a repeta un șir de caractere de un anumit număr de ori, se folosește operatorul de înmulțire:

print("a" * 3)  # aaa
print("he" * 4)  # hehehehe

Compararea șirurilor de caractere

Compararea șirurilor de caractere se face în ordine lexicografică. La compararea șirurilor se iau în considerare caracterele și cazul lor. De exemplu, caracterele numerice sunt mai mici decât orice caractere alfabetice, iar caracterele alfabetice majuscule sunt mai mici decât cele minuscule:

str1 = "1a"
str2 = "aa"
str3 = "Aa"
print(str1 > str2)  # False, deoarece primul caracter din str1 este o cifră
print(str2 > str3)  # True, deoarece primul caracter din str2 este cu literă mică

De aceea, șirul "1a" este considerat mai mic decât șirul "aa". Compararea începe cu primul caracter. Dacă primele caractere ale ambelor șiruri sunt cifre, cea mai mică cifră este considerată mai mică, de exemplu, "1a" este mai mic decât "2a".

Dacă primele caractere sunt litere în același registru, se ia în considerare ordinea alfabetică. Astfel, "aa" este mai mic decât "ba", iar "ba" este mai mic decât "ca".

Dacă primele caractere sunt identice, se iau în calcul caracterele următoare, dacă acestea există.

Diferența de registru nu este întotdeauna de dorit, deoarece, în esență, avem de-a face cu șiruri de caractere identice. În acest caz, putem converti ambele șiruri într-un singur registru înainte de comparare.

Funcția lower() convertește șirul în litere mici, iar funcția upper() în litere mari:

str1 = "Tom"
str2 = "tom"
print(str1 == str2)  # False - șirurile nu sunt egale

print(str1.lower() == str2.lower())  # True

Funcțiile ord și len

Deoarece un șir de caractere conține caractere Unicode, cu ajutorul funcției ord() putem obține valoarea numerică a unui caracter în codificarea Unicode:

print(ord("A"))  # 65

Pentru a obține lungimea unui șir, putem folosi funcția len():

string = "hello world"
length = len(string)
print(length)  # 11

Căutarea într-un șir

Cu ajutorul expresiei term in string putem găsi un subșir term în șirul string. Dacă subșirul este găsit, expresia va returna True, în caz contrar se returnează False:

text = "hello world"
exist = "hello" in text
print(exist)  # True

exist = "sword" in text
print(exist)  # False

De asemenea, cu ajutorul operatorului not in, putem verifica absența unui subșir într-un șir:

text = "hello world"
print("hello" not in text)  # False
print("sword" not in text)  # True