0% au considerat acest document util (0 voturi)
472 vizualizări

Python

Încărcat de

Bogdan Blue
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOC, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
472 vizualizări

Python

Încărcat de

Bogdan Blue
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOC, PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 25

PYTHON

În Python există câteva tipuri principale de date:


1. int întregi
2. float - în virgulă mobilă
3. string (str) - șiruri
4. boolean – True, False

Ca să aflăm cu ce fel de date lucrăm utilizăm funcția type.


Când introduci nume sau alte date literale scrii simplu input (‘……..’). Când însă introduci
numere (întregi sau în virgulă mobilă) e musai să arăți de ce tip sunt (int sau float).
nume = input(‘Care e numele tau? ’)
varsta = int(input(‘Cati ani ai? ’))
venit = float(input(‘Care e venitul tau? ’))

Operațiile matematice pot fi făcute doar cu valori numerice și NU cu șiruri.


Concluzia este următoarea: atunci când introduci nume sau alte date literale scrii simplu input
(‘……..’). Când însă introduci numere (întregi sau în virgulă mobilă) e musai să arăți de ce tip
sunt (int sau float).

Precedența operatorilor matematici


1. Ridicarea la putere se execută prima (**)
2. Înmulțirea, împartirea și restul (* / // %) al doilea
3. Adunarea și scăderea ultimele

Python permite să spargi o declarație în linii multiple folosind backslah- ( \ ).

Caracterul escape
Caracterul escape este unul special care e ilustrat de un backslash (\) ce apare înăuntrul unui șir
literal.
Ex.
print(‘Unu\nDoi\nTrei’)
afișează:
Unu
Doi
Trei
ceea ce înseamnă că \n reprezintă o linie nouă (n vine de la new line).
Când operatorul + se folosește la adunarea șirurilor se cheamă concatenare (legare).
Când un număr în virgulă mobilă e afișat pe ecran, el poate avea și 12 zecimale.

Cum facem totuși ca rezultatul să nu mai apară ca o inșiruire grosiera de numere? Simplu:
invocăm funcția format. Când invoci funcția format, îi treci două argumente:
- o valoare numerică
- un specificator de format

1
Omiterea primului sau celui de-al doilea indice în specificarea parametrilor unui sub¸sir, are ca
efect înlocuirea primului indice cu zero, respectiv cu lungimea ¸sirului din care se încearc˘a
extragerea sub¸sirului, dac˘a se omite al doilea parametru.
>>> word[:2] # Primele doua caractere
’He’
>>> word[2:] # Tot \c{s}irul \^{i}nafara de primele doua caractere
’lpA’

Indicii pot fi ¸si numere negative, în acest caz se considera ca indicele zero se afla cel mai la
dreapta:
>>> word[-1] # ultimul caracter
’A’

Mai jos ave¸ti un tabel care v˘a va ajuta la în¸telegerea mecanismului de numerotare al unui sir
de caractere:
+---+---+---+---+---+
|H|e|l|p|A|
+---+---+---+---+---+
012345
-5 -4 -3 -2 -1

Prima linie de numere reprezinta legatura indicilor pozitivi cu sirul.


A doua linie reprezinta corespondenta dintre caracterele sirului si indicii negativi. Un subsir de
la i la j este format din toate caracterele dintre cei doi indici i,respectiv j. Pentru indicii pozitivi
lungimea sub¸sirului este data de diferenta indicilor margina si daca nici unul dintre ei nu este
mai mare decât lungimea sirului. De exemplu lungimea subsirului word[1:3] este 2.

Functia len() întoarce lungimea unui sir de caractere:


>>> s = ’supercalifragilisticexpialidocious’
>>> len(s)
34

La fel ca ¸si la ¸siruri, primul element al unei liste are indicele 0. În acela¸si fel ca ¸si la
¸siruri, listele pot fi pozi¸tionate,
concatenate ¸si a¸sa mai departe:
>>> a[0]
’spam’
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
[’eggs’, 100]
>>> a[:2] + [’bacon’, 2*2]
[’spam’, ’eggs’, ’bacon’, 4]
>>> 3*a[:3] + [’Boe!’]
[’spam’, ’eggs’, 100, ’spam’, ’eggs’, 100, ’spam’, ’eggs’, 100, ’Boe!’]
Spre deosebire se ¸siruri, elementele unei liste pot fi modificate:
>>> a
2
[’spam’, ’eggs’, 100, 1234]
>>> a[2] = a[2] + 23
>>> a
[’spam’, ’eggs’, 123, 1234]
Func¸tia len() se aplic˘a ¸si listelor :
>>> len(a)
4

Utilizarea sublistelor este de asemenea posibil˘a. Prin folosirea lor se poate modifica chiar ¸si
dimensiunea listei :
>>> # substituirea unor componente :
... a[0:2] = [1,12]
>>> a
[1,12,123,1234]
>>> # eliminarea unor componente :
... a[0:2] = []
>>> a
[123,1234]
>>> # inserarea unor componente :
... a[1:1] = [’bletch’,’xyzzy’]
>>> a
[123,’bletch’,’xyzzy’,1234]
>>> # inserarea unei liste la debutul ei
... a[:0] = a
>>> a
[123,’bletch’,’xyzzy’,1234,123,’bletch’,’xyzzy’,1234]
>>> len(a)
8

Este posibil s˘a crea¸ti liste din alte liste (de exemplu prin concatenare):
>>> q = [2, 3]
>>> p = [1, q, 4]
>>> len(p)
3
>>> p[1]
[2, 3]
>>> p[1][0]
2
>>> p[1].append(’xtra’) # See section 5.1
>>> p
[1, [2, 3, ’xtra’], 4]
>>> q
[2, 3, ’xtra’]

3
Specificatorul de format (format specifier) este un șir care conține caractere speciale ce arată
cum valorile numerice trebuiesc formatate.
Ex: format (12345.6789, ‘.2f’)
Primul argument, care este un număr în virgulă mobilă (12345.6789), este numărul pe care
vrem să-l formatăm.
Al doilea argument este un șir – ‘.2f’ – și reprezintă specificatorul de format.
Iată ce înseamnă el luat “pe bucăți” :
.2 specifică precizia; el arată că vrem să rotunjim numărul la două zecimale.
f vine de la float și specifică faptul că numărul pe carel formatăm este în virgulă mobilă (pentru
formatarea întregilor, cum vom vedea, nu se folosește litera f ci d).
În aceste condiții, funcția format returnează un șir care conține numărul formatat:
>>> print(format(12345.6789, ‘.2f’)) #[Enter]
12345.68

Să notăm că în ultima linie a codului am trecut sep=’ ’ ca argument al funcției print.Acesta


specifică faptul că nu trebuie afișat niciun spațiu între itemii care urmează să fie afișați. Dacă
nu facem acest lucru, va apărea un spațiu între $ și sumă.

Formatarea unui număr în virgulă mobilă ca procent


Aici în loc să folosim litera f folosim simbolul procentului ( %) ca să formatăm un număr ca
procent:
>>> print(format(0.5, %))
50.000%
Și încă un exemplu care are 0 ca precizie:
>>> print(format(0.5, ‘.0%’))
50

Formatarea șirurilor
Șirurile și alte obiecte au o sintaxă specială pentru funcții numită metodă, asociată unui tip
particular de obiect. Obiectele de tipul șir (str) au o metodă numita format. Sintaxa pentru
această metodă conține obiectul urmat de punct urmat de numele metodei și următorii
parametri dintre paranteze:
obiect.nume_metoda(parametri)
În exemplul de mai sus obiectul este șirul ‘Salut {}’ iar metoda este format.
Parametrul este nume.
După cum se observă la ieșire, acoladele sunt înlocuite de valoarea preluată din lista
parametrilor metodei format. Deoarece acoladele au un înțeles special în formatarea șirurilor,
este nevoie de o regulă specială dacă vrem ca ele să fie incluse în formatarea finală a șirurilor.
Regula este dublarea acoladelor: ‘{{‘ și ‘}}’

Primii pasi în programare


4
Bineînteles ca putem folosi Python si la alte lucruri decât pentru a aduna 2 cu 2. Putem de
exmplu sa generam o subsecventa din sirul lui Fibonacci:
>>> # Seria lui Fibonacci:
... # Suma a doua elemente reprezinta urmatorul element.
... a, b = 0, 1
>>> while b < 10:
... print b
... a, b = b, a+b
...
1
1
2
3
5
8
Acest exemplu demonstreaza urmatoarele notiuni:
• Prima linie contine o atribuire multipla. Varibilele a ¸si b iau valorile 0 respectiv 1. Pe ultima
linie, de asemenea este folosita atribuirea multipla. Evaluarea expresiilor din partea dreapta a
unei atribuiri se face înainte de orice atribuire. Evaluarea se face de la stânga la dreapta.
• Bucla while se execut˘a atâta timp cât b < 10 (atâta timp cât condi¸tia este adev˘arat˘a). La fel
ca în C, zero înseamna fals, si orice numar diferit de zero înseamna adevarat. Conditia poate fi
un sir, un element de lista, absolut orice. Orice secventa de lungime diferita de zero înseamna
adevarat si invers. Conditia folosita în acest exemplu este o comparatie. Comparatorii standard
sunt la fel ca în C: <(mai mic), >(mai mare), ==(egal),
<=(mai mic sau egal), >=(mai mare sau egal), !=(diferit).
• Instruc¸tiunile din bucl˘a sunt aliniate. Alinierea (indentation) reprezinta modul în care
Python grupeaz˘a instructiunile.
Deocamdata (!) Python nu dispune de un editor în linie de comanda inteligent, astfel încât
alinierea, tabularea sa se faca automat. Sunteti deci obligat sa folositi tab sau spatii pentru a
realiza gruparea instructiunilor.
Când veti scrie programe Python veti folosi un editor de text. Majoritatea editoarelor de la ora
actuala realizeaza automat tabularea. Pentru a încheia un bloc de instuctiuni trebuie introdusa o
linie goala pentru a indica editorului ca editarea blocului de comenzi s-a încheiat (editorul nu
poate ghici când ati introdus ultima linie. Atentie! fiecare instruc¸tiune dintr-un bloc de
instructiuni trebuie sa aiba aceleasi numar de spatii si taburi înainte, deci instructiunile trebuie
sa fie perfect aliniate.
• Instructiunea print afiseaza expresia pe care o primeste ca parametru. ¸ Sirurile de caractere
sunt afisate fara ghilimele, ¸si un spatiu este inserat între elemente, astfel încât afisarea
diverselor valori sa mearga de la sine:
>>> i = 256*256
>>> print ’Valoarea lui i este:’, i
Valoarea lui i este: 65536
O virgula la sfârsitul listei de parametrii ai instructiunii print, inhib˘a saltul cursorului pe linia
urmatoare la sfârsitul instructiunii:
>>> a, b = 0, 1
>>> while b < 1000:
... print b,
... a, b = b, a+b
...
5
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
Observati ca interpretorul sare la linia urmatoare înainte de a începe afisarea, daca ultima linie
a fost incompleta.

Capitolul II FUNCȚII
Definirea unei functii se face cu ajutorul cuvantului def (define). Codul unei funcții este (și)
definiția unei funcții. Ca să execuți o funcție, scrii pur si simplu declarația care o invocă
(numele funcției) urmată de paranteze ().
Indentarea (Important!!!)
Într-un bloc indentarea se face cu același număr de linii. De obicei se folosește tab-ul sau
patru spații. Dacă în același program folosim o dată patru spații , altădată tabul sau trei,
cinci ori “n” spații, programul va da eroare de indentare.

Constante și variabile globale


O variabilă globală este accesibilă tuturor funcțiilor dintr-un program. Ea se creează în
afara oricărei funcții. Este totuși indicat să nu folosiți variabile globale. În schimb puteți să
utilizați constante globale.
O constantă globală referă o valoare care NU POATE FI SCHIMBATĂ.
Prin convenție, constantele globale se scriu cu majuscule și sunt așezate la începutul
programului, înaintea oricăror alte declarații.

Funcția lambda
Python permite crearea unei funcții anonime folosind cuvântul cheie lambda. O funcție
anonimă poate să conțină doar o singură expresie care neapărat trebuie să returneze o valoare.
Altfel ca la crearea unei funcții comune care folosește def, o funcție creată cu lambda
returnează un obiect funcție. Acesta poate fi atribuit unei variabile care poate fi folosită în orice
moment ca să execute expresia conținută. Să vedem cum arată în Terminal o funcție normală,
aceeași funcție creată cu ajutorul cuvântului cheie lambda și o funcție lambda căruia nu-i
atribuim nicio variabilă (da, permite și acest lucru!).

Capitolul III STRUCTURI DE DECIZIE


6
Declarația if

operatorii de comparatie in Python. Ei sunt prezentati mai jos:


< Mai mic ca
> Mai mare ca
<= Mai mic sau egal cu
>= Mai mare sau egal cu
== Egal cu
!= Diferit de (nu este egal cu)

Declarația if- else


O declarație if-else execută un bloc de declarații dacă (if) condiția e adevarată sau alt bloc
(else) dacă condiția e falsă.
Forma generală:
if conditie:
declaratie
declaratie
etc
else:
declaratie
declaratie

Structuri de decizie imbricate31 și declarația if-elif-else


Ca să testeze mai mult de o condiție, o structură de decizie poate fi imbricată înăuntrul altei
structuri de decizie. Pentru a ușura și a face economie de efort și de spațiu se poate utiliza
declarația (clauza) if-elifelse.

Operatori logici:
Sunt: and, or, not.

Variabile booleene
O variabilă booleană poate referi două valori: TRUE sau FALSE. Ele arată dacă o condiție
există. Variabilele booleene sunt folosite ca indicatori. Un indicator este o variabilă care
semnalizeaza când o condiție există în program.

Bucle
Buclele sunt acele părți dintr-‐-un program care sunt folosite ca să execute o declarație atâta
timp cât o expresie este adevărată.
3.7. Bucla while – o buclă controlată
O condiție controlată face ca o declarație sau un bloc de declarații să se repete atâta timp
cât o condiție e adevărată. Python folosește declarația (bucla) while ca să scrie o astfel de
condiție.
buclă while e asemănătoare condiționalei if cu diferența că cea din urmă funcționeazădoar o
singură dată iar while până când condiția ei este atinsă

Bucla infinită
7
Să spunem că avem următorul exemplu de buclă while:
numar = 0
while numar < 10:
print(numar)
În acest program valoarea variabilei numar nu se schimbă niciodată și deci declarația
numar < 10 este întotdeauna adevărată. Python va afișa la infinit numărul 0. Ca să oprim
bucla infinită trebuie pur și simplu să întrerupem brutal shell-‐-ul Python. Există însă o
posibilitate de a întrerupe o buclă infinită atunci când scriem programul. Pentru aceasta
folosim declarația break:
x=0
numar = 1
while x < 10 and numar > 0:
numar = int(input(’Introdu un numar: ’))
break

Bucla for
Bucla for iterează de un număr specific de ori.

Folosirea funcției range cu bucla for


Funcția range creează un tip de obiect numit iterabil. Un iterabil este similar unei liste
def main():
#Afiseaza un mesaj de 5 ori
for x in range(5):
print(‘Ce faci Caine?!’)
#Cheama functia principala
main()

Funcția for …in range produce o secvență de numere care crește cu valoarea 1 fiecare
număr succesiv din listă până când este atinsă valoarea 5 inclusiv. Să vedem ce se întâmplă
cu următoarea declarație:
for numar in range(1, 10, 2):
print(numar)
Primul argument este 1 iar ultimul argument este 10. Dar ce reprezintă numărul 2 ? Acesta
este folosit ca valoarea de pas (step valor sau pas). Astfel, fiecare număr succesiv din
secvență în loc să crească cu 1, va crește cu valoarea pasului, în cazul nostru 2. Deci 2 va fi
adăugat fiecărui număr succesiv din secvență:

>>> # Masoara marimea unor \c{s}iruri


... a = [’cat’, ’window’, ’defenestrate’]
>>> for x in a:
... print x, len(x)
...
cat 3
window 6
defenestrate 12

>>> for x in a[:]: # copiaza intreaga lista


8
... if len(x) > 6: a.insert(0, x)
...
>>> a
[’defenestrate’, ’cat’, ’window’, ’defenetrate’]

Functia range()
Daca este necesara o iteratie pe o multime de numere, puteti folosi functia range() pentru a
genera liste ce contin progresii aritmetice :
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Paramentrul furnizat functiei range() nu va fi niciodata un membru al secventei. Este posibil ca


functia range() sa genereze o secventa începând cu un alt numar decât 0, sau ratia progresiei
aritmetice poate fi modificata:
>>> range(5, 10)
[5, 6, 7, 8, 9]
>>> range(0, 10, 3)
[0, 3, 6, 9]
>>> range(-10, -100, -30)
[-10, -40, -70]
Pentru a realiza o iteratie pe o multime de numere folositi functiile range() ¸si len() astfel:

>>> a = [’Mary’, ’had’, ’a’, ’little’, ’lamb’]


>>> for i in range(len(a)):
... print i, a[i]
...
0 Mary
1 had
2a
3 little
4 lamb

Acumulatori
Un total de funcționare (running total) este o sumă de numere care acumulează fiecare
iterare (trecere, execuție) a unei bucle. Variabila folosită ca să înmagazineze totalul se
cheamă acumulator.
Să luăm un program care demonstrează un acumulator:
#Acest program calculeaza suma unei serii
#de numere introduse de user
#Ia constanta pentru numarul maxim
MAX = 5 (Reține! Constanta se pune la început)
Def main():
#Initializeaza variabila acumulator
total = 0.0 (acumulatorul se ințializează întotdeauna cu 0.0)
#Explica ceea ce faci
print(‘Acest program calculeaza suma’)
print(MAX, ‘numerelor introduse.’)
#Ia numerele si acumuleaza-le
for counter in range(MAX):
9
number = int(input(‘Introdu un numar: ’))
total = total+number
#Afiseaza totalul numerelor
print(‘Totalul este’, total)
#Cheama functia principala
main()

Operatori de atribuire augmentată


Aceștia ajută la prescurtarea și deci simplificarea codului.
Exemple:
x= x + 1 se mai poate scrie x+=1
sau:
y= y - 2 se mai poate scrie y-=2
sau:
z= z * 5 se mai poate scrie z*=5
sau
total = total + number devine total += number

Bucle de validare a intrărilor


Validarea intrărilor (input-‐-ului) este procesul de verificare a datelor care sunt introduse
într-‐-un program ca să fii sigur că sunt corecte înainte de a fi folosite în calcule. Dacă un
user introduce date greșite, programul va scoate răspunsuri eronate
#Acest program afiseaza salariul unui angajat
def main():
#Ia numarul orelor lucrate intr-o saptamana
ore = int(input(‘Introdu nr orelor lucrate intr-o saptamana: ’))
#Asigura-te ca userul nu introduce o valoare absurda
while ore > 40:
print(‘Eroare! Nu poti lucra mai mult de 40 de ore!’)
ore=int(input(‘Introdu orele corecte: ’))
#Ia salariul orar
sal_orar=float(input(‘Introdu salariul orar: ’))
#Calculeaza salariul
salariu = ore * sal_orar
#Afiseaza salariul
print(‘Salariul este: ’, format(salariu, ‘,.2f’))
#Cheama functia main
main()

Bucle imbricate
O buclă aflată înăuntrul altei bucle se cheamă imbricată.

Capitolul IV Module
O funcție care returnează valori este o funcție care trimite înapoi o valoare părții din
program care a chemat-‐-o. Python oferă o bibliotecă (pre) scrisă de funcții care face asta.
10
Această bibliotecă conține o funcție care generează numere aleatoare (întâmplătoare).
Când invoci o funcție stocată într-‐-un modul, trebuie să scrii o declarație de import în
partea cea mai de sus a programului. Spre exemplu, să luăm modulul numit math. El
conține funcții matematice care lucreză cu numere reale (în virgulă mobilă). Dacă vrei să
folosești modulul math trebuie să scrii în vârful programului o declarație ca aceasta:
import math

Generarea numerelor aleatoare


Python oferă câteva biblioteci de funcții care lucrează cu numere aleatoare (întâmplătoare).
Acestea sunt stocate într-‐-un modul numit random. Ca să generăm numere aleatoare vom
importa modulul random prin declarația:
import random
Prima funcție aleatoare generată se numeste randint.
number = random.randint(1, 100)
Argumentul (1, 100) spune funcției randint să afișeze un numar întreg aleator situat între 1
și 100.
Exemplu de program:
#Acest program afiseaza un numar aleator
#situat in marja 1 pana la 100
import random
def main():
#Ia un numar aleator
numar = random.randint(1, 100)
#Afiseaza numarul
print(‘Numarul este’, numar)
#Cheama functia principala
main()

Acuma să luăm un alt exemplu în care iterăm cu o buclă for de 5 ori:


#Acest program afiseaza 5 numere aleatoare
#situate intre 1 si 100
import random
def main():
for count in range(5):
#Ia un numar aleator
numar = random.randint(1, 100)
#Afiseaza numarul
print(numar)
#Cheama main
main()
Sa simplificăm programul anterior astfel:
import random
def main():
for count in range(5):
print(random.randint(1, 100))
main()

Funcțiile randrange, random și uniform


Funcția randrange ia același argument ca funcția range. Diferența este că randrange nu

11
returnează o listă de valori. În loc de asta, ea returnează o valoare aleatoare dintr-‐-o
secvență de valori.
De exemplu, următoarea declarație atribuie un număr aleator situat între 0 și 9 variabilei
numar:
numar = random.randrange(10)
Argumentul – în cazul nostru 10 – specifică limita unei secvențe de valori. Funcția va
returna un număr aleator selectat din secvența de la 0 în sus dar nu include limita sfârșitului,
adică numărul 10.
Următoarea declarație specifică și valoarea de început dar și de sfârșit a secvenței:
numar = random.randrange(5, 10)
Când această declarație e executată, un număr întâmplător cuprins între 5 și 9 va fi atribuit
variabilei număr.

Scrierea propriei funcții care returnează o valoare


O funcție care returnează o valoare conține o declarație return care înapoiază o valoare
părții de program care a invocat-‐-o.
Scrierea unei funcții care returnează o valoare se face la fel ca scrierea unei funcții simple
cu o excepție: o funcție care returnează o valoare trebuie să aibă o declarație return.
Forma generală a funcției este:
def function_name():
declaratie
declaratie
etc
return expression

Modulul matematic
Modulul math conține numeroase funcții care pot fi folosite în calcule matematice
Ex:
rezultat = math.sqrt(16)
Funcția sqrt acceptă argumentul 16 și îi returnează rădăcina pătrată (care e 4).
Valorarea math.pi
Suprafața cercului este constanta pi înmulțită cu raza cercului la pătrat, după cum bine
știm din clasa a VII-‐-a, de la studiul geometriei plane:
suprafata = math.pi*radius**2
Ce se întâmplă? Suprafața cercului este S=pi**r (unde r este raza cercului) la pătrat. Dar
cum pi este o constantă universală care aparține modulului matematic, trebuie să scriem
math.pi.
Modulul calendar
Sa luam de exmplu modulul implicit Python calendar. El se importa ca oricare alt modul,
asa cum am aratat mai devreme, cu declaratia import:
import calendar
Ca să afișăm de exemplu cum arăta anul Revoluției 1989 trebuie să ne referim la funcția
inclusă în modulul calendar, prcal (printează calendar) folosind notația cu punct:
calendar.prcal()
Programul următor afișeaza anul amintit:
12
import calendar
an = int(input(’Introdu anul dorit: ’))
prcal(an)

Strucuri de date
Tipul de date list˘a mai dispune de câteva metode. Iat˘a toate metodele obiectelor de tip list˘a:
append(x) Adaug˘a un element la sfâr¸situl listei.
extend(L) Adaug˘a la sfâr¸situl listei, elementele listei furnizate ca parametru.
insert(i, x) Insereaz˘a un element într-o anumit˘a pozi¸tie. Primul argument reprezint˘a indicele elementului din
list˘a înaintea c˘aruia se va face inser¸tia, deci a.insert(0,x) va insera elementul ’x’ la începutul listei, iar
a.insert(len(a),x) este echivalent cu a.append(x).
remove(x) ¸ Sterge din list˘a primul element g˘asit cu valoarea ’x’. Dac˘a nu exist˘a un astfel de element apare o
eroare.
pop([i]) ¸ Sterge din list˘a elementul de pe pozi¸tia ’i’, ¸si întoarce valoarea acestuia. Dac˘a nu este specificat nici
un
parametru a.pop(), va ¸sterge ¸si va returna ultimul element din list˘a.
index(x) Întoarce indicele primului parametru din list˘a care are valoarea ’x’.
count(x) Întoarce num˘arul de apari¸tii ale valorii ’x’ între elementele listei.
sort() Sorteaz˘a elementele listei.
reverse() Schimb˘a ordinea elementelor din list˘a.

Folosirea listelor drept stive


Obiectele de tip list˘a pot fi folosite foarte u¸sor pentru a simula comportamentul unei stive. Pentru a ad˘auga un
element
pe stiv˘a (PUSH), pute¸ti folosi append(). Pentru a scoate un element din stiv˘a (POP), folosi¸ti pop() f˘ar˘a a
specifica
un index. Iat˘a un exemplu:
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

Pute¸ti folosi listele foarte convenabil, pentru a implementa cozi. Spre deosebire de stive unde primul element
ad˘augat
este ultimul scos, la cozi primul element ad˘augat este primul scos. Pentru a ad˘auga un element folosi¸ti append(),
iar pentru a extrage un element folosi¸ti pop(0):

Instrumente de programare func¸tional ˘a


Exist˘a trei func¸tii predefinite care sunt foarte utile în lucrul cu liste: filter(), map(), reduce().
Func¸tia ‘filter()’ cu sintaxa ‘filter(func¸tie, secven¸t˘a)’, întoarce o secven¸t˘a format˘a din elementele

13
secven¸tei specificate ca parametru, care îndepline¸ste condi¸tia testat˘a de func¸tie. Exemplul care urmeaz˘a
calculeaz˘a
numerele prime din intervalul 2, 25:
>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]
Func¸tia map() cu sintaxa map(func¸tie, secven¸t˘a), apeleaz˘a func¸tia specificat˘a ca parametru pentru fiecare
element din secven¸t˘a, ¸si întoarce o nou˘a list˘a format˘a din rezultatele întoarse de func¸tie. Pentru a calcula
p˘atratele
unor numere dintr-o list˘a pute¸ti folosi o secven¸t˘a similar˘a celei ce urmeaz˘a:
>>> def cube(x): return x*x*x
...
>>> map(cube, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
Func¸tia map() accept˘a ca parametrii mai multe secven¸te. În acest caz func¸tia transmis˘a ca parametru trebuie
s˘a fie
modificat˘a corespunz˘ator, trebuie s˘a accepte acela¸si num˘ar de parametrii câte secven¸te sunt transmise. Dac˘a
secven¸tele
sunt diferite ca lungime, atunci când una dintre secven¸te s-a terminat, în loc de un element func¸tiei i se transmite
None.
Dac˘a în loc de un nume de func¸tie, se transmite None func¸tiei map(), atunci func¸tia va fi înlocuit˘a cu o
func¸tie care
va întoarce ca rezultat parametrii primi¸ti. Pute¸ti folosi comportamentul func¸tiei map() pentru a genera perchi de
numere provenind din dou˘a liste:
>>> seq = range(8)
>>> def square(x): return x*x
...
>>> map(None, seq, map(square, seq))
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49)]
Func¸tia ‘reduce(func¸tie, secven¸t˘a)’ întoarce o simpl˘a valoare care este calculat˘a în felul urm˘ator: este
apelat˘a func¸tia (care este obligatoriu o func¸tie binar˘a ce accept˘a numai 2 parametrii), cu parametrii primul ¸si
al doilea
termen al secven¸tei, func¸tia întoarce un rezultat care împreun˘a cu al treilea element sunt transmise din nou
func¸tiei,
care genereaz˘a un alt rezultat ¸si a¸sa mai departe, pân˘a ce lista este epuizat˘a.

