Jump to content
bcman

#wit.py – Operaţii avansate cu stringuri Partea 1

Recommended Posts

*

Articolul original a fost scris de mine, Bogdan Condurache, pentru Wolrdit*

Introducere

Î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

wit.jpg

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.

  • Upvote 1
Link to comment
Share on other sites

Ti-am trimis mail cu rezolvarile.

Mai e o metoda misto numita format prin care formatezi sirul prin argumente de pozitie si/sau argumente de tip keyword

"{0} {1} multe {fructe}".format("ana", "are", fructe="mere")

dar o sa ne detaliezi tu mai multe in urmatorul tutorial :P.

Felicitari pentru tutoriale, aici nu e vorba de a atrage oameni sa invete Python sau sa le demonstreze cat de usor, viabil, practic si rezonabil este, ci sa le deschida ochii catre programare, algoritmica pornind cu o baza mai mult "donata" (datorita developerilor) fara a fi nevoiti sa treaca de acel test initial suprem prin care ori rezisti (si dovedesti a fi 100% apt) ori cedezi din primii pasi (vechile discutii C/C++ vs Py, etc.).

Edited by cmiN
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.



×
×
  • Create New...