Lectia 2 din 6

Recapitulare Structuri de Date

Liste, Functii si Organizarea Eficienta a Datelor

🎯

GOAL - Obiectivele Recapitularii

Structurile de date sunt fundamentul programarii eficiente. In aceasta lectie recapitulam cum sa organizam si manipulam colectii de date folosind liste si functii.

Liste (Array-uri)

  • Creare si initializare
  • Accesare elemente prin index
  • Adaugare si stergere elemente
  • Parcurgere liste

Functii

  • Definire si apelare
  • Parametri si argumente
  • Returnare valori
  • Functii utile built-in

Organizare Date

  • Dictionare (perechi cheie-valoare)
  • Tuple (liste imutabile)
  • Seturi (valori unice)
  • Alegerea structurii potrivite
📚

LEARN - Sinteza Conceptelor

1. Liste - Colectii de Date

O lista este o colectie ordonata de elemente. Fiecare element are un index (pozitie) incepand de la 0.

note = [10, 8, 9, 7, 10]

[0] 10
[1] 8
[2] 9
[3] 7
[4] 10

note[0] = 10 | note[2] = 9 | note[-1] = 10 (ultimul)

Operatie Sintaxa Exemplu Rezultat
Creare lista lista = [] note = [10, 8, 9] Lista cu 3 elemente
Accesare element lista[index] note[0] 10
Adaugare la sfarsit lista.append(val) note.append(7) [10, 8, 9, 7]
Stergere element lista.remove(val) note.remove(8) [10, 9, 7]
Lungime lista len(lista) len(note) 3
Sortare lista.sort() note.sort() [7, 9, 10]
PYTHON Operatii comune cu liste
# Creare si manipulare lista
elevi = ["Ana", "Bogdan", "Carla"]

# Adaugam un elev nou
elevi.append("Dan")
print(elevi)  # ['Ana', 'Bogdan', 'Carla', 'Dan']

# Parcurgem lista
for elev in elevi:
    print(f"Buna, {elev}!")

# Cautam un element
if "Ana" in elevi:
    print("Ana e in clasa!")

# Numaratoare si suma
note = [10, 8, 9, 7, 10]
print("Total note:", len(note))
print("Suma:", sum(note))
print("Media:", sum(note) / len(note))

2. Functii - Reutilizarea Codului

Functiile ne permit sa grupam cod care face un anumit lucru si sa-l reutilizam.

PYTHON Definire si utilizare functii
# Functie simpla fara parametri
def salut():
    print("Buna ziua!")

salut()  # Apelam functia

# Functie cu parametri
def salut_personalizat(nume):
    print(f"Buna, {nume}!")

salut_personalizat("Maria")  # Buna, Maria!

# Functie care returneaza o valoare
def calculeaza_media(note):
    if len(note) == 0:
        return 0
    return sum(note) / len(note)

notele_mele = [10, 9, 8, 10]
media = calculeaza_media(notele_mele)
print(f"Media ta este: {media}")  # Media ta este: 9.25

# Functie cu parametri impliciti
def putere(baza, exponent=2):
    return baza ** exponent

print(putere(5))       # 25 (5^2)
print(putere(2, 10))   # 1024 (2^10)

3. Dictionare - Date cu Etichete

PYTHON Lucrul cu dictionare
# Dictionar = colectie de perechi cheie-valoare
elev = {
    "nume": "Ion Popescu",
    "varsta": 14,
    "clasa": "8B",
    "note": [10, 9, 8]
}

# Accesare valori
print(elev["nume"])      # Ion Popescu
print(elev["varsta"])    # 14

# Adaugare/Modificare
elev["email"] = "ion@scoala.ro"
elev["varsta"] = 15

# Parcurgere dictionar
for cheie, valoare in elev.items():
    print(f"{cheie}: {valoare}")

Cand folosim fiecare structura?

Lista - cand avem o colectie ordonata (note, elevi, produse)
Dictionar - cand avem date cu etichete (profil elev, setari)
Set - cand vrem valori unice (taguri, categorii)
Tuplu - cand datele nu trebuie modificate (coordonate)

💪

TRY - Exercitii Practice

Exercitiul 1: Gestiune Note

Scrie un program care gestioneaza notele unui elev.

def adauga_nota(note, nota_noua):
    """Adauga o nota in lista daca e valida"""
    if 1 <= nota_noua <= 10:
        note.append(nota_noua)
        return True
    return False

def calculeaza_media(note):
    """Calculeaza media notelor"""
    if len(note) == 0:
        return 0
    return round(sum(note) / len(note), 2)

def nota_maxima(note):
    """Gaseste nota maxima"""
    return max(note) if note else 0

def nota_minima(note):
    """Gaseste nota minima"""
    return min(note) if note else 0

# Utilizare
notele_mele = []
adauga_nota(notele_mele, 10)
adauga_nota(notele_mele, 8)
adauga_nota(notele_mele, 9)
adauga_nota(notele_mele, 7)

print(f"Note: {notele_mele}")
print(f"Media: {calculeaza_media(notele_mele)}")
print(f"Maxim: {nota_maxima(notele_mele)}")
print(f"Minim: {nota_minima(notele_mele)}")

Exercitiul 2: Catalog Elevi

Creeaza un catalog folosind dictionare.

# Catalog cu dictionare
catalog = {}

def adauga_elev(catalog, nume):
    """Adauga un elev nou in catalog"""
    if nume not in catalog:
        catalog[nume] = []
        print(f"{nume} a fost adaugat!")
    else:
        print(f"{nume} exista deja!")

def adauga_nota_elev(catalog, nume, nota):
    """Adauga nota unui elev"""
    if nume in catalog:
        catalog[nume].append(nota)
    else:
        print(f"Elevul {nume} nu exista!")

def afiseaza_catalog(catalog):
    """Afiseaza tot catalogul"""
    print("\n=== CATALOG ===")
    for nume, note in catalog.items():
        media = sum(note)/len(note) if note else 0
        print(f"{nume}: {note} - Media: {media:.2f}")

# Test
adauga_elev(catalog, "Ana")
adauga_elev(catalog, "Bogdan")
adauga_nota_elev(catalog, "Ana", 10)
adauga_nota_elev(catalog, "Ana", 9)
adauga_nota_elev(catalog, "Bogdan", 8)
afiseaza_catalog(catalog)

Exercitiul 3: Frecventa Elementelor

Numara de cate ori apare fiecare element intr-o lista.

def frecventa(lista):
    """Returneaza frecventa fiecarui element"""
    rezultat = {}
    for element in lista:
        if element in rezultat:
            rezultat[element] += 1
        else:
            rezultat[element] = 1
    return rezultat

# Test
voturi = ["Python", "Java", "Python", "C++", "Python", "Java"]
rezultate = frecventa(voturi)

print("Rezultate vot limbaje:")
for limbaj, nr in rezultate.items():
    print(f"  {limbaj}: {nr} voturi")

TEST - Verifica-ti Cunostintele

1. Care este indexul primului element dintr-o lista?

a) 0
b) 1
c) -1
d) first

2. Ce metoda adauga un element la sfarsitul unei liste?

a) add()
b) append()
c) push()
d) insert()

3. Cum returneaza o functie o valoare?

a) output valoare
b) give valoare
c) return valoare
d) send valoare

4. In dictionar, cum accesam valoarea pentru cheia "nume"?

a) dict.nume
b) dict["nume"]
c) dict(nume)
d) dict->nume

5. Ce returneaza len([1, 2, 3, 4, 5])?

a) 4
b) 5
c) 15
d) [5]