Exemplul de mai jos calculeaz˘a suma primelor numere naturale:


>>> def add(x,y): return x+y
...
>>> reduce(add, range(1, 11))
55

Un alt mod de a genera liste


Exist˘a un mod de a crea liste mult mai concis decât prin intermediul func¸tiilor map(), filter() sau lambda().
Defini¸tia listei este de cele mai multe ori mult mai clar˘a decât cea ob¸tinut˘a prin alte metode. Acest mod
generalizat, de
a genera, a defini liste const˘a în asocierea unei expresii, cu o clauz˘a for ¸si cu niciuna sau mai multe clauze for
sau
if. Rezultatul va fi o list˘a care provine din evaluarea expresiei în contextul clauzelor for ¸si if ce urmeaz˘a. Dac˘a
rezultatul evalu˘arii expresiei va fi o pereche, atunci expresia trebuie parantezat˘a corespunz˘ator:

Instruc¸tiunea del
Exist˘a o metod˘a de a ¸sterge un element dintr-o list˘a specificând indicele elementului în loc de valoarea
elementului.
Aceast˘a metod˘a poate fi folosit˘a ¸si pentru a ¸sterge por¸tiuni dintr-o list˘a. Toate acestea pot fi realizate
utilizând

14
instruc¸tiunea del:
>>> a
[-1, 1, 66.6, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.6, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.6, 1234.5]
del poate fi folosit˘a ¸si pentru a ¸sterge variabile, de exemplu o întreag˘a list˘a:
>>> del a

