Jump to content
bcman

#wit.py – Structuri de date Partea 1

Recommended Posts

Posted

*

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

Rezolvarea temei

Rezolvarea a fost scris? de Luca George ?i este cât se poate de corect?.

Exercitiul 1:

nume = raw_input("Nume :  ")
print "Salutare, " + nume + "."

Exercitiul 2:

a = raw_input('Introduceti numele ultimei carti citite:  ')
print ''Ultima data am citit \'' + a + '\''

Felicit?ri pentru rezolvare!

Structuri de date

Liste

Listele sunt prima structur? de date despre care vom vorbi ast?zi. O list? este defapt un tablou unidimensional ce poate con?ine orice alt tip de date, inclusiv: variabile de tip long (marcate cu un L la sfâr?it), stringuri (f?r? a le separa în caractere) ?i chiar ?i alte liste, a?a cum pute?i vedea în acest exemplu.

ion = ['Popescu Ion', 42]
george = ['Frunzescu George', 51]
database = [ion, george]

Dup? cum a?i putut vedea, listele sunt marcate de paranteze p?trate, obiectele listei sunt delimitate de virgul?, iar stringurile sunt scrise între ghilimele pentru a nu fi confundate cu o structur? de date cu acel nume.

Listele ?i stringurile suport? indexarea, astfel, dac? am avea: string = ‘Salut’, apelând string[0] se va afi?a ‘S’. Acest lucru de poate folosi cu orice num?r pân? la 4 (stringul are 5 caractere, dar primul este 0). Dac? ne-ar interesa ultima liter? am folosi string[-1] (idem pentru -2, -3…). Indexarea se mai poate face în dou? cazuri, stringuri introduse direct, f?r? a se folosi o structur? de date:

>>> ‘Salut’[1]
‘a’

?i în timpul citirii:


>>> nume = raw_input('Introduceti numele: ')[0]
Introduceti numele: Bogdan
>>> nume
'B'

Not?! Dup? caracterele >>> v? pute?i da seama c? acest cod a fost preluat din interpretor. Rândurile precedate de aceste caractere sunt introduse de mine în interpretor, iar celelalte sunt afi?ate de acesta.

Un exemplu pentru folosirea listelor este programul urm?tor care cite?te o dat? ?i o va afi?a în formatul: 24 mai 2012

# Afisarea datei, primind anul, luna, si ziua ca numere
lunile = [
'ianuarie',
'februarie',
'martie',
'aprilie',
'mai',
'iunie',
'iulie',
'august',
'septembrie',
'octombrie',
'noiembrie',
'decembrie'
]

an = raw_input('Anul: ')
luna = raw_input('Luna (1-12): ')
ziua = raw_input('Ziua (1-31): ')

luna_numeric = int(luna)
ziua_numeric = int(ziua)

# Nu uita sa scazi 1 din luna si ziua pentru a obtine indexul corect
nume_luna = lunile[luna_numeric-1]

print ziua + ' ' + nume_luna + ' ' + an
raw_input()

Slicing

Aceast? tehnic? reprezint? folosirea index?rii într-un interval. Pentru a în?elege cum func?ioneaz?, ave?i exemplul urm?tor:

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[3:6]
[4, 5, 6]
>>> numbers[0:1]
[1]

Se poate folosi ?i aici ?mecheria cu numerele negative:

>>>numbers[-3:-1]
[8, 9]

Dar dac? vrem s? folosim ultimele 2 caractere din aceast? list?, ce facem?


>>> numbers[-2:0]
[]

Nu e rezultatul a?teptat. Totu?i, de ce este returnat? o list? goal?? Tot timpul când elementul reprezentat de termenul din stânga apare dup? cel din dreapta (adic?, penultimul element fa?? de primul) este returnat? o list? goal?. Solu?ia problemei este

>>> numbers[-2:]
[9, 10]

Acel spa?iu gol de dup? (sau de dinainte, dup? caz) de : reprezint? cap?tul listei. Se poate folosi ?i astfel:


>>> numbers[:3]
[1, 2, 3]

Defapt, pentru a afi?a întreaga list? se poate folosi ?i:

>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Se poate specifica ?i un al treilea num?r dup? alte dou? puncte, care reprezint? „saltul” f?cut în timpul parcurgerii

>>> numbers[0:10:2]
[1, 3, 5, 7, 9]

Se poate specifica chiar ?i un num?r negativ

>>> numbers[10:0:-2]
[10, 8, 6, 4, 2]

Adunare ?i multiplicare

Pe scurt, adunarea func?ioneaz? astfel:

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'Hello, ' + 'world!'
'Hello, world!'
>>> [1, 2, 3] + 'world!'
Traceback (innermost last):
File "<pyshell#2>", line 1, in ?
[1, 2, 3] + 'world!'
TypeError: can only concatenate list (not "string") to list

iar multiplicarea va afi?a un string de un anumit num?r de ori:

>>> 'python' * 5
'pythonpythonpythonpythonpython'
>>> [42] * 10
[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]

Tuples

Ele sunt marcate de paranteze rotunde, iar diferen?a semnificativ? dintre liste ?i tuples este c? cele din urm? NU pot fi modificate. Câteva exemple:

>>> 1, 2, 3
(1, 2, 3)

>>> (1, 2, 3)
(1, 2, 3)

>>> 42
42
>>> 42,
(42,)
>>> (42,)
(42,)

A?a cum a?i observat, doar scriind mai multe numere, separate de virgul?, vom ob?ine un tuple, iar pentru a crea un tuple cu un singur element, acesta va trebui precedat de virgul?.

Not? de final

Articolul a ajuns destul de lung ?i am considerat c? voi prezenta restul despre liste ?i tuples în articolul urm?tor.

*Am folosit exemple de cod din cartea Beginning Python: From Novice to Professional de Magnus Lie Hetland, ISBN: 159059519X *

Tem?

De aceast? dat? nu voi da o tem?, aceasta va fi publicat? doar dup? terminarea întregii serii Structuri de date.

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...