duminică, 14 aprilie 2013

Tutorial Python - Stringuri (Şiruri de caractere)

Stringurile sunt şiruri de caractere Unicode (Python 3). Sunt immutable (imuabile; nu pot fi alterate).
Avantajul oferit de Unicode este că fiecare caracter, din orice limbă, şi fiecare simbol are asociat un număr de ordine (ordinal).
Înainte de Unicode existau doar 256 de ordinali cu care puteai să reprezinţi caracterele. Unicode a rezolvat această problemă.
Putem afla numărul de ordine (pentru caracterele uzuale acesta este codul ASCII) al unui caracter cu funcţia ord(ch) şi putem afla caracterul corespunzător unui ordinal cu funcţia chr(nr).

>>> ord('ă')
259
>>> ord('ف')
1601
>>> ord('∫')
8747
>>> ord('0')
48
>>> ord('A')
65
>>> chr(9001)
'〈'
>>> chr(8752)
'∰'
>>> chr(97)
'a'
>>> chr(1608)
'و'
>>> chr(25384)
'挨'
În Python caracterele nu au un tip propriu. Pur şi simplu sunt stringuri de lungime 1.
Stringurile se declară fie cu ghilimele fie cu apostrofuri. Eu, de regulă, folosesc apostrofuri.
Dacă le declaraţi cu apostrofuri puteţi folosi ghilimele în string. Dacă le declaraţi cu ghilimele puteţi folosi apostrofuri în string.
Sau puteţi folosi secvenţe escape (\' şi \").
>>> txt = 'Vi \'imbecillia\' asseverent to ostenditur "objectioni" argumentis.'
>>> txt
'Vi \'imbecillia\' asseverent to ostenditur "objectioni" argumentis.'
>>> alttxt = "Videmur vim quo seorsim' petebat."
>>> alttxt
"Videmur vim quo seorsim' petebat."
Interpretorul afişează stringurile aşa cum le-am introdus. Dacă vrem să fie afişate corespunzător folosim funcţia print.
>>> print(txt)
Vi 'imbecillia' asseverent to ostenditur "objectioni" argumentis.
>>> print(alttxt)
Videmur vim quo seorsim' petebat.
Puteţi folosi secvenţa escape \n pentru a insera un rând nou în string şi puteţi folosi \ pentru a indica interpretorului că stringul continuă pe rândul următor (altfel dacă apăsaţi ENTER interpretorul va evalua expresia).
>>> txt = 'Vul student quaeque brachia nos divelli.\
Ha ex alterius locusque\n\
ins idias\n  formalis ii mutuatur judiciis.'
>>> print(txt)
Vul student quaeque brachia nos divelli.Ha ex alterius locusque
ins idias
  formalis ii mutuatur judiciis.
>>> txt
'Vul student quaeque brachia nos divelli.Ha ex alterius locusque\nins idias\n  formalis ii mutuatur judiciis.'
Observaţi că acel backslash nu apare în string.
O alternativă la \n este folosirea a trei ghilimele sau a trei apostrofuri.
În acest caz rândurile noi din interpretor se traduc în \n în string.
În exemplu, folosesc un backslash la început (şi la sfârşit) ca să previn inserarea unui nou rând în string.
Puteam de asemenea să încep imediat după apostrofuri şi să nu mai pun acel backslash.
>>> txt = '''\
Essentiae infinitae ad imaginata vi videretur to tantaeque obversari.
Debiliora in ab opinantem priusquam perfectae.
Desumptas apparebat effecerit dubitandi objective id ex du profundum.\
'''
>>> print(txt)
Essentiae infinitae ad imaginata vi videretur to tantaeque obversari.
Debiliora in ab opinantem priusquam perfectae.
Desumptas apparebat effecerit dubitandi objective id ex du profundum.
Puteţi afişa un string aşa cum îl introduceţi dacă adăugaţi un r în faţa acestuia (raw string).
>>> rw = r'This \n is a\' raw "string"'
>>> print(rw)
This \n is a\' raw "string"
Putem accesa caractere individuale aşa cum accesam elementele listelor şi, de asemenea, putem folosi notaţia slice pentru a "extrage" substringuri (vezi liste).
>>> txt = 'Corpus omne perseverare in statu suo quiescendi vel movendi uniformiter in directum, nisi quatenus a viribus impressis cogitur statum illum mutare.'
>>> len(txt) # Lungimea stringului
147
>>> txt[0]
'C'
>>> txt[-1]
'.'
>>> txt[-2]
'e'
>>> txt[7:23]
'omne perseverare'
>>> txt[:6]
'Corpus'
>>> txt[-7:-1]
'mutare'
Stringurile nu pot fi modificate!
>>> txt[0] = 'T'
Traceback (most recent call last):
  File "<pyshell#66>", line 1, in <module>
    txt[0] = 'T'
TypeError: 'str' object does not support item assignment
Operatorul + concatenează două stringuri, iar operatorul * repetă un string. Ambii operatori returnează un string nou.
>>> law = 'Lex'
>>> word = law + ' I'
>>> print(word)
Lex I
>>> print(law * 7)
LexLexLexLexLexLexLex
Tipul str (string) conţine numeroase metode (funcţii) ce implementează operaţiile comune cu stringuri.
Acest exemplu vă prezintă câteva din aceste metode.
>>> lex3 = 'Actioni contrariam semper et æqualem esse reactionem: sive corporum duorum actiones in se mutuo semper esse æquales et in partes contrarias dirigi.'
>>> sub = lex3[8:36]
>>> sub
'contrariam semper et æqualem'
>>> # Returneaza un string cu primul caracter capitalizat si restul lowercase
>>> sub.capitalize()
'Contrariam semper et æqualem'
>>> # Returneaza numarul de aparitii al unui string
>>> lex3.count('semper')
2
>>> # Returneaza indicele unui substring
>>> lex3.index(sub)
8
>>> # Returneaza true daca toate caracterele sunt lowercase
>>> sub.islower()
True
>>> # Elimina spatiile initiale si finale
>>> '   fara spatii    '.strip()
'fara spatii'
>>> # Returneaza true daca caracterul este cifra
>>> '1'.isdigit()
True
Mai multe informaţii pe siteul Python.
În Python până şi constantele string sunt obiecte! ('1'.isdigit())
Puteţi testa dacă un string se află într-un alt string cu operatorul in.
>>> 'et' in lex3
True
>>> 'A' in lex3
True
>>> sub in lex3
True
Stringurile pot fi formatate cu funcţia format.
>>> username = 'Newton'
>>> password = 'inertia'
>>> 'Parola lui {0} este "{1}"'.format(username, password)
'Parola lui Newton este "inertia"'
Câmpurile {0} şi {1} ţin locul (în ordine) parametrilor funcţiei format.
Mai multe detalii despre aceste câmpuri găsiţi pe siteul Python.
Şi nu uitaţi de:
>>> help('str')

Niciun comentariu:

Trimiteți un comentariu

Rețineți: Numai membrii acestui blog pot posta comentarii.