Capitolul V Fișiere și excepții


Când un program are nevoie să salveze date pentru a le folosi mai târziu, el le scrie
într-‐-un fișier. Datele pot fi extrase și citite din fișier în orice moment.

Tipuri de fișiere
Sunt două tipuri de fișiere: text și binare.
Un fișier text conține date care au fost codificate în text folosind scheme ca ASCII sau
Unicode. Chiar dacă fișierele conțin numere, ele sunt stocate ca o serie de caractere. Drept
rezultat, fișierul poate fi deschis și văzut într-‐-un editor de text precum Notepad sau Word.
Un fișier binar conține date care sunt convertite în text. Ca urmare, nu le poți citi cu un editor
de text.

Deschiderea unui fișier în Python


Ca să deschidem un fișier folosim funcția open. Funcția open creează un fișier obiect pe
care îl asociază cu fișierul dorit de pe discul computerului:
Formatul general al funcției open este:
file_variable = open(filename, mode)
unde:
- file_variable este numele variabilei care referă obiectul fișier
- filename este un șir care arată numele fișierului
- mode este un șir care specifică modul (scris, citit, etc) în care fișierul va fi deschis.
Exemple de moduri (mode) în Python:
‘r’ = deschide un fișier doar pentru citit (read); fișierul de acest tip nu poate fi scris
‘w’ = deschide un fișier pentru scris (write). El poate fi interpretat cam așa: dacă fișierul
există, șterge-‐-i conținutul; dacă nu există, creează-‐-l.
‘a’ = deschide un fișier pentru a fi scris. Toate datele fișierului vor fi anexate până la sfârșit.
Dacă nu există (fișierul) creează-‐-l.
De exemplu, să presupunem că fișierul client.txt conține datele unui client și vrem să-‐-l
deschidem pentru a-‐-l citi. Iată un exemplu de cum invocăm funcția open:
fisier_client = open(‘client.txt’, ‘r’)
După ce declarația este executată, fișierul client.txt este deschis și variabila fisier_client va
referi un fișier obiect pe care-‐-l putem folosi ca să citim date din fișier.
Acuma, vrem să creăm un fișier numit vanzari.txt și să scriem în el. Iată cum facem:
fisier_vanzari = open(‘vanzari.txt’, ‘w’)

