Sunteți pe pagina 1din 8

3.12.2014 E-learn.

ro

Introducere in Python - Partea a III-a. Liste si bucla for. 04.08.2009

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.

7492 afisari 1 Rating (0 voturi) 30 min

Enumerari, liste si dictionare


Introducere

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?

Solutia - Liste, enumerari si dictionare

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

pentru ca randurile lungi sa devina mai inteligibile.

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

Si acestea sunt enumerarile! Foarte usor...

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:

pisici = ['Tom', 'Snappy', 'Kitty', 'Jessie', 'Chester']

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:

#adauga o noua valoare la sfarsitul listei:


nume_lista.append(valoare_noua)

#ex. adauga numarul 5038 in lista 'numbers':


http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iii-a-liste-si-bucla-for-/149/1/375.htm 2/8
3.12.2014 E-learn.ro
#ex. adauga numarul 5038 in lista 'numbers':
numbers.append(5038)

Am clarificat? Bine!

Acum, situatia nefericita - Snappy a fost impuscat de un vecin si trebuie sa-l indepartezi din lista. Este usor:

#Sterge cea de-a doua pisica, Snappy.


del pisici[1]

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:

#Creeaza o agenda telefonica:


agenda = {'Andrew Parson':8806336,
'Emily Everett':6784346, 'Peter Power':7658344,
'Lewis Lame':1122345}

Pentru a afisa numarul de telefon al lui Lewis Lame, am scrie:

print agenda['Lewis Lame']

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:

#Adauga persoana 'Gingerbread Man' in agenda


agenda['Gingerbread Man'] = 1234567

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:

del agenda['Andrew Parson']

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.

#Cateva exemple de dictionare

#Mai intai definim un dictionar care este gol


ages = {}

#Adaugam cateva nume in dictionar


ages['Sue'] = 23
ages['Peter'] = 19
ages['Andrew'] = 78
ages['Karren'] = 45

#Utilizam functia has_key() -


#Aceasta functie are prototipul:
#nume_functie.has_key(nume_cheie)
#si returneaza TRUE daca dictionarul
#contine cheia respectiva
#si FALSE in caz contrar
if ages.has_key('Sue'):
print "Sue este in dictionar. Ea are",
ages['Sue'], "ani"

else:
print "Sue nu este in dictionar"

#Utilizam functia keys() -


#Aceasta functie returneaza o lista
#cu toate denumirile cheilor din dictionar.
print "Dictionarul contine urmatoarele persoane:"
print ages.keys()

#Cheile pot fi retinute intr-o lista:


keys = ages.keys()

#Similar, functia values()


#returneaza o lista cu valorile din dictionar.
print "Varstele persoanelor sunt:",
ages.values()

#Retinem valorile intr-o lista:


values = ages.values()

#Poti ordona o lista folosind functia sort()


#Nu poti ordona dictionare
print keys

keys.sort()
print keys

print values
values.sort()
print values

#Poti afla numarul de elemente dintr-un dictionar


#utilizand functia len()
print "Dictionarul are ",
len(ages), "elemente"

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

# Exemplu bucla 'for'


# In primul rand creeaza o lista pe care o vom parcurge:
newList = [45, 'mananca', 90210, "Buna dimineata", -67]

# 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:

# exemplu de program ce parcurge un string


word = raw_input("Introdu sirul de caractere: ")

for letter in word:


call = "Litera " + letter + "!"
print call

print "Sirul de caractere este:"


print word + "!"

Tocmai ai invatat cateva lucruri:

Dupa cum vezi, variabilele string sunt liste de caractere.


Programul trece prin fiecare litera (sau valoare) din cuvant si le afiseaza pe ecran.

Crearea unei functii meniu


Pana acum ai invatat despre variabile, liste, bucle si functii. In continuare vei putea vedea cateva exemple de
programe ce utilizeaza notiunile parcurse.

# FUNCTIA MENU
# Programul citeste un string cu optiunile din meniu
# si o intrebare
# Asigura-te ca optiunile nu se repeta.

def menu(list, question):


for entry in list:
print 1 + list.index(entry),

print ") " + entry

return input(question) - 1

Iata explicatia codului:

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.

Primul tau "Joc"


Cum va arata primul tau program? Ce-ai spune despre un (foarte) simplu joc de aventuri? Pare a fi amuzant!
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iii-a-liste-si-bucla-for-/149/1/375.htm 5/8
3.12.2014 E-learn.ro
Va cuprinde doar o camera a unei case si va fi extrem de simplu. Vor exista 5 articole si o usa. Intr-unul dintre
cele 5 articole se va afla o cheie pentru usa. Trebuie sa gasesti cheia si sa deschizi usa. Iti voi oferi intai o
varianta in pseudocod, apoi in python:

# Versiunea in pseudocod a jocului

Introdu functia menu in program

Afiseaza un mesaj ce cuprinde descrierea camerei.


Utilizatorul poate inspecta 6 obiecte: un vas cu plante, un tablou,
o vaza, o veioza, un pantof si usa

Spune calculatorului ca usa e incuiata


Spune calculatorului unde se afla cheia

Afiseaza meniul cu obiectele:


Afiseaza cele 6 optiuni
Afiseaza intrebarea "Ce obiect vrei sa examinezi?"

daca utilizatorul vrea sa se uite catre:


vasul cu plante:
In cazul in care cheia e ascunsa aici, da-i cheia
altfel spune-i ca nu se afla aici
tablou:
la fel ca mai sus
etc.
usa:
daca utilizatorul are cheia, deschide usa
altfel spune-i sa mai caute

Afiseaza un mesaj de succes pentru completarea jocului.

Din acesta putem scrie un program adevarat. Esti pregatit? Iata-l (treci peste comentarii):

#PRIMUL TAU JOC

#functia menu
def menu(list, question):
for entry in list:

print 1 + list.index(entry),
print ") " + entry

return input(question) - 1

#Creeaza lista cu obiectele din camera:


items = ["vas cu plante","tablou","vaza","veioza","pantof","usa"]

#Cheia se afla in vaza (al doilea element din lista de mai sus):
keylocation = 2

#Utilizatorul nu a gasit cheia:


keyfound = 0

loop = 1

#Scrie un text de introducere:


print "Aseara ai adormit in camera ta."

print "Dimineata te-ai trezit incuiat intr-o camera necunoscuta, "


print "si nu stii cum si cand ai ajuns acolo. In camera poti vedea "
print len(items), "obiecte:"
for x in items:
print x
print ""
print "Usa e incuiata. Crezi ca poti gasi cheia?"
#Atat timp cat utilizatorul se afla in camera
#parcurge o bucla infinita:
http://www.e-learn.ro/printare-tutorial/python/introducere-in-python-partea-a-iii-a-liste-si-bucla-for-/149/1/375.htm 6/8
3.12.2014 E-learn.ro
#parcurge o bucla infinita:
while loop == 1:
choice = menu(items,"Ce obiect vrei sa examinezi? ")
if choice == 0:
if choice == keylocation:
print "Ai gasit o cheie in vasul cu plante."

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

# Aminteste-ti ca continua codul pe urmatoarea linie

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

S-ar putea să vă placă și