Ce vei învăța astăzi?
În această lecție recapitulăm tot modulul: lista, stiva și coada, operatorii, metodele, parcurgerea și lista de frecvențe, apoi rezolvăm probleme care combină toate cunoștințele.
Recapitulare: ce am învățat în modul
Lista este un model conceptual liniar de organizare a datelor, cu acces direct la elemente după index. Stiva respectă principiul LIFO, iar coada principiul FIFO.
| Noțiune | Ideea principală | Instrument în Python |
|---|---|---|
| Lista | Model liniar, acces direct după index | v = [1, 2, 3], v[0] |
| Stiva | LIFO: ultimul introdus, primul scos | append(), pop() |
| Coada | FIFO: primul introdus, primul scos | append(), pop(0) |
| Operatori | Indexare, apartenență, concatenare, multiplicare | [], in, +, * |
| Metode | Adăugare, ștergere, căutare, sortare | append, remove, sort |
| Parcurgere | Cu sau fără memorare, sume și contoare | for x in v, sum(), len() |
| Lista de frecvențe | Numără aparițiile fiecărei valori | fr = [0] * 11, fr[x] += 1 |
Problemă combinată: gestionarea unei liste de activități
Aplicăm tot ce am învățat într-o singură problemă: avem o listă de activități, le adăugăm, le sortăm, le numărăm și le afișăm.
Exemplu: programul de activități
activitati = ["mate", "info", "romana"]
activitati.append("sport")
activitati.sort()
print(activitati)
print("Numar activitati:", len(activitati))
for a in activitati:
print("-", a)
Observă: am folosit append() pentru adăugare, sort() pentru ordonare, len() pentru numărare și for pentru parcurgere. Totul combinat!
Exercițiu de completare
Completează enunțul de recapitulare cu cuvintele potrivite:
O listă este un model conceptual ______ de organizare a datelor. Stiva respectă principiul ______, iar coada principiul ______. Accesăm un element după poziția lui cu operatorul ______. Cea mai mare valoare dintr-o listă o găsim cu funcția ______().
Bancă de cuvinte:
Test de înțelegere
Test rapid - recapitulare modul:
1. Care structură respectă principiul LIFO?
2. Ce metodă sortează o listă în Python?
3. O listă de frecvențe pentru valori între 0 și 100 are:
index() schimbă pozițiile originale, iar remove() sau pop() în timpul parcurgerii cu for poate sări peste elemente. Planifică întâi pașii, apoi scrie codul.Aprofundare
Integrarea cunoștințelor. O problemă reală combină aproape întotdeauna mai multe noțiuni din modul: citim datele într-o listă (list(map(int, input().split()))), le prelucrăm cu parcurgeri și funcții (sum, min, max), le transformăm cu metode (sort, append, remove) și, atunci când valorile provin dintr-un interval mic, le numărăm cu o listă de frecvențe. Alege instrumentul potrivit în funcție de ce cere problema.
Ordinea operațiilor contează. Dacă sortăm lista înainte de a căuta poziția unei valori cu index(), poziția obținută nu mai este cea din datele originale. Dacă ștergem elemente cu remove() în timp ce parcurgem lista cu for, putem sări peste elemente sau să obținem erori. Gândește-te întotdeauna la efectul fiecărei metode asupra celorlalte.
Cazul listelor de tipuri diferite. O listă poate conține numere, texte sau ambele. Metodele sort() și comparațiile funcționează doar între elemente de același tip; amestecarea tipurilor produce erori la sortare. În aplicații reale (stocuri, produse, note), de regulă lucrăm cu o singură categorie de valori.
De la problemă la program. Pașii recomandați la o problemă complexă: 1) identificăm datele de intrare și modul de stocare; 2) stabilim ce informații trebuie reținute (sume, contoare, frecvențe); 3) scriem pseudocodul; 4) transpunem în Python; 5) testăm pe exemplul dat. Acest lanț reduce semnificativ numărul de erori.
Memorarea și eficiența. Listele permit reutilizarea datelor, dar ocupă memorie. Pentru un număr mare de valori, decidem între parcurgere fără memorare (când este suficientă) și cu memorare (când un calcul global decide prelucrarea elementelor). Lista de frecvențe este un compromis excelent: ocupă spațiu proporțional cu intervalul valorilor și răspunde instantaneu la întrebări de numărare.
Quiz de consolidare
Quiz de consolidare - recapitulare modul:
1. Operatorul prin care verificăm dacă o valoare există într-o listă este:
2. Metoda care adaugă un element la finalul unei liste este:
3. Parcurgerea cu memorare este necesară atunci când:
PbInfo - Elemente pozitive
Enunț:
Cerință: Se citește numărul natural n, apoi n numere întregi. Să se afișeze câte dintre ele sunt pozitive și suma acestora.
Date de intrare:
Programul citește de la tastatură numărul n, apoi pe linia următoare cele n numere, separate prin spații.
Date de ieșire:
Programul va afișa numărul de elemente pozitive și suma lor.
Restricții și precizări:
n este un număr natural, cu 1 <= n <= 1000, iar elementele listei sunt numere întregi.
Exemplu:
Intrare:
6 5 -3 7 0 -2 8
Ieșire:
3 20
Cum gândim soluția:
- Citim n și numerele în lista v
- Parcurgem lista și, pentru fiecare x pozitiv, mărim un contor și adunăm în sumă
- Afișăm contorul și suma
Scrie soluția în Python:
Soluție corectă:
n = int(input())
v = list(map(int, input().split()))
cnt = 0
s = 0
for x in v:
if x > 0:
cnt += 1
s += x
print(cnt, s)
Ce învățăm: parcurgem lista o singură dată și strângem, în același timp, contorul și suma elementelor pozitive.
PbInfo - Inversarea unei liste
Enunț:
Cerință: Se citește o listă de numere. Să se afișeze lista în ordine inversă, folosind metoda reverse() sau secțiunea v[::-1].
Date de intrare:
Programul citește de la tastatură numerele, separate prin spații.
Date de ieșire:
Programul va afișa numerele în ordine inversă, separate prin spații.
Restricții și precizări:
n este un număr natural, cu 1 <= n <= 1000, iar elementele listei sunt numere întregi.
Exemplu:
Intrare:
1 2 3 4 5
Ieșire:
5 4 3 2 1
Cum gândim soluția:
- Citim lista v
- Folosim secțiunea
v[::-1]pentru a o parcurge de la coadă la cap - Afișăm rezultatul
Scrie soluția în Python:
Soluție corectă:
v = list(map(int, input().split())) print(*v[::-1])
Ce învățăm: secțiunea v[::-1] parcurge lista de la ultimul element la primul. Putem folosi și v.reverse() apoi print(*v).
Exercițiul Practic: Aplicație integrată și test
Sarcini de lucru
Completează următoarele sarcini pentru a-ți verifica toate cunoștințele din modul
Sarcina 1: Coșul de cumpărături
Cerință: Scrie un program care gestionează un coș de cumpărături: adaugă 4 produse citite cu append(), scoate un produs cu remove(), sortează lista cu sort(), apoi golește coșul cu clear(). Afișează lista după fiecare pas.
Soluție pentru Sarcina 1:
cos = []
cos.append("lapte")
cos.append("paine")
cos.append("mere")
cos.append("branza")
print(cos)
cos.remove("paine")
print(cos)
cos.sort()
print(cos)
cos.clear()
print(cos)
Verifică: folosim împreună metodele clasei list: append, remove, sort și clear, într-o aplicație integrată.
Sarcina 2 (TEST): Notele clasei
Cerință: Scrie un program care citește n, apoi n note. Determină media notelor (parcurgere cu memorare) și afișează notele mai mari decât media.
Soluție pentru Sarcina 2:
n = int(input())
note = list(map(int, input().split()))
media = sum(note) / len(note)
print("Media:", media)
for x in note:
if x > media:
print(x, end=" ")
Verifică: memorăm notele în listă, calculăm media, apoi facem a doua parcurgere pentru notele de peste medie.