Scrierea datelor într-un fișier

15
Este timpul să introducem un alt tip de funcții care se cheamă metode.
O metodă este o funcție care aparține unui obiect și care face unele operații folosind acel
obiect. Odată ce ai deschis un fișier, folosești metoda fișierului obiect ca să poți face operații
pe fișier. De exemplu, obiectul fișier are o metodă numită ‘write’ care poate fi folosit ca să
scrii date într-un fișier.
Iată formatul general și cum să invoci metoda write:
file_variable.write(string)
În această declarație, file_variable este o variabilă care referă un fișier obiect și string este un
șir care va fi scris în fișier. Fișierul trebuie să fie deschis pentru scris (‘w’ sau ‘a’) altfel
vaapărea o eroare.
Exemplu complet de program (presedinti.py)
#Acest program scrie trei linii de date
#intr-un fisier
def main():
#Deschide un fisier numit presedinti.txt
outfile = open(‘presedinti.txt’, ‘w’) 5
#Scrie numele presedintilor Romaniei 6
#in fisier
outfile.write(‘Ion Iliescu\n’) 8
outfile.write(‘Emil Constantinescu\n’) 9
outfile.write(‘Traian Basescu\n’) 10
#Inchide fisierul
outfile.close() 12
#Cheama functia principala
main()

