KULTUROSFERA

Python decide: ai medie de bursă?

Lecția-suport: Completez programul: liste

Programele din laboratorul trecut mergeau înainte ca un tren: pas cu pas, mereu aceleași instrucțiuni. Azi le înveți să aleagă. Produsul zilei: un program care îți cere media, o compară cu pragul de bursă și îți răspunde diferit după caz — primul tău program care decide singur ce afișează. La finalul laboratorului vei avea un consilier de burse în 15 rânduri de Python.

Ce îți trebuie

  • VS Code cu Python funcțional (laboratorul 3). Test rapid: python --version în terminal.
  • Dosarul python-lab de data trecută.
  • Pragul de bursă folosit azi: 9.50 pentru bursa de merit. Dacă la școala ta regulile sunt altele, folosește-le pe ale tale — programul tău, regulile tale.
  • Timp: 45 de minute.

Prima decizie: if și else

  1. În python-lab, creează bursa.py. Începe cu varianta minimă:
media = float(input("Ce medie generală ai? "))

if media >= 9.5:
    print("Felicitări! Ai medie de bursă de merit.")
else:
    print("Încă nu ai medie de bursă.")

Două noutăți față de data trecută: float în loc de int (media are zecimale — 9.37 nu e număr întreg) și perechea if/else.

  1. Citește codul înainte să-l rulezi și observă regulile jocului:
    • după condiția din if vin două puncte;
    • rândurile care se execută doar în acel caz sunt împinse spre dreapta (indentate) cu Tab;
    • else stă la același nivel cu if, tot cu două puncte.
  2. Rulează de trei ori: cu 9.75, cu 8.20 și cu exact 9.50. Cazul de graniță e cel mai interesant: >= înseamnă „mai mare sau egal", deci 9.50 primește bursă. Dacă am fi scris doar >, elevul cu exact 9.50 ar fi fost nedreptățit de un semn.

Mai multe praguri: elif

  1. În realitate nu există doar „da" și „nu": să zicem că școala dă bursă de merit de la 9.50 și o mențiune pe diploma de sfârșit de an de la 9.00. Trei cazuri — al treilea cuvânt-cheie, elif („altfel, dacă"):
media = float(input("Ce medie generală ai? "))

if media >= 9.5:
    print("Bursă de merit! Felicitări!")
elif media >= 9.0:
    print("Mențiune. Bursa e la", round(9.5 - media, 2), "puncte distanță.")
else:
    print("Deocamdată fără bursă. Pas cu pas.")
  1. Detaliu important: Python citește condițiile de sus în jos și se oprește la prima adevărată. O medie de 9.8 este și peste 9.5, și peste 9.0 — dar primește doar primul mesaj, pentru că elif nici nu mai e verificat. De asta pragurile se scriu de la mare la mic.
  2. Fă experimentul care demonstrează regula: inversează primele două ramuri (pune media >= 9.0 prima) și rulează cu 9.8. Programul îți dă mențiune în loc de bursă — logic greșit, deși fiecare rând în parte e corect. Pune-le la loc.

Fă programul de neînșelat

  1. Un utilizator răutăcios scrie media 11 sau -3. Programul tău îl crede pe cuvânt — nu e bine. Adaugă la început o verificare de bun-simț:
media = float(input("Ce medie generală ai? "))

if media < 1 or media > 10:
    print("Stai puțin — mediile sunt între 1 și 10.")
elif media >= 9.5:
    print("Bursă de merit! Felicitări!")
elif media >= 9.0:
    print("Mențiune. Aproape de bursă!")
else:
    print("Deocamdată fără bursă. Pas cu pas.")

or leagă două condiții: e suficient ca una să fie adevărată. Verificarea de validitate stă prima, ca portarul la intrare — altfel media 11 ar primi fericită bursă de merit.

Dacă nu merge

  • IndentationError: expected an indented block. Rândul de sub if nu e împins spre dreapta. Tot ce se execută „în interiorul" deciziei trebuie indentat — folosește Tab, consecvent, și nu amesteca Tab cu spații puse manual.
  • SyntaxError chiar pe rândul cu if. În 9 cazuri din 10 lipsesc cele două puncte de la sfârșit. Al zecelea caz: ai scris = în loc de == într-o comparație de egalitate — un = pune valoare în variabilă, două == compară.
  • Programul crapă la medii cu virgulă (9,50). Python vrea punct zecimal: 9.50. Virgula românească dă ValueError. Scrie în mesajul de la input „cu punct, ex: 9.50" — așa fac programatorii adevărați: previn eroarea prin mesaj clar.
  • elif dă eroare de sintaxă. elif nu poate trăi singur — trebuie să vină după un if, la exact același nivel de indentare, și înainte de else.
  • Toate mediile primesc același mesaj. Verifică ordinea pragurilor (de la mare la mic) și semnele: >= peste tot, nu un amestec de > și <.

Misiunea ta

Nivel de bază: programul cu trei ramuri și verificarea de validitate funcționează pentru toate cazurile de test din laborator.

Extindere: adaugă o a patra categorie la alegerea ta (de exemplu un mesaj special pentru media 10 exact — cu ce trebuie să înceapă lanțul de condiții ca să funcționeze?) și afișează pentru orice medie validă distanța până la următorul prag.

Provocare: scrie corigenta.py — programul care primește o singură notă de sfârșit de an și spune: sub 5 „corigent", exact 5 „la limită, a fost aproape", între 5 și 7 „de consolidat", peste 7 „stai bine". Alege singur semnele și ordinea ramurilor, apoi demonstrează cu 4 rulări (una pe ramură) că toate cazurile de graniță fac ce ai vrut.

Ai terminat când:

  • rulările cu 9.8 / 9.2 / 7.0 / 11 dau patru mesaje diferite și corecte;
  • cazul de graniță 9.50 primește bursă și știi care semn garantează asta;
  • poți explica în două propoziții de ce pragurile se verifică de la mare la mic.