KULTUROSFERA

Program pe sistem real — evaluare

Săptămâna trecută, la „De la blocuri la text", programele tale Python vorbeau — dar numai ele. Tu stăteai și citeai ce afișează print. Un program adevărat poartă un dialog: întreabă, așteaptă, primește, răspunde. Iar săptămâna asta ai și ocazia perfectă să-l folosești pe unul: clasa voastră ține stand la târgul de mărțișoare al școlii, și cineva trebuie să socotească prețurile fără să încurce restul la coadă. Acel cineva va fi programul tău, rulând pe un calculator real din sala de informatică.

La finalul lecției vei ști să scrii un program care dialoghează cu utilizatorul prin input, să transformi textul primit în număr și să demonstrezi, la evaluarea practică, tot ce ai construit în acest modul.

input(): programul pune întrebări

O singură instrucțiune nouă desparte monologul de dialog:

nume = input("Cum te cheamă? ")
print("Salut, " + nume + "!")

Când execuția ajunge la input, programul afișează întrebarea și se oprește. Nu s-a blocat — te așteaptă. Tastezi răspunsul, apeși Enter, iar ce ai tastat ajunge în variabila nume. Tastatura a devenit dată de intrare, ecranul rămâne dată de ieșire: exact schema intrare–prelucrare–ieșire din prima lecție a modulului, doar că acum intrarea vine de la un om, în timpul rulării.

O subtilitate care mușcă pe toată lumea o singură dată (de obicei azi):

Testează pe pielea ta, e cel mai convingător experiment de trei linii al lecției: scrie a = input(), b = input(), print(a + b), rulează și tastează 3 și 2. Când vezi 32 pe ecran, nu mai uiți niciodată diferența dintre text și număr.

Casa de marcat a standului

Regulile târgului, stabilite ieri cu diriginta: un mărțișor costă 5 lei, dar de la 3 bucăți în sus prețul scade la 4 lei bucata. Programul complet, cu tot ce a adunat modulul — funcție definită cu def (lecția 2), cod text (lecția 3), dialog (azi):

# Casa de marcat — standul clasei a VIII-a A, târgul de mărțișoare
# Preț: 5 lei/buc; de la 3 bucăți în sus, 4 lei/buc (decis cu diriginta, 07.03)

def pret_total(bucati):
    if bucati >= 3:
        return bucati * 4
    return bucati * 5

nume = input("Numele cumpărătorului: ")
bucati = int(input("Câte mărțișoare? "))
total = pret_total(bucati)
print(nume + ", ai de plată " + str(total) + " lei.")

Citește-l de sus în jos și observă arhitectura, nu doar liniile. Comentariul de la început spune de unde vin regulile de preț — cine va modifica programul la anul știe pe cine să întrebe. Funcția pret_total izolează regula de calcul: dacă târgul schimbă prețurile, modifici un singur loc, exact principiul refactorizării. return e noutatea față de blocuri: funcția nu doar face ceva, ci trimite înapoi un rezultat, pe care apelantul îl prinde într-o variabilă. Iar str(total) îmbracă numărul în text ca să-l putem lipi în propoziția finală.

Scrie programul, rulează-l și vinde-i primul mărțișor colegului de bancă.

Rulează pe sistemul real

„Sistem real" nu înseamnă neapărat un robot — calculatorul din fața ta este un sistem real: tastatura e blocul de intrare, procesorul prelucrează, ecranul e blocul de ieșire, iar între ele circulă datele tale. Diferența față de scenă din Scratch e că aici nu mai există plasă de siguranță: utilizatorul de la târg va tasta ce vrea el, nu ce speri tu.

Așa că testezi ca în lecția 1 — cu cazuri scrise dinainte, inclusiv cele incomode:

Cazul de testTastezAșteptCe observ
cumpărătură mică210 lei
exact la prag312 lei
sub prag cu 12 vs. 3prețul pe bucată se schimbă corect?
zero bucăți00 lei — sau ar trebui un mesaj?
intrare-surpriză„trei" (cu litere)programul se oprește cu eroare

Ultimul rând merită o pauză. Tastează „trei" și privește: int nu poate transforma cuvântul în număr și programul se închide cu ValueError. La nivelul clasei a VIII-a nu-ți cerem să repari asta — îți cerem să știi că există și să o poți provoca la comandă. Un programator care își cunoaște punctele slabe ale programului e deja la jumătatea drumului spre versiunea următoare.

Da, chiar așa se întâmplă și în laboratorul nostru: programul care a mers perfect la toate testele „cuminți" cade la primul utilizator grăbit. De-asta tabelul de teste are întotdeauna un rând cu intrare-surpriză.

Exersează

Încălzire înainte de evaluare — fiecare sarcină e o repetiție pentru fișă:

  1. Adaugă în dialogul casei de marcat o a doua întrebare: „Plătește cu card sau numerar?" — și un mesaj final diferit pentru fiecare răspuns. Îți ajung input și if.
  2. Scrie funcția rest(platit, total) care returnează restul de dat înapoi și afiseaz-o în propoziție: „Rest de dat: ... lei." Testeaz-o cu plata 50 de lei pentru un total de 12 lei.
  3. Programul „ghicește numărul": calculatorul ține minte un număr (fixat de tine în cod), iar utilizatorul are trei încercări să-l ghicească, cu indicii „prea mic" / „prea mare". Schelet: un for cu trei pași, un int(input(...)), două decizii.

Provocare (opțional): fă casa de marcat imună la utilizatorul grăbit. Textele au metoda isdigit(), care spune dacă un text conține doar cifre: raspuns.isdigit()True pentru "3" și False pentru "trei". Citește răspunsul întâi ca text, verifică-l cu o decizie și afișează „Introdu un număr, te rog." în loc să lași programul să cadă cu ValueError.

Fișa de evaluare

A doua oră este evaluarea practică de modul. Lucrezi singur, la calculator, cu caietul închis; profesorul punctează rulările, nu promisiunile.

Punctajul de la ultima liniuță se câștigă cu tabelul de teste, nu cu noroc: spui profesorului „pentru 4 bilete prezic 8 lei, pentru 5 prezic 7,50" — și abia apoi rulezi.

Ce duci mai departe

Modulul se închide acolo unde a început: cu o cerință venită de la oameni reali, transformată în date, algoritm și program care rulează. Pe drum ai adunat uneltele care nu se mai demodează — subprograme cu parametri, refactorizare cu pași mici, comentarii care spun „de ce", testare pe cazuri-limită și primele tale linii de Python. În modulul următor, programele nu mai pornesc de la zero: primești cod scris de alții, îl citești, îl completezi și îl faci al tău — adică exact ce fac programatorii în fiecare zi de lucru. Funcția pret_total de azi e prima piesă din portofoliul cu care intri acolo.

Verifică-te

Activitate

Se încarcă activitatea…

Activitate

Se încarcă activitatea…

Activitate

Se încarcă activitatea…

Activitate

Se încarcă activitatea…

Activitate

Se încarcă activitatea…