fiecare șir se termină


cu \n adică numele următorului tenor este așezat pe o linie nouă.

Citirea datelor dintr-un fișier


Dacă un fișier este deschis pentru citire (folosind modul ‘r’), putem folosi metoda obiect
read ca să- citim întregul conținut. Când este invocată metoda read, ea returnează conținutul
fișierului ca pe un șir. Să vedem în exemplul următor cum folosim metoda read ca să citim
conținutul textului tenori.txt pe care l-am creat anterior:
(citire_fisier.py)
#Acest program citeste si afiseaza continutul
#fisierului presedinti.txt
def main():
#deschidem fisierul numit presedinti.txt
infile = open(‘presedinti.txt’, ‘r’) 5
#Ii citim continutul
file_contents = infile.read() 7
#Inchidem continutul
infile.close()
#Afisam datele citite
print(file_content)
#Invocam functia principala
main()

Declarația din linia 5 deschide fișierul pentru citit folosind modul ‘r’. De asemenea creează un
fișier obiect pe care îl atribuie variabilei infile. Linia 7 invocă metoda infile.read ca să îi
citească conținutul. Conținutul este citit în memorie ca un șir și atribuit variabilei file_contents.

16
Putem de asemenea folosi metoda readline ca să citim doar o linie dintr-un fișier. Metoda
returnează o linie ca pe un șir.

