#wit.py – Operaţii avansate cu stringuri Partea 1
1Introducere
În primul rând vreau să îmi cer scuze că nu am apucat să scriu articolul de data trecută. Doresc şi să menţionez că, în mod normal, acest articol ar fi trebuit să constituie o continuare a seriei Structuri de date şi, de aceea, nu am dat o temă data trecută. Voi da un la sfârşitul acestui articol, care este atât pentru seria Structuri de date, cât şi pentru articolul postat astăzi. Am mai menţionat stringurile până acum, dar vom trece la lucruri mai avansate, totuşi nu înainte de a prezenta şi lucruri basic.
Operaţii de bază
Toate operaţiile învăţate până acum (verificare lungimii, indexing, slicing, multiplicare, minim, maxim, apartenenţă) sunt compatibile şi cu tipul de date string, diferenţa majoră fiind că un string nu poate fi modificat aşa ca o listă. Totuşi Python oferă o metodă foarte utilă de a modifica un string. Vă voi prezenta această metodă printr-un mic exemplu.
>>> text = 'Salut, %s! Esti cumva cititor %s?' >>> value = 'Bogdan' >>> print text % value Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> print text % value TypeError: not enough arguments for format string >>> values = ('Bogdan', 'WorldIT') >>> print text % values Salut, Bogdan! Esti cumva cititor WorldIT?
Ce observăm: În primul rând, am folosit %s, iar acolo unde aceste caractere au fost prezente, s-a făcut înlocuirea lor cu cele din tuple (adică din values). Este obligatoriu să folosim acel %, iar s reprezintă tipul de date string (vă voi prezenta şi celelalte tipuri de date mai încolo). Dacă avem mai multe din „marcatoare ale conversiei” (din engleză „conversion specifiers”), atunci va trebui ca în tuple să avem acelaşi număr de stringuri. De aceea nu a funcţionat atunci când am dorit să înlocuim %s cu un string. Totuşi, ce s-ar întâmpla dacă am dori să folosim o listă în loc de un tuple?
>>> values = ['Bogdan', 'WorldIT'] >>> print text % values Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> print text % values TypeError: not enough arguments for format string
Ce s-a întâmplat? Problema apare pentru că o listă (spre deosebire de tuple sau dicţionar) este considerată un singur element şi deci, nu vom putea înlocui două elemente cu unul singur (aceeaşi eroare ca la înlocuirea cu un string). Tot nu sunteţi convinşi? Să vedem ce se întâmplă dacă păstrăm un singur marcator al conversiei:
>>> text = '%s e cel mai bun blog de programare si stiri IT din Romania!' >>> text '%s e cel mai bun blog de programare si stiri IT din Romania!' >>> print text % values ['Bogdan', 'WorldIT'] e cel mai bun blog de programare si stiri IT din Romania! >>> values = ['WorldIT'] >>> print text % values ['WorldIT'] e cel mai bun blog de programare si stiri IT din Romania! >>> values = 'WorldIT' >>> print text % values WorldIT e cel mai bun blog de programare si stiri IT din Romania! >>> values = ('WorldIT') >>> print text % values WorldIT e cel mai bun blog de programare si stiri IT din Romania!
Exemplele de mai sus prezintă înlocuirea cu liste (de 1 sau mai multe stringuri), cu un string şi cu un tuple (prezentat şi la început).
!Notă: Pentru a introduce simbolul % în stringul care va fi modificat (formatat), acesta va fi scris de două ori, adică %% :
>>> text = 'TVA-ul a crescut la %s%%' >>> print text % '24' TVA-ul a crescut la 24%
Lista cu caracterele folosite pentru marcarea conversiei
Despre Precision
Nu am de gând să intru prea adânc în acest subiect (mai sunt multe de zis), deci mă voi rezuma la lucrurile importante. Unul dintre aceste lucruri ar fi precision, care se foloseşte la tipul float. Tot ce trebuie făcut este ca după % să se introducă un punct şi numărul de zecimale dorit:
>>> format = "Pi with three decimals: %.3f" >>> from math import pi >>> print format % pi Pi with three decimals: 3.142
Încheiere
Nu am să mai lungesc articolul de astăzi. Totuşi mai sunt lucruri de spus despre formatting, iar apoi trecem la string methods.
*Am folosit exemple de cod din cartea Beginning Python: From Novice to Professional de Magnus Lie Hetland, ISBN: 159059519X *
Temă
1. Creaţi o aplicaţie care citeşte 3 numere. Verificaţi dacă numerele pot reprezenta o notă (să fie între 1 şi 10, să fie naturale) şi, la sfârşit afişaţi media aritmetică dintre ele, cu exact două zecimale.
2. Se citesc de la tastatură două cuvinte şi se creează o listă (sau un tuple) cu ele. Apoi se mai citeşte un cuvânt de la tastatură şi, dacă acest al treilea cuvânt este identic cu unul dintre primele două, atunci se va afişa celălalt. În caz contrar se va afişa „Away from Bran” (cei ce au fost la Defcamp vor înţelege aluzia).
Rezolvările se vor trimite doar prin email.
Salut,
Dar daca vreau sa imi apara ‘Salut, Bogdan! Esti cumva cititor Bogdan?’ .
Ce trebuie sa fac , sa despart fraza si apoi sa o concatenez ?
Adica: text1 = ‘Salut, %s! ‘
text2=’Esti cumva cititor %s?’
>>> value = ‘Bogdan’
>>> print text1 % value + ‘ ‘+text2 % value
Mai exista vre-o varianta mai simpla ?