Aplicație pentru calcularea mediilor școlare
Construiește în Python o aplicație care calculează media notelor, media generală și îți spune dacă ai trecut clasa. Cod complet și explicat pas cu pas.
Câte calcule de medii faci la final de semestru? Multe — și mereu cu emoții. Hai să transformăm calculatorul într-un ajutor: un mic program Python care îți spune media la fiecare materie, media generală și dacă ai promovat. E un proiect perfect ca să exersezi liste, dicționare și funcții.
Ce vom construi
O aplicație de consolă care:
- citește notele pentru mai multe materii;
- calculează media rotunjită la fiecare materie;
- calculează media generală a anului;
- afișează un mic raport final.
Pasul 1: media la o singură materie
Începem cu cărămida de bază — o funcție care primește o listă de note și întoarce media.
def medie_materie(note):
if not note:
return 0
return round(sum(note) / len(note), 2)
print(medie_materie([8, 9, 7, 10])) # 8.5
Folosim sum ca să adunăm notele și len ca să aflăm câte sunt. round(..., 2) păstrează două zecimale. Verificarea if not note ne ferește de împărțirea la zero dacă lista e goală.
Pasul 2: mai multe materii cu un dicționar
Un dicționar e perfect ca să legăm fiecare materie de notele ei.
catalog = {
"Matematică": [9, 8, 10],
"Română": [7, 9, 8],
"Informatică": [10, 10, 9],
}
for materie, note in catalog.items():
print(f"{materie}: media {medie_materie(note)}")
Bucla for ... in catalog.items() ne dă pe rând câte o pereche (materie, listă de note). Așa nu contează dacă ai 3 sau 30 de materii — codul rămâne la fel.
Pasul 3: media generală
Media generală e media mediilor de la fiecare materie.
def medie_generala(catalog):
medii = [medie_materie(note) for note in catalog.values()]
return round(sum(medii) / len(medii), 2)
print(medie_generala(catalog))
Aici folosim o list comprehension — un mod scurt de a construi o listă. [medie_materie(note) for note in catalog.values()] calculează media fiecărei materii și le pune toate într-o listă.
Pasul 4: introducerea notelor de la tastatură
Până acum notele erau scrise în cod. Hai să le citim de la utilizator.
def citeste_note(materie):
text = input(f"Notele la {materie} (separate prin spațiu): ")
return [int(n) for n in text.split()]
materii = ["Matematică", "Română", "Informatică"]
catalog = {}
for m in materii:
catalog[m] = citeste_note(m)
text.split() rupe textul în bucăți după spații, iar int(n) transformă fiecare bucată din text în număr.
Pasul 5: raportul final
Punem totul cap la cap și adăugăm verdictul.
print("\\n--- RAPORT ---")
for materie, note in catalog.items():
m = medie_materie(note)
stare = "promovat" if m >= 5 else "corigent"
print(f"{materie}: {m} -> {stare}")
generala = medie_generala(catalog)
print(f"Media generală: {generala}")
print("Felicitări!" if generala >= 5 else "Mai exersează!")
Expresia "promovat" if m >= 5 else "corigent" se numește operator ternar și alege una dintre două variante în funcție de condiție.
Idee de extindere: la liceu unele materii au pondere diferită. Poți adăuga un dicționar de „ponderi" și calcula o medie ponderată — un pas excelent spre proiecte mai serioase.
Pasul 6: găsim materia cea mai slabă
Un raport util îți arată unde stai prost, ca să știi pe ce să pui accent. Hai să găsim materia cu media cea mai mică.
def materia_slaba(catalog):
cea_mai_mica = None
medie_minima = 11 # mai mare decât orice notă posibilă
for materie, note in catalog.items():
m = medie_materie(note)
if m < medie_minima:
medie_minima = m
cea_mai_mica = materie
return cea_mai_mica, medie_minima
materie, medie = materia_slaba(catalog)
print(f"Cea mai slabă: {materie} cu {medie}")
Pornim cu o valoare „imposibil de mare" (11) și, de fiecare dată când găsim o medie mai mică, o reținem. La final avem materia cu cel mai mic rezultat. E același tipar pe care îl folosești ca să găsești minimul în orice listă.
Salvarea rezultatelor într-un fișier
Ca să nu pierzi raportul când închizi programul, îl poți scrie într-un fișier text.
def salveaza_raport(catalog, nume_fisier="raport.txt"):
with open(nume_fisier, "w", encoding="utf-8") as f:
for materie, note in catalog.items():
f.write(f"{materie}: {medie_materie(note)}\n")
f.write(f"Media generală: {medie_generala(catalog)}\n")
salveaza_raport(catalog)
print("Raport salvat în raport.txt")
with open(...) deschide fișierul și îl închide automat la final, iar encoding="utf-8" asigură scrierea corectă a diacriticelor. Modul "w" înseamnă „write" — rescrie fișierul de fiecare dată.
Recapitulare rapidă
| Concept | Unde l-am folosit |
|---|---|
| Funcții | medie_materie, medie_generala |
| Dicționare | catalog |
| List comprehension | media materiilor |
| Operator ternar | verdictul promovat/corigent |
Concluzie
Ai construit o aplicație utilă cu sub 40 de linii de cod. Acum o poți folosi la fiecare final de semestru și o poți îmbunătăți cum vrei tu: salvare în fișier, medii ponderate sau chiar un grafic.
La ByteSchool transformăm idei mici ca aceasta în proiecte adevărate, pas cu pas, alături de mentori care lucrează în Big Tech și care îți arată cum se scrie cod curat și folositor.