Adăugarea datelor într-‐-un fișier existent


Când folosim metoda ‘w’ ca să deschidem un fișier dar fișierul cu nume specificat există deja
pe disc, fișierul existent va fi șters și unul gol dar cu același nume va fi creat. Uneori dorim să
păstrăm fișierul vechi și să-i adăugăm date noi. Acestea se adaugă la sfârșitul celor existente. În
Python folosim modul ‘a’ ca să deschidem un fișier căruia vrem să-i adăugăm date. Asta
înseamnă că:
- dacă fișierul există deja, el nu va fi șters. Dacă nu există, va fi creat.
- când datele sunt scrise în fișier, ele vor fi adăugate la sfârșitul datelor existente.
Codul de mai jos deschide fișierul și adaugă următoarele date la conținutul existent:
myfile=open(‘barbati.txt’, ‘a’)
myfile.write(‘Gigel\n’)
myfile.write(‘Fanel\n’)
myfile.write(‘Stanel\n’)
myfile.close()
După aceasta vom avea numele anterior scrise (Costel, Mirel, Florel) la care se adaugă cele
de mai sus. Fișierul va arăta în final așa:
Costel
Mirel
Florel
Gigel
Fanel
Stanel

Scrierea și citirea datelor numerice


Șirurile pot fi scrise direct cu metoda write, în schimb numerele trebuiesc convertite în
șiruri înainte de a fi scrise.
Python are o funcție preconstruită numită str care convertește o valoare într-un șir. Să
spunem de pildă că variabilei num îi este atribuită valoarea 99. Expresia str(num) va
returna șirul ‘99’.
Expresia str(num1) + ‘\n’ convertește valoarea referită de variabila num1 într-‐-un șir
și o concatenează cu ‘\n’ șirului. Când userul introduce să zicem valoare 50, expresia va
produce șirul ‘50\n’. Drept rezultat, șirul ‘50\n’ este scris în fișier.

Copierea unui fisier


Sa presupunem ca dorim sa facem o copie a fisierului barbati.txt care se va chema
copybarbati.txt. Pentru aceasta scriem urmatorul program (copybarbati.py):

17
Fișiere binare
Următorul exemplu creează un fișier binar. Pentru aceasta folosim modul ’wb’ (binar.py):
str = 'Salutare si voiosie!'
fisier = open('fisier_binar.bin', 'wb')
fisier.write(str.encode('utf-8'))
fisier.close()
fisier = open('fisier_binar.bin', 'rb')
fisiercontinut = fisier.read()
fisier.close()
print('Continutul fisierului este:')
print(fisiercontinut.decode('utf-8'))
Programul binar.py creează un fișier numit fisier_binar.bin în modul write și
stochează în el șirul ”Salutare si voiosie!”. Șirul este codificat în sistemul UTF-8 înainte de
fi scris în fișier. Fișierul este apoi închis. Ca sa confirmăm că șirul este stocat corect în fișier,
îl deschidem cu modul read.

Excepții
O excepție este o eroare care apare atunci când un program rulează și care are drept
consecință oprirea lui brutală. Pentru mânuirea excepțiilor se folosește blocul de declarații
try/except .

El împarte două numere. Atunci când userul vrea să împartă un număr la zero, apare o
excepție sau o eroare numită traceback. Ea dă informații cu privire la numărul liniei (liniilor)
care cauzează excepția. Când se întâmplă să avem de a face cu o excepție, spunem că
programul “a ridicat o excepție”. Ele pot fi prevenite scriind codul cu atenție.
Să rescriem codul de mai sus (impartire2.py) astfel încât excepția să nu mai apară:
#Programul imparte un numar al altul
def main():
#Ia doua numere
num1=int(input(‘ia un numar: ’))
num2=int(input(‘ia al doilea numar: ’))
#Daca num2 nu este 0, imparte num1 la num2
#si afiseaza rezultatul
if num2 != 0:
result = num1 / num2
print(num1, ‘impartit la’, num2, ‘este’, result)
else:
print(‘Impartirea la zero este imposibila.’)
#Cheama main

18
main()

După cum poate v-ați dat seama, excepțiile trebuiesc pur și simplu ghicite atunci când
programatorul scrie programul. El trebuie să-si puna mereu întrebarea Ce s-ar întâmpla
dacă?

Tabelul de mai jos arata exceptiile care pot aparea atunci cand un program este evaluat de
interpretor:
AssertionError Apare atunci cand declaratia esueaza
AttributeError Atributul nu este gasit in obiect
EOFError Cand se incearca citirea dincolo de sfarsitul unui
fisier
FloatingPointError Apare cand operatia cu un numar in virgula mobila
esueaza
IOError Cand o operatie I/O esueaza
IndexError Cand se foloseste un index aflat in afara gamei
(range)
KeyError Cand o cheie nu este gasita
OSError Cand invocarea unui sistem de operare esueaza
OverflowError Cand o valoarea este prea mare ca sa poata fi
reprezentata
TypeError Cand un argument de un tip nepotrivit este furnizat
ValueError Cand valoarea unui argument nu este potrivita
ZeroDivisionError Cand un numar se imparte la zero ori cand al doilea
argument intr-‐-o operatie modulo este zero

Capitolul VI Liste, tupluri, dicționare și seturi. Serializarea


obiectelor (pickling)

Liste
O listă este un obiect care conține itemi multipli. Este similară matricei din alte limbaje de
programare. Listele sunt mutabile ceea ce înseamnă că conținutul lor poate fi schimbat pe
timpul execuției programului. Listele sunt structuri dinamice de date adică itemii lor pot fi
adăugați sau șterși. Pentru aceasta se poate folosi indexarea, felierea (slicing) dar și alte
metode de lucru cu liste.
Fiecare item dintr-o listă se cheamă element al listei.
Iată cum arată o declarație de creare a unei liste de întregi (ex):
numere_impare=[1, 3, 5, 7, 9]
Elementele listei sunt incluse între paranteze drepte și sunt despărțite între ele prin virgulă.
Să luam un exemplu de listă cu șiruri:
nume= [‘Mircea’, ‘Dana’, ‘Marcel’, ‘Stanel’]
O listă poate să conțină tipuri diferite de valori:
lista = [‘Stanel’, 51, 4.157]
Lista “lista” conține un șir (Stanel), un întreg (51) și o valoare în virgulă mobilă (4.157).
Pentru afișarea conținutului listei folosim funcția print( ) ca mai jos:
print (lista)

