Ce vei învăța astăzi?
În această lecție aplicăm parcurgerea cu memorare pentru a analiza date reale stocate în liste: calculăm media, minimul, maximul, numărăm valorile de peste medie și interpretăm rezultatele.
Parcurgerea cu memorare - de ce stocăm datele în listă?
Definiție: Parcurgerea cu memorare presupune să citim toate datele și să le stocăm într-o listă, pentru a putea parcurge valorile de mai multe ori sau pentru a le compara între ele.
De exemplu, pentru a afla câte note sunt peste medie, trebuie mai întâi să cunoaștem media, deci avem nevoie de toate notele stocate. O singură citire, fără listă, nu ne-ar permite acest lucru.
Analogie: registrul zilnic al numărului de clienți
Patronul unui magazin notează în fiecare seară, în registru, numărul de clienți din ziua respectivă. Abia la finalul săptămânii deschide registrul și parcurge valorile notate pentru a calcula media zilnică, ziua cu cei mai mulți clienți și zilele cu un număr peste medie.
- Notele din registru corespund elementelor listei
- Parcurgerea registrului corespunde parcurgerii listei cu for
- Fără registru, patronul nu ar putea compara zilele între ele
Analiza notelor unei clase
Vrem să analizăm notele obținute de o clasă la un test: media, nota minimă, nota maximă și numărul de note peste medie. Toate aceste rezultate se obțin din aceeași listă de note.
Exemplu complet: notele clasei
note = [7, 9, 5, 8, 10, 6, 4, 9]
media = sum(note) / len(note)
print("Media clasei:", media)
print("Nota minima:", min(note))
print("Nota maxima:", max(note))
cnt = 0
for x in note:
if x > media:
cnt += 1
print("Numar note peste medie:", cnt)
Observă: calculăm media cu sum(note) / len(note), minimul cu min(note), maximul cu max(note). Apoi, într-o a doua parcurgere cu for, numărăm notele mai mari decât media. De aceea aveam nevoie de lista stocată!
Analiza vânzărilor lunare
Analizăm vânzările unui magazin pe cele 12 luni ale anului. Dorim să aflăm valoarea maximă a vânzărilor, luna în care apare prima dată maximul și media lunară, pentru a observa variațiile.
Exemplu complet: vânzările pe luni
vanzari = [1200, 980, 1450, 1600, 1380, 1750,
900, 1100, 1520, 1680, 1450, 1900]
maxim = max(vanzari)
luna = vanzari.index(maxim) + 1
media = sum(vanzari) / len(vanzari)
print("Vanzi maxime:", maxim)
print("Luna cu cele mai mari vanzari:", luna)
print("Media vanzarilor lunare:", round(media, 2))
for i in range(len(vanzari)):
variatie = vanzari[i] - media
print("Luna", i + 1, ": variatie =", round(variatie, 2))
Observă: vanzari.index(maxim) ne dă poziția primei apariții a maximului, începând cu 0. Adăugăm 1 pentru a obține numărul lunii (1-12). Comparând fiecare lună cu media calculăm variațiile (diferențele dintre fiecare valoare și medie).
| Indicator | Valoare | Interpretare |
|---|---|---|
| Vânzările maxime | 1900 |
cea mai mare valoare din listă |
| Luna cu maximul | 12 |
poziția primei apariții a maximului (indice 11 + 1) |
| Media vânzărilor lunare | 1409.17 (aproximativ) |
suma împărțită la numărul de luni |
| Variația față de medie | vanzari[i] - media |
pozitivă peste medie, negativă sub medie |
Exercițiu de completare 1
Completează enunțul despre analiza datelor cu cuvintele potrivite:
Pentru a analiza datele, le stocăm într-o ______ și le parcurgem de mai multe ori. Media o calculăm cu ______(v) împărțit la ______(v). Cea mai mare valoare o găsim cu funcția ______(v). Pentru a număra valorile peste medie, verificăm dacă fiecare x este ______ decât media.
Bancă de cuvinte:
Exercițiu de completare 2
Completează fragmentul de program care analizează notele:
Bancă de cuvinte:
Test de înțelegere
Test rapid - analiza datelor:
1. Pentru a număra notele mai mari decât media clasei, este necesar ca notele să fie:
2. Media aritmetică a elementelor unei liste v se calculează cu:
3. Pentru a afla luna (poziția 1-12) cu cele mai mari vânzări, folosim:
sum(v) / len(v), nu cu media rotunjită la afișare cu round(); altfel, o valoare apropiată de media rotunjită poate fi numărată greșit.Aprofundare
Media cu valori reale. Atunci când datele sunt numere reale (temperaturi, vânzări în lei), media poate avea multe zecimale. Pentru afișare folosim round(media, 2), iar la compararea elementelor cu media trebuie să fim atenți: o valoare „peste medie" se compară cu media nerotunjită, nu cu cea afișată.
Valoarea mediană versus media. Media aritmetică este sensibilă la valori extreme: o singură vânzare uriașă „trage" media în sus. Mediana (valoarea din mijlocul listei sortate) nu este afectată de extreme și, în statistică, oferă o imagine mai fidelă a centrului datelor. Pentru a o calcula, sortăm lista și citim elementul din mijloc: v[len(v) // 2] pentru un număr impar de elemente.
De ce memorăm datele. Analiza statistică reală (raportul anual al unei firme, media notelor pe semestru) presupune mai multe parcurgeri ale acelorași date: o parcurgere pentru medie, alta pentru minim și maxim, alta pentru valori peste medie. Fără memorarea în listă, fiecare indicator ar necesita recitirea datelor. De aceea analiza datelor este exemplul clasic de parcurgere cu memorare.
Comparații statistice suplimentare. Pe lângă medie, minim și maxim, putem calcula: amplitudinea (max(v) - min(v)), numărul de valori sub medie, procentul valorilor peste medie (cnt / len(v) * 100) sau frecvența fiecărei valori cu o listă de frecvențe. Toate folosesc aceeași listă memorată.
Atenție la date incomplete. În aplicații reale, unele valori pot lipsi sau fi eronate (o zi fără înregistrare). Înainte de analiză, datele trebuie verificate: valori negative la stocuri, temperaturi absurde etc. Programul robust fie le semnalează, fie le exclude din calcule.
PbInfo - Note peste medie
Enunț:
Cerință: Se citește numărul natural n, apoi n note. Să se afișeze media notelor și câte note sunt peste medie.
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 pe ecran media notelor și numărul de note mai mari decât media.
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 5 8 10 6 4 9
Ieșire:
7.25 4
Cum gândim soluția:
- Citim n și notele în lista v
- Calculăm media cu
sum(v) / n - Parcurgem lista și numărăm notele mai mari decât media
- Afișăm media și contorul
Scrie soluția în Python:
Soluție corectă:
n = int(input())
v = list(map(int, input().split()))
med = sum(v) / n
cnt = 0
for x in v:
if x > med:
cnt += 1
print(med, cnt)
Ce învățăm: stocăm notele în listă, calculăm media cu sum(v) / n, apoi, într-o a doua parcurgere cu for, numărăm notele mai mari decât media.
PbInfo - Luna cu cele mai mari vânzări
Enunț:
Cerință: Se citesc 12 valori, reprezentând vânzările lunare ale unui magazin. Să se afișeze valoarea maximă a vânzărilor și luna (poziția de la 1 la 12) în care aceasta apare prima dată.
Date de intrare:
Programul citește de la tastatură cele 12 valori, separate prin spații.
Date de ieșire:
Programul va afișa valoarea maximă și numărul lunii în care apare prima dată maximul.
Restricții și precizări:
Se citesc exact 12 valori, numere întregi pozitive, corespunzătoare lunilor 1-12 ale anului.
Exemplu:
Intrare:
1200 980 1450 1600 1380 1750 900 1100 1520 1680 1450 1900
Ieșire:
1900 12
Cum gândim soluția:
- Citim cele 12 valori în lista v
- Determinăm maximul cu
max(v) - Găsim poziția primei apariții cu
v.index(m)și adăugăm 1 - Afișăm maximul și numărul lunii
Scrie soluția în Python:
Soluție corectă:
v = list(map(int, input().split())) m = max(v) poz = v.index(m) + 1 print(m, poz)
Ce învățăm: v.index(m) returnează poziția primei apariții a maximului, începând cu 0. Adăugăm 1 pentru a obține numărul lunii, de la 1 la 12.
Exercițiul Practic: Analiza datelor reale
Sarcini de lucru
Completează următoarele sarcini pentru a-ți consolida cunoștințele despre analiza datelor stocate în liste
Sarcina 1: Temperaturile unei săptămâni
Cerință: Scrie un program care citește temperaturile unei săptămâni (7 valori) și afișează media, minimul și maximul acestora.
Soluție pentru Sarcina 1:
t = list(map(float, input().split()))
media = sum(t) / len(t)
print("Media:", media)
print("Minim:", min(t))
print("Maxim:", max(t))
Verifică: stocăm temperaturile în lista t, apoi calculăm media cu sum(t) / len(t), iar minimul și maximul cu min(t) și max(t).
Sarcina 2: Notele mai mari decât media clasei
Cerință: Scrie un program care citește o listă de note și afișează notele mai mari decât media clasei.
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, într-o a doua parcurgere, afișăm notele mai mari decât media.