Școala Româno-Britanică
Modulul 2 Clasa a IX-a | Python

Ora 10: Recapitulare și evaluare

Ce vei învăța astăzi: Recapitularea completă a modulului: lista, stiva, coada, operatorii, metodele, parcurgerea și lista de frecvențe

Rezultat practic: Analizezi și compari toate noțiunile modulului și rezolvi probleme complexe, pregătindu-te pentru testul de evaluare (Competența 4.1).

Competența 4.1 Săptămâna 12

Înainte de a începe

De ce contează? Recapitularea finală (reluarea ordonată a tuturor noțiunilor modulului) leagă toate noțiunile modulului și îți dă strategia de rezolvare la test: recunoști tipul de problemă, alegi instrumentul potrivit și explici de ce. Tocmai aceste explicații aduc nota mare.

Ce știi deja?

În lecția anterioară, „Aplicații integrate cu liste - gestiunea stocurilor și comenzilor", ai combinat operatorii și metodele pe date reale. Care este deosebirea esențială dintre stivă și coadă, pe care ai putea-o explica la evaluare?

Ideea-cheie: La evaluare, fiecare enunț cere alegerea instrumentului potrivit: lista pentru acces direct, stiva (o structură în care ultimul element adăugat este primul scos) sau coada (o structură în care primul element adăugat este primul scos) pentru ordinea de procesare, frecvențele (listele care numără aparițiile valorilor) pentru valori dintr-un interval mic, iar explicarea alegerii aduce punctajul de la nota 7 la nota 10.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

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
Deosebirile dintre listă, stivă și coadă
Operatorii și metodele într-o singură problemă
Strategia de rezolvare la test

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 = MAXIM(vanzari) ziua = POZITIA(maxim) + 1 // index + 1, zilele de la 1 la 7 media = SUMA(vanzari) / NUMAR(vanzari) AFISEAZA maxim, ziua, media PENTRU i de la 0 la NUMAR(vanzari) - 1: DACA vanzari[i] > media ATUNCI AFISEAZA ziua i+1, vanzari[i]
Vânzările săptămânii: max, ziua, media, peste medie
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

  1. Citește enunțul și subliniază datele de intrare și rezultatul cerut
  2. Alege structura: listă simplă, stivă, coadă sau listă de frecvențe
  3. Scrie pseudocodul cu citire, prelucrare și afișare
  4. Transpune în Python, pas cu pas, comentând fiecare parte
  5. 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:
liniar LIFO FIFO sum frecvențe

Exercițiu de completare 2

Completează fragmentul de program care analizează notele:
note = [7, 9, 5, 8, 10]
media = ______(note) / ______(note)
cnt = 0
for x in note:
    if x ______ media:
        cnt ______ 1
print(media, cnt)
Bancă de cuvinte:
sum len > +=

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:

Ai grijă la: la test se punctează și corectitudinea sintactică: verifică 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.

APLICARE ȘI REZOLVARE DE PROBLEME

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:
  1. Citim n și notele în lista note
  2. Calculăm media cu sum(note) / n și o afișăm cu round(..., 2)
  3. 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:
  1. Citim n și notele în lista note
  2. Construim lista de frecvențe fr = [0] * 11 și incrementăm cu fr[x] += 1
  3. Căutăm frecvența maximă, începând de la nota 1
  4. 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ȚII PRACTICE

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.

Scrie pe caiet - De reținut

Titlul lecției

Ora 10: Recapitulare și evaluare

Definiția lecției

Recapitularea finală unește toate noțiunile modulului și pregătește strategia de rezolvare a problemelor de evaluare. La fiecare enunț recunoaștem tipul de problemă și alegem instrumentul potrivit: lista pentru acces direct după index, stiva LIFO sau coada FIFO pentru ordinea de procesare, metodele și operatorii pentru transformări, parcurgerea cu memorare pentru valori globale precum media și lista de frecvențe pentru valorile dintr-un interval mic. Explicarea alegerii face parte din punctaj: trebuie să spunem de ce am ales structura respectivă. Un exemplu real: un program care gestionează notele unei clase într-un semestru folosește lista pentru stocare, media pentru raport și lista de frecvențe pentru distribuția notelor.

Definiții esențiale

Algoritmul cheie - pseudocod

CITESTE n CITESTE valorile in lista v maxim = MAXIM(v) pozitie = POZITIA(maxim) + 1 media = SUMA(v) / n AFISEAZA maxim, pozitie, media PENTRU fiecare x din v: DACA x > media ATUNCI cnt = cnt + 1 AFISEAZA cnt

Algoritmul cheie - cod Python

n = int(input())
v = list(map(int, input().split()))

maxim = max(v)
poz = v.index(maxim) + 1
media = sum(v) / n

print(maxim, poz, round(media, 2))

cnt = 0
for x in v:
    if x > media:
        cnt += 1

print(cnt)

Greșeli comune de evitat

Sfaturi practice și trucuri

Exemplu practic

De unde întâlnim recapitularea în viața reală? O problemă tipică de evaluare cere să citim notele clasei, să afișăm media și nota maximă cu poziția ei, exact ca într-un raport semestrial:

n = int(input())
v = list(map(int, input().split()))
media = sum(v) / n
maxim = max(v)
poz = v.index(maxim) + 1
print(round(media, 2), maxim, poz)

Programul afișează media notelor, nota maximă și numărul de ordine al elevului care a luat-o.