19
Operatorul de repetiție
Operatorul de repetiție face copii multiple unei liste și le pune laolaltă. Forma generală
este:
lista * n

Iterarea peste o listă cu bucla for


numere = [45, 67, 90, 3.45]
for n in numere:
print(n)
Ceea ce la ieșire va da:
45
67
90
3.45

Indexarea
O metodă de accesare a elementelor individuale dintr-o listă este cu ajutorul unui index.
Fiecare element al listei are un index specific care-l poziționează în listă. Numărarea
elementelor dintr-o listă începe de la zero (0) , așa că primul element are indexul 0, al doilea
are indexul 1, al treilea are indexul 2 s.a.m.d.

Funcția len
Cu ajutorul funcției len putem afla lungimea unei liste.
Să luăm următorul cod:
lista = [1, 2, 3, 4, 5]
lungime = len(lista)
Funcția len poate fi folosită ca să prevină o excepție IndexError atunci când iterăm peste o
listă cu o buclă:
lista = [1, 2, 3, 4, 5]
index = 0
while index < len(lista):
print(lista[index])
index +=1

Concatenarea (legarea) listelor


Pentru concatenarea listelor în Python se folosește semnul + .
Cel mai bun mod de a înțelege cum funcționează este un exemplu:
lista1 = [8,9,10,11]
lista2 = [12,13,14,15]
lista3 = lista1 + lista 2

La fel de bine putem folosi și concatenarea listelor cu valoare șir:


fete = [‘Dana’, ‘Roxana’, ‘Ileana’, ‘Maria’]
baieti = [‘Costel’, ‘Gigel’, ‘Ion’, ‘Popica’]
nume = fete + baieti
20
Să reținem că putem combina doar liste cu liste. Dacă încercăm să combinăm o listă cu o
altă entitate va apărea o excepție.

Felierea (slicing) listelor


Uneori ai nevoie să selectezi unele elemente dintr-o secvență dar nu pe toate. Atunci folosești
felierea (slice). Ca să iei o porțiune dintr-o listă trebuie să scrii o declaratie de forma:
lista[start : end] unde start este indexul primului element din porțiune și end este indexul
ultimului element din porțiune.

6.2. Metode și funcții preconstruite pentru liste


Metoda append
Metoda append este folosită pentru adăugarea unui nou item listei. Itemul este trecut drept
argument și este adăugat la sfârșitul listei.

Metoda index
Uneori dorim să știm unde se află un item dintr-o listă. Pentru aceasta folosim metoda index.
Trecem un argument metodei index și ea returnează index-ul primului element din listă care
conține acel item. Dacă itemul nu este găsit, programul va ridica o excepție ValueError.

Metoda insert
Această metodă permite să adaugi un item într-o listă pe o poziție specifică. Ca să faci asta
trebuie să treci două argumente metodei insert: un index care specifică locul unde itemul ar
trebui să fie inserat și itemul pe care dorești să-l inserezi.

Metoda sort
Metoda sort rearanjează elementele unei liste așa încât ele să apară în ordine ascendentă.

Declaratia del
Cu această declarație ștergem un element din listă:

Totalul valorilor dintr-‐-o listă


Pentru acest calcul trebuie să folosim o buclă for dar si un acumulator inițiat cu valoarea
zero. Iată un exemplu:

#Acest program calculează totalul valorilor dintr-o listă


def main():
#Cream lista
numere = [2,3,6,8,10]
#cream o variabila pe care o folosim drept acumulator
total = 0
#Calculam totalul elementelor listei
for value in numere:
total += value
#Afisam totalul elementelor listei
print(‘Totalul elementelor este’, total)
#Invocam functia main
main()
Iar output-‐-ul este: “Totalul elementelor este 30”
21
Media valorilor dintr-o listă
După ce calculăm totalul (ca mai sus) unei liste, ca să aflăm media valorilor din listă trebuie
să împărțim totalul la lungimea listei. Ex. (media.py)
#Acest program calculează media valorilor dintr-o listă
def main():
#creem lista
scoruri = [2.5, 8.3, 6.5, 4.0, 5.2]
#creem o variabila ca s-o folosim ca acumlator
total = 0.0
#Calculam totalul valorilor din lista
for value in scoruri:
total +=value
#Calculam media elementelor
media = total / len(scoruri)
#Afisam totalul elementelor listei
print(‘Media elementelor este’, media)
#Invocam functia main
main()
Ieșirea programului este: “Media elementelor este 5.3”.

Func¸tia dir()
Func¸tia integrat˘a dir() poate fi folosit˘a pentru a determina ce nume(de variabile, func¸tii, etc.) define¸ste un
modul.
Rezultatul acestei func¸tii este o list˘a sortat˘a de ¸siruri de caractere:
Dac˘a func¸tia dir() este apelat˘a f˘ar˘a argumente, va lista numele ce sunt definite (local) pân˘a în momentul
curent:
>>> a = [1, 2, 3, 4, 5]
>>> import fibo, sys
>>> fib = fibo.fib
>>> dir()
[’__name__’, ’a’, ’fib’, ’fibo’, ’sys’]
Observa¸ti c˘a listeaz˘a diferite tipuri de nume: variabile, func¸tii, module, etc.
dir() nu listeaz˘a ¸si numele de func¸tii sau variabile integrate. Dac˘a dori¸ti o astfel de list˘a, pute¸ti apela
dir(__builtin__), unde __buildin__ este modulul în care se afl˘a func¸tiile ¸si variabilele integrate:

Acest exemplu demonstreaz˘a utilizarea func¸tiei string.rjust(), care aliniaz˘a la dreapta un ¸sir de caractere,
într-un câmp de o anumit˘a dimensiune dat˘a, introducând spa¸tii la stânga ¸sirului. Exist˘a ¸si alte func¸tii similare
string.ljust(), string.center(). Aceste func¸tii nu afi¸seaz˘a nimic, nu fac decât s˘a returneze un alt ¸sir
de caractere. Dac˘a ¸sirul primit este mai lung, aceste func¸tii nu îl modific˘a, ci îl returneaz˘a intact. Acest
mecanism
probabil c˘a v˘a va strica aranjarea pe coloane, dar este o variant˘a preferabil˘a celeilalte, adic˘a trunchierea
¸sirului.
Dac˘a dori¸ti s˘a truchia¸ti un ¸sir, pute¸ti oricând s˘a folosi¸ti opera¸tiile de por¸tionare (slicing), ca de exemplu:
string.ljust(x,n)[0:n].
Mai exist˘a o func¸tie util˘a, care ”umple” cu zero-uri un ¸sir, ad˘augându-le la stânga ¸sirului original, pân˘a când
acesta
ajunge la o anumit˘a dimensiune. Aceast˘a func¸tie este string.zfill():

