Ce vei învăța astăzi?
În această lecție recapitulăm întregul modul: modelul liniar, stiva și coada, clasa list cu operatori și metode, parcurgerea cu și fără memorare și lista de frecvențe. La final vei fi pregătit pentru testul de evaluare.
Tabelul rezumativ al modulului
Definiție: Un tabel rezumativ concentrează toate noțiunile modulului într-o singură vedere: ce reprezintă fiecare structură, ce instrumente Python folosește și când o alegem. Recapitularea eficientă pornește de la această imagine de ansamblu, apoi aprofundează fiecare casetă.
| Noțiune | Ideea principală | Instrument în Python | Când o folosim? |
|---|---|---|---|
| Lista | Model liniar, acces direct după index | v = [1, 2, 3], v[0], v[-1] |
Acces direct la orice element |
| Stiva | LIFO: ultimul intrat, primul ieșit | append(), pop() |
Ultima acțiune, anulare, istoric |
| Coada | FIFO: primul intrat, primul ieșit | append(), pop(0) |
Rânduri, ordinea sosirii |
| Operatori | Indexare, apartenență, concatenare, multiplicare | [], in, +, * |
Verificări rapide și combinarea listelor |
| Metode | Adăugare, ștergere, căutare, sortare, copiere | append, remove, index, count, sort, copy |
Modificarea și analiza listelor |
| Parcurgere | Cu sau fără memorare; sume, contoare, min, max | for x in v, sum(), len(), min(), max() |
Analiza datelor, media, valori peste medie |
| Lista de frecvențe | Numără aparițiile fiecărei valori | fr = [0] * 11, fr[x] += 1 |
Voturi, note, valori dintr-un interval mic |
Cum folosim tabelul la recapitulare
- Pentru fiecare noțiune, scrie din memorie ideea principală, apoi verifică în tabel
- Pentru fiecare instrument, construiește un exemplu de cod de 2-3 linii
- Pentru fiecare „când o folosim?", găsește o situație reală: magazin, catalog, coadă de clienți
Problemă integrată de recapitulare
Combinăm noțiunile modulului într-o singură problemă: un magazin înregistrează vânzările zilnice pe o săptămână și vrea să afle vânzarea maximă, ziua primei apariții a maximului, media și zilele peste medie. Pentru fiecare pas alegem instrumentul potrivit: max() pentru maxim, index() pentru zi, sum()/len() pentru medie și o parcurgere cu for pentru zilele peste medie.
Exemplu: analiza vânzărilor săptămânale
vanzari = [1200, 980, 1450, 1600, 1380, 1750, 900]
maxim = max(vanzari)
ziua = vanzari.index(maxim) + 1
media = sum(vanzari) / len(vanzari)
print("Vanzi maxime:", maxim)
print("Ziua:", ziua)
print("Media:", round(media, 2))
for i in range(len(vanzari)):
if vanzari[i] > media:
print("Ziua", i + 1, ":", vanzari[i])
Observă: am combinat max() cu index() (funcție + metodă), media cu sum() și len(), apoi o parcurgere cu for pentru valorile peste medie. Fiecare instrument a fost ales pentru întrebarea specifică.
Strategia de rezolvare la test
La testul de evaluare vei primi întrebări teoretice și probleme de programare. O strategie sigură de rezolvare are cinci pași, pe care îi aplicăm la orice problemă de test:
Pașii de rezolvare a unei probleme
- Citește enunțul și subliniază datele de intrare și rezultatul cerut
- Alege structura: listă simplă, stivă, coadă sau listă de frecvențe
- Scrie pseudocodul cu citire, prelucrare și afișare
- Transpune în Python, pas cu pas, comentând fiecare parte
- Testează pe exemplul din enunț și verifică rezultatul manual
Exercițiu de completare 1
Completează enunțul de recapitulare cu cuvintele potrivite:
Lista este un model conceptual ______ de organizare a datelor. Stiva respectă principiul ______, iar coada principiul ______. Media elementelor unei liste v se calculează cu ______(v) / len(v). Pentru a număra aparițiile unei valori folosim lista de ______.
Bancă de cuvinte:
Exercițiu de completare 2
Completează fragmentul de program care analizează notele:
Bancă de cuvinte:
Test de înțelegere
Test rapid - recapitulare modul:
1. Care structură scoate mereu primul element introdus?
2. Ce metode folosim pentru a simula o stivă?
3. Pentru a afla de câte ori apare valoarea 7 într-o listă de note, folosim:
int() sau float() la citire, inițializarea variabilelor și afișarea conformă cu enunțul. Un program corect logic, dar fără conversia tipurilor, eșuează pe datele reale ale evaluatorului.Aprofundare
Cum analizăm eficient la evaluare. La test, punctajul se obține și prin alegerea corectă a instrumentului: pentru un enunț cu valori dintr-un interval mic (note, voturi), lista de frecvențe rezolvă în câteva linii ce ar cere altfel mai multe parcurgeri. Recunoașterea tipului de problemă este jumătate din rezolvare.
Compararea noțiunilor (Competența 4.1). Să putem argumenta de ce stiva nu este potrivită pentru un rând de clienți (ar inversa ordinea sosirii) sau de ce lista este preferată când avem nevoie de acces direct la elemente. La evaluare, explicațiile „de ce" aduc punctajul de la nota 7 la nota 10.
Combinația frecvențe + parcurgere. Cele mai interesante probleme combină tehnici: construim o listă de frecvențe pentru a afla valoarea dominantă, apoi o parcurgere pentru a verifica alte condiții. De exemplu, „ce notă apare cel mai des și câți elevi au note peste medie?" folosește ambele tehnici pe aceeași listă.
Erori tipice de evaluare. La test se punctează și corectitudinea sintactică: variabile inițializate, parcurgeri terminate, afișări conforme cu enunțul. Un program corect logic, dar fără int() la citire, nu funcționează pe datele reale ale evaluatorului. Verifică întotdeauna transformarea tipurilor.
Pregătirea pentru test. Refă din memorie: tabelul rezumativ, algoritmul mediei cu note peste medie, algoritmul listei de frecvențe și simularea stivei/cozii. Apoi rezolvă independent cele două probleme de la secțiunea de mai jos și compară cu soluțiile.
PbInfo - Evaluare: media și notele peste medie
Enunț:
Cerință: Se citește numărul natural n, apoi n note. Să se afișeze media notelor, cu două zecimale, și notele mai mari decât media, în ordinea citirii, separate prin spații.
Date de intrare:
Programul citește de la tastatură numărul n, apoi pe linia următoare cele n note, numere întregi, separate prin spații.
Date de ieșire:
Programul va afișa pe prima linie media cu două zecimale, iar pe a doua linie notele mai mari decât media, separate prin spații.
Restricții și precizări:
n este un număr natural, cu 1 <= n <= 1000, iar notele sunt numere întregi de la 1 la 10.
Exemplu:
Intrare:
6 7 9 5 8 10 6
Ieșire:
7.50 9 8 10
Cum gândim soluția:
- Citim n și notele în lista note
- Calculăm media cu
sum(note) / nși o afișăm curound(..., 2) - Parcurgem notele și afișăm valorile mai mari decât media
Scrie soluția în Python:
Soluție corectă:
n = int(input())
note = list(map(int, input().split()))
media = sum(note) / n
print(round(media, 2))
for x in note:
if x > media:
print(x, end=" ")
Ce învățăm: media se calculează cu sum(note) / n și se rotunjește la afișare. Notele peste medie se găsesc într-o a doua parcurgere cu for, comparând fiecare x cu media exactă.
PbInfo - Evaluare: nota cea mai frecventă
Enunț:
Cerință: Se citește numărul natural n, apoi n note cuprinse între 1 și 10. Să se afișeze nota care apare de cele mai multe ori. Dacă există mai multe note cu aceeași frecvență maximă, se afișează cea mai mică dintre ele.
Date de intrare:
Programul citește de la tastatură numărul n, apoi pe linia următoare cele n note, separate prin spații.
Date de ieșire:
Programul va afișa nota cu frecvența maximă, conform regulii de la egalități.
Restricții și precizări:
n este un număr natural, cu 1 <= n <= 1000, iar notele sunt numere întregi de la 1 la 10.
Exemplu:
Intrare:
8 7 9 7 10 8 7 9 9
Ieșire:
7
Cum gândim soluția:
- Citim n și notele în lista note
- Construim lista de frecvențe
fr = [0] * 11și incrementăm cufr[x] += 1 - Căutăm frecvența maximă, începând de la nota 1
- Pentru egalități, reținem prima (cea mai mică) notă întâlnită
Scrie soluția în Python:
Soluție corectă:
n = int(input())
note = list(map(int, input().split()))
fr = [0] * 11
for x in note:
fr[x] += 1
maxf = 0
nota_max = 1
for nota in range(1, 11):
if fr[nota] > maxf:
maxf = fr[nota]
nota_max = nota
print(nota_max)
Ce învățăm: folosim > (nu >=) la căutarea maximului, astfel încât la egalitate să rămână nota mai mică, conform enunțului. Lista de frecvențe simplifică enorm numărarea.
Exercițiul Practic: Pregătire pentru evaluare
Sarcini de lucru
Completează următoarele sarcini pentru a-ți consolida toate cunoștințele modulului înainte de test
Sarcina 1: Raportul săptămânal al magazinului
Cerință: Scrie un program care citește vânzările a 7 zile (o listă de 7 valori) și afișează: valoarea maximă, ziua primei apariții a maximului, media vânzărilor și câte zile au avut vânzări peste medie.
Soluție pentru Sarcina 1:
v = list(map(int, input().split()))
maxim = max(v)
ziua = v.index(maxim) + 1
media = sum(v) / len(v)
print("Maxim:", maxim)
print("Ziua:", ziua)
print("Media:", round(media, 2))
cnt = 0
for x in v:
if x > media:
cnt += 1
print("Zile peste medie:", cnt)
Verifică: combinăm max(), index(), sum(), len() și o parcurgere cu for. Acesta este modelul complet de analiză a datelor din modul.
Sarcina 2: Coada de la cantină
Cerință: Scrie un program care simulează o coadă de elevi la cantină: citește numele elevilor (pe o linie, separate prin spații), apoi îi servește pe toți, în ordinea sosirii, afișând pentru fiecare „Servit: nume". Folosește pop(0).
Soluție pentru Sarcina 2:
elevi = input().split()
while elevi:
print("Servit:", elevi.pop(0))
Verifică: while elevi: parcurge coada până rămâne goală, iar pop(0) scoate mereu primul elev din rând, respectând principiul FIFO.