Documente Academic
Documente Profesional
Documente Cultură
ro
In acest tutorial vei putea citi despre colectiile de date din Python: liste, enumerari si dictionare, si despre cum poti utiliza bucla for
pentru a le parcurge.
Inca te doare capul de la ultima discutie despre functii? Nu te ingrijora, urmatoarea sectiune te va solicita mai
putin. Ne intoarcem la ceva simplu - variabile.
Rolul variabilelor este de a stoca o anumita informatie. Ele pot intoarce acea informatie la un moment dat si
informatia detinuta poate fi modificata oricand.
Dar daca trebuie sa stochezi o lista lunga de date care nu se schimba in timp, cum ar fi de exemplu lunile
anului? Sau poate o lista de informatii care este actualizata in timp, cum ar fi numele pisicilor tale? Ai putea
avea noi pisici, unele ar putea muri, etc. Dar ce spui despre o carte de telefon? Pentru aceasta ai nevoie de
ceva referinte - ai avea o lista de nume si atasat fiecarui nume un numar de telefon. Cum ai face asta?
Pentru problemele descrise mai sus, Python ofera trei solutii diferite - enumerari, liste si dictionare:
Listele sunt exact ceea ce par - liste de valori. Fiecare este numerotata, incepand de la 0 - prima este
numerotata cu 0, a doua cu 1, a treia cu 2, etc. Poti sterge valori din lista sau poti adauga altele noi la
finalul acesteia. De exemplu, numele pisicilor tale.
Enumerarile sunt asemeni listelor, dar nu le poti schimba valorile. Valorile pe care le acorzi de la inceput
sunt valorile cu care ramai blocat tot restul programului. Din nou, fiecare valoare este numerotata
incepand cu 0, pentru o referire mai facila. De exemplu: denumirile lunilor anului.
Dictionarele sunt exact ceea ce le spune numele - dictionare. Intr-un dictionar, avem un index de cuvinte
si pentru fiecare dintre ele, o definitie. In python, indexul este denumit cheie (key), iar definitia - valoare
(value). Valorile dintr-un dictionar nu sunt numerotate si nu se afla intr-o anumita ordine. Poti adauga,
indeparta si modifica valorile din dictionare. De exemplu, cartea de telefon.
Enumerarile
Enumerarile sunt destul de usor de creat. Tot ceea ce trebuie sa faci este sa le dai un nume, si sa specifici
valorile pe care le contin. De exemplu, iata o enumerare cu lunile anului:
lunile_anului = ('Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
'Iulie','August','Septembrie','Octombrie','Noiembrie',' Decembrie')
Observa ca particula "" de la finalul primului rand leaga prima linie de urmatoarea. Este o metoda utila
Din punct de vedere tehnic, nu trebuie sa aplici parantezele (acele '(' si ')' ) dar astfel codul este mai
putin confuz.
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iii-a-liste-si-bucla-for-/149/1/375.htm 1/8
3.12.2014 E-learn.ro
Poti avea spatii dupa virgule daca doresti - dar nu conteaza prea mult.
Python organizeaza valorile dintr-o enumerare intr-un index util, numerotat - incepand cu 0, in ordinea in care
le-ai introdus. Va fi organizata astfel:
Index Valoare
0 Ianuarie
1 Februarie
2 Martie
3 Aprilie
4 Mai
5 Iunie
6 Iulie
7 August
8 Septembrie
9 Octombrie
10 Noiembrie
11 Decembrie
Listele
Listele sunt foarte asemanatoare enumerarilor. Listele pot fi editate, deci valorile lor pot fi modificate. De cele
mai multe ori, utilizam liste si nu enumerari, deoarece dorim sa schimbam valorile daca este necesar.
Listele sunt definite intr-un mod similar enumerarilor. Sa spunem ca ai 5 pisici, numite Tom, Snappy, Kitty,
Jessie si Chester. Pentru a le aseza sub forma unei liste, ar trebui sa scrii:
Dupa cum poti observa, codul este exact la fel ca al enumerarilor, CU EXCEPTIA FAPTULUI ca toate valorile se
afla intre paranteze patrate si nu intre paranteze rotunde. Din nou, nu exista spatii dupa virgule.
Valorile din liste sunt apelate la fel ca si in cazul enumerarilor. De exemplu, pentru a afisa numele celei de-a
treia pisici, ar trebui sa tastezi:
print pisici[2]
Poti accesa si o anumita sectiune dintr-o lista. De exemplu, pisici[0:2] va returna primele doua pisici.
Specificul listelor consta in posibilitatea modificarii lor. Pentru a adauga o valoare in lista, utilizeaza functia
append(). Sa spunem ca ai o noua pisica numita Catherine. Pentru a o adauga in lista, ar trebui sa tastezi:
pisici.append('Catherine')
Este cam ciudat, nu? Apelul functiei apare dupa denumirea listei, fiind delimitata de aceasta printr-un punct.
Aceasta sintaxa va fi explicata in urmatoarele tutoriale. Pentru moment, retine ca un element este adaugat
intr-o lista astfel:
Am clarificat? Bine!
Acum, situatia nefericita - Snappy a fost impuscat de un vecin si trebuie sa-l indepartezi din lista. Este usor:
Tocmai ai indepartat cea de-a doua pisica din lista. Si dupa aceasta parte morbida, sa trecem la:
Dictionare
Sa presupunem ca trebuie sa anunti cateva persoane cu privire la decesul pisicii favorite. Pentru aceasta, ai
nevoie de o carte de telefon.
Listele utilizate mai sus nu sunt prea adecvate pentru o carte de telefon. Trebuie sa afli un numar pe baza
numelui cuiva - si nu invers asa cum am procedat cu pisicile. In exemplele cu pisici si cu lunile anului, i-am oferit
computerului un numar si acesta ne-a oferit un nume. Acum vrem sa-i furnizam computerului un nume si sa ne
returneze un numar. De aceea avem nevoie de dictionare.
Deci cum cream un dictionar? Lasa deoparte echipamentul de lupta, nu este chiar atat de greu.
Aminteste-ti, dictionarele au chei si valori. Intr-o carte de telefon, ai numele persoanelor si apoi numerele.
Observi ceva asemanari?
Crearea unui dictionar seamana foarte mult cu cea a unei enumerari sau a unei liste. Enumerarile au ( si ) iar
listele [ si ]. Ce crezi ca au dictionarele? Iata un exemplu de dictionar care contine 4 numere de telefon:
Observa cum in loc de a identifica o valoare dupa numar, ca in cazul pisicilor sau al lunilor anului, identificam
valoarea utilizand o alta valoare- in acest caz numele persoanei.
Ok, am creat o noua agenda telefonica. Acum vrei sa adaugi noi numere de telefon. Iata cum:
Tot ceea ce spune acea linie este ca in cartea de telefon exista o persoana numita Gingerbread Man si ca
numarul sau este 1234567. Cu alte cuvinte - cheia este 'Gingerbread Man' iar valoarea este 1234567.
Stergerea inregistrarilor dintr-un dictionar se face ca si in cazul listelor. Sa spunem ca Andrew Parson este
vecinul vostru care a impuscat pisica. Nu vrei sa mai vorbesti vreodata cu el deci nu mai ai nevoie de numarul
sau. Ca intr-o lista, trebuie sa tastezi:
Din nou, este foarte usor. Operatorul del sterge orice functie, variabila sau inregistrare dintr-o lista sau
dictionar.
Iti amintesti de functia append pe care am utilizat-o pentru liste? Sunt destule functii asemanatoare care pot fi
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iii-a-liste-si-bucla-for-/149/1/375.htm 3/8
3.12.2014 E-learn.ro
Iti amintesti de functia append pe care am utilizat-o pentru liste? Sunt destule functii asemanatoare care pot fi
utilizate pentru dictionare. Mai jos poti vedea un program ce incorporeaza cateva dintre aceste functii, insotite
de explicatii.
Scrie acest program in Python IDLE (poti sari peste comentarii). Experimenteaza cat doresti.
else:
print "Sue nu este in dictionar"
keys.sort()
print keys
print values
values.sort()
print values
Bucla "for"
In esenta, bucla for executa ceva pentru fiecare valoare din lista. Modul in care este setata poate parea putin
confuz, dar de fapt este foarte simplu. Iata un exemplu al utilizarii acesteia:
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iii-a-liste-si-bucla-for-/149/1/375.htm 4/8
3.12.2014 E-learn.ro
# creeaza bucla:
# Parcurge newList si pune fiecare element
# in variabila value si afiseaz-o
for value in newList:
print value
Dupa cum vezi, bucla trece prin toate valorile listei mentionate dupa in. Apoi le aseaza in value, executa codul
imbricat in bucla si trece la urmatoarea valoare. Urmatorul exemplu parcurge un string care este citit de la
tastatura:
# FUNCTIA MENU
# Programul citeste un string cu optiunile din meniu
# si o intrebare
# Asigura-te ca optiunile nu se repeta.
return input(question) - 1
def menu(list, question) defineste functia menu cu doi parametri: o lista cu optiunile meniului si
intrebarea pentru alegerea unei optiuni.
for entry in list parcurge lista entry
list.index(entry) utilizeaza functia .index() pentru localiza pozitia elementului entry.
Elementul entry este afisat, apoi se trece la elementul urmator
Dupa iesirea din bucla for, input(question) - 1 afiseaza intrebarea, apoi returneaza valoarea in
programul principal.
Nu a fost prea greu, nu? Programul propriu-zis are 5 linii - acesta este miracolul a ceea ce am invatat pana
acum! Vom verifica functia pe care am scris-o in urmatoarele exemple.
Din acesta putem scrie un program adevarat. Esti pregatit? Iata-l (treci peste comentarii):
#functia menu
def menu(list, question):
for entry in list:
print 1 + list.index(entry),
print ") " + entry
return input(question) - 1
#Cheia se afla in vaza (al doilea element din lista de mai sus):
keylocation = 2
loop = 1
print ""
keyfound = 1
else:
print "Vasul cu plante e gol."
print ""
elif choice == 1:
if choice == keylocation:
print "Ai gasit o cheie in spatele tabloului."
print ""
keyfound = 1
else:
print "Nu se afla nimic in spatele tabloului."
print ""
elif choice == 2:
if choice == keylocation:
print "Ai gasit o cheie in vaza."
print ""
keyfound = 1
else:
print "Vaza e goala."
print ""
elif choice == 3:
if choice == keylocation:
print "Ai gasit o cheie sub veioza."
print ""
keyfound = 1
else:
print "Nu se afla nimic sub veioza."
print ""
elif choice == 4:
if choice == keylocation:
print "Ai gasit o cheie in pantof."
print ""
keyfound = 1
else:
print "Nu se afla nimic in pantof."
print ""
elif choice == 5:
if keyfound == 1:
loop = 0
print "Ai incercat cheia si usa a fost descuiata."
print ""
else:
print "Usa e incuiata, trebuie sa gasesti cheia."
print ""
print "Felicitari
ai reusit sa iesi din camera."
Un joc foarte simplu, dar amuzant. Nu fii speriat de numarul mare de linii de cod pentru ca multe dintre ele sunt
instructiuni "if", foarte usor de citit.
Sa imbunatatim jocul
Prima intrebare pe care ar trebui sa ti-o pui este "functioneaza programul?" Raspunsul este da. Apoi ar trebui
sa te intrebi "functioneaza bine?" - nu chiar. Functia menu() este grozava - te scuteste de a tasta mult cod.
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iii-a-liste-si-bucla-for-/149/1/375.htm 7/8
3.12.2014 E-learn.ro
sa te intrebi "functioneaza bine?" - nu chiar. Functia menu() este grozava - te scuteste de a tasta mult cod.
Bucla 'while' este putin confuza - 4 nivele de indentare intr-un singur program. Se poate si mai bine!
In urmatoarele tutoriale vei vedea ca acest exemplu ar putea fi mult mai usor implementat cu ajutorul claselor.
Dar, momentan, sa ne multumim cu o functie ce va reduce dezordinea. Ii vom transmite 2 parametri - optiunea
aleasa si locatia cheii. Valoarea returnata este 1 in cazul in care cheia a fost gasita si 0 in caz contrar. Sa
vedem cum functioneaza:
def inspect(choice,location):
if choice == location:
print ""
print "Ai gasit cheia!"
print ""
return 1
else:
print ""
print "Nimic interesant aici."
print ""
return 0
Acum programul principal poate fi ceva mai simplu. Iata bucla while modificata:
while loop == 1:
keyfound = inspect(menu(items,"Ce obiect vrei sa examinezi? "),keylocation)
if keyfound == 1:
print "Ai incercat cheia si usa a fost descuiata!"
loop = 0
Acum programul devine cu mult mai scurt - de la 83 linii greoaie la 50 linii clare! Desigur, pierzi ceva din
versatilitate, toate articolele din camera vor genera aceleasi mesaje. In plus, jocul devine mai putin interesant
deoarece usa este descuiata automat dupa ce gasesti cheia. Totodata, programul devine ceva mai greu de
modificat.
Cam atat despre liste si bucla for. In urmatorul tutorial din aceasta serie vei putea citi despre clase, obiecte, si
utilizarea lor in Python.
Copyright 2008-2010 E-LEARN.ro. Toate drepturile rezervate. Conceput si realizat de Neokinetics Software.
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iii-a-liste-si-bucla-for-/149/1/375.htm 8/8