22
Tupluri
Un tuplu este o secvență imutabilă, ceea ce înseamnă că conținutul ei nu se poate schimba.
Un tuplu seamană foarte mult cu o listă cu diferența că o dată creat, elementele lui nu se
pot schimba. Elementele unui tuplu se închid între o pereche de paranteze,.

De fapt, tuplurile suportă aceleași operații ca listele cu excepția celor care schimbă
conținutul. Tuplurile suportă următoarele operații:

- Subscrierea indecsilor
- Metode ca index
- Functii preconstruite: len, min și max
- Operații de feliere (slicing)
- Operatorul in
- Operatorii + si *
Tuplurile nu suportă metode ca append, remove, insert, reverse sau sort.
Când vrei să creezi un tuplu cu un singur element, acel element trebuie urmat neapărat de
virgulă:.

Motivul pentru care tuplurile există este acela că tuplurile sunt mai rapide ca listele. Aceasta
înseamnă că tuplurile sunt o bună alegere atunci când se procesează date foarte multe care nu
urmează a fi modificate. Un alt motiv este acela că tuplurile sunt sigure. Pentru că nu li se pot
modifica elementele, nimeni nu poate să le manipuleze accidental. Există două functii care pot
converti tuplurile în liste și invers. Acestea sunt: list( ) și tuple( ) :

Dicționare
Un dicționar e un obiect care stochează o colecție de date. Fiecare element dintr-un dicționar
are două părți: o cheie și o valoare. Folosim cheia ca să localizăm valoarea.

Perechea cheie-valoare mai este referită și de expresia cartografiere.


Să creăm un dicționar:
carte_telefon = {’Mircea’: ’07225666’, ’Gigel’ : ’076666111’, ’Minel’:
’0744234567’}
Observăm că la crearea dicționarului carte_telefon folosim o pereche de acolade în interiorul
cărora introducem cheia – care este numele persoanei – și numărul de telefon care este
valoarea. Elementele dicționarului sunt fiecare cuprinse între ghilimele iar perechile sunt
despărțite de virgule. Mai observăm că fiecare pereche își referă elementele prin semnul două
puncte (:).
Primul element al dicționarului este ‘Mircea’ : ‘072256666’;
Al doilea element este: ‘Gigel’ : ‘0766666111’;
Al treilea element este: ‘Minel’ : ‘0744234567’.

În acest exemplu cheile și valorile sunt șiruri. Totuși, elementele unui dicționar pot fi de orice
tip numai că – spre deosebire de liste, cheile sunt imutabile. Cheile pot fi șiruri, întregi, în
virgulă mobila sau tupluri. Cheile nu pot fi însa liste (am învățat deja că listele au elemente
mutabile).

Folosirea operatorilor “in” și “not in” pentru testarea unei valori dintr-un dicționar
Ca să prevenim eroarea de mai sus putem folosi operatorul in dintr-‐-o declaratie if ca să
vedem dacă o cheie există în dicționar.
23
Adăugarea unor elemente dicționarului
Dicționarele sunt obiecte mutabile. Putem să le adăugam noi perechi de elemente cu o
declarație de următoarea formă:
nume_dictionar[cheie] = valoare

Trebuie să mai reținem că într-un dicționar nu putem avea valori duplicat. Când atribuim o
valoarea unei chei existente, aceasta îi va lua locul celei vechi.
Ștergerea elementelor dintr-un dicționar
Forma generala este:
del nume_dictionar[cheie]

Aflarea numărului elementelor dintr-un dicționar


Pentru aceasta folosim funcția len:

Amestecarea tipurilor de date într-un dicționar


Cheile unui dicționar sunt imutabile însa ele pot fi de orice tip: liste, întregi, numere în
virgula mobilă, tupluri.

Dicționar gol
Un dicționar gol se creează printr-o simplă declarație de forma generală:
>>>dictionar = { }
sau în cazul nostru
>>>carte_telefon = { }
După aceea putem să-‐-i adăugăm elemente:
>>>carte_telefon[‘Ion’] = ‘0245345789’
>>>carte_telefon[‘Costel’] = ‘0743123098’
>>>carte_telefon[‘Florina’] = ‘0250445566’
Pentru crearea unui dicționar gol se mai poate folosi și funcția preconstruită dict( ).

Metode ale dicționarelor


Obiectele unui dicționar au câteva metode cu care se pot manipula datele:
clear – curăță conținutul unui dictionar
get – ia valoarea asociată unei chei specifice. Dacă cheia nu este găsită, metoda nu ridică o
excepție. În loc de asta, returnează valoarea implicită.
items -‐- returnează toate cheile dintr-un dicționar și valorile lor asociate ca pe o secvență
de tupluri
keys – returnează toate cheile ca pe o secvență de tupluri
pop – returnează valorile asociate cu o cheie specifică și le șterge (perechile cheie/valoare)
din dicționar. Dacă cheia nu e găsită returnează valoarea implicită.
popitem – returnează o pereche întâmplătoare de cheie/valorare ca pe un tuplu și o șterge
din dicționar
values – returnează toate valorile din dicționar ca pe o secvență de tupluri.

Seturi
Un set este un obiect care stochează o colecție de date. Un set are câteva caracteristici:
- Toate elementele setului sunt unice, adică doua elemente nu pot avea aceeași valoare
- Seturile sunt structuri neordonate, ceea ce înseamnă că elementele lui pot sta în orice
ordine
- Elementele setului pot fi de diferite tipuri.
24
Pentru a crea un set, invocăm functia preconstruita set:
setul_meu = set()
Aici aveam de-‐-a face cu un set gol de elemente. Ca să-‐-i adăugăm elemente, i le trecem
drept argumente ale functiei set():
setul_meu = set([‘a’, ’b’, ’c’])
sau
setul_meu = set(‘abc’)

Pentru adăugarea de elemente setului se utilizează metoda add (legată cu punct, desigur):
Se poate folosi și metoda update:
Pentru ștergerea elementelor unui set se pot folosi metodele remove sau discard. Itemul
pe care-l vrem șters din set îl trecem drept argument al uneia dintre aceste metode.
Ca sa iterăm peste elementele unui set putem să folosim bucla for:
Uniunea a doua seturi contine elementele celor doua seturi si se realizeaza cu metoda
union:

Serializarea obiectelor (pickling)


Serializarea unui obiect este procesul de convertire a obiectului într-un număr de biți care pot fi
salvați într-un fișier ce poate fi accesat oricând după aceea. În Python, serializarea obiectelor se
numește pickling

25

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