KULTUROSFERA

Ghicește numărul — jocul tău complet în Python

Lecția-suport: Algoritmul unei funcționalități noi

Calculatorul se gândește la un număr între 1 și 100. Tu ai dreptul să întrebi, el are obligația să răspundă „prea mic" sau „prea mare" — și la final îți spune din câte încercări l-ai prins. La finalul laboratorului vei avea un joc complet, care rulează în terminal, scris integral de tine: fișierul ghiceste.py, gata de arătat colegilor și de dus acasă pe stick.

Ce îți trebuie

  • Python 3 instalat — descarci de la python.org (butonul mare „Download Python"). La instalare pe Windows, bifează obligatoriu Add Python to PATH.
  • VS Code — de la code.visualstudio.com. Dacă l-ai folosit deja la lecția „Program pe sistem real" din modulul 5, ești gata.
  • Extensia Python în VS Code (o cauți în panoul Extensions, e prima din listă, de la Microsoft).
  • Cont: nu îți trebuie niciunul.
  • Timp: 15 minute pregătire + 50 minute construcție + restul pentru misiune.

Verifică instalarea: deschide un terminal în VS Code (meniul Terminal → New Terminal) și scrie:

python --version

Dacă primești ceva de forma Python 3.12.x, mergem mai departe. Pe unele calculatoare comanda e python3 — reține varianta care merge la tine și folosește-o peste tot în laborator.

Scheletul jocului: numărul secret și prima întrebare

  1. Creează un folder jocuri-python undeva unde îl găsești (Documents, nu Desktop-ul aglomerat). În VS Code: File → Open Folder și alege-l.
  2. Fișier nou: ghiceste.py. Extensia .py e importantă — după ea VS Code știe să coloreze codul.
  3. Scrie prima versiune, minimă:
import random

secret = random.randint(1, 100)
print("M-am gandit la un numar intre 1 si 100.")

raspuns = int(input("Ghiceste: "))

if raspuns == secret:
    print("Bravo, din prima!")
else:
    print("Nu. Era", secret)
  1. Rulează: butonul de play din colțul din dreapta sus sau, în terminal, python ghiceste.py.

Câteva observații înainte să mergem mai departe:

  • random.randint(1, 100) alege numărul secret — alt număr la fiecare rulare. De aceea ai nevoie de import random pe prima linie.
  • input(...) îți dă înapoi text, chiar dacă tu tastezi cifre. int(...) îl transformă în număr — fără el, comparația cu secret ar da rezultate ciudate.

Bucla while: jocul devine joc

O singură încercare nu e un joc, e o loterie. Transformăm totul într-o buclă care nu te lasă să pleci până nu ghicești:

import random

secret = random.randint(1, 100)
incercari = 0

print("M-am gandit la un numar intre 1 si 100.")

raspuns = 0
while raspuns != secret:
    raspuns = int(input("Ghiceste: "))
    incercari = incercari + 1
    if raspuns < secret:
        print("Prea mic.")
    elif raspuns > secret:
        print("Prea mare.")

print("Corect! Ai reusit din", incercari, "incercari.")

Citește codul cu voce joasă, linie cu linie, înainte să-l rulezi. Trei lucruri de urmărit:

  1. Condiția buclei: while raspuns != secret — cât timp răspunsul diferă de secret, mai punem o întrebare. În clipa în care sunt egale, bucla se termină și programul cade pe ultimul print.
  2. Contorul: incercari pornește de la 0 și crește cu 1 la fiecare trecere prin buclă. E aceeași idee de „variabilă-numărătoare" pe care ai folosit-o în Scratch la scor.
  3. Indentarea: tot ce e „în interiorul" buclei stă împins cu 4 spații la dreapta. În Python indentarea nu e cosmetică — ea decide ce face parte din buclă și ce nu.

Rulează și joacă serios o rundă. Strategia bună: începe cu 50, apoi înjumătățește intervalul. Un număr între 1 și 100 se ghicește garantat din maximum 7 încercări — asta e, de fapt, căutarea binară despre care vei mai auzi.

Finisajele care fac diferența

Un joc terminat se deosebește de un exercițiu prin detalii. Adaugă-le pe rând, rulând după fiecare:

a) Mesaj de „aproape". Dacă răspunsul e la cel mult 5 distanță de secret, spune „Arde!". Ai nevoie de abs(raspuns - secret) <= 5 — funcția abs îți dă distanța, indiferent de direcție. Atenție unde pui verificarea: înainte de „prea mic/prea mare", altfel nu se vede niciodată.

b) Aprecierea performanței. După buclă, comentează scorul: sub 7 încercări — „Ca la carte!", între 8 și 12 — „Onorabil.", peste — „Data viitoare pornește de la 50.".

c) Protecție la limite. Dacă utilizatorul scrie 300 sau -5, spune-i „Am zis intre 1 si 100!" și nu contoriza încercarea (scade 1 din contor în acel caz).

Dacă nu merge

  • python nu e recunoscut ca o comandă (Windows): la instalare nu ai bifat „Add Python to PATH". Cea mai rapidă rezolvare — dezinstalezi și reinstalezi cu bifa pusă. Alternativ, încearcă comanda py în loc de python.
  • SyntaxError cu săgeata sub două puncte sau paranteză: îți lipsește : la finalul liniei cu while, if sau elif, ori o paranteză închisă. Python îți arată exact linia — citește-o caracter cu caracter.
  • IndentationError: liniile din buclă nu sunt aliniate identic. Nu amesteca spații cu Tab; în VS Code, selectează liniile problematice și apasă Tab / Shift+Tab până stau toate la fel.
  • ValueError: invalid literal for int(): cineva a tastat litere în loc de număr. Deocamdată e acceptabil să crape; în laboratorul următor înveți să tratezi elegant cazul.
  • Bucla nu se oprește niciodată: verifică dacă raspuns = int(input(...)) e în interiorul buclei (indentat). Dacă a rămas afară, programul compară la infinit aceeași valoare veche. Oprești un program blocat cu Ctrl+C în terminal.

Misiunea ta

Nivel de bază (obligatoriu): jocul complet cu buclă while, mesaje „prea mic/prea mare", contor de încercări afișat la final.

Extindere: adaugă cele trei finisaje din secțiunea anterioară („Arde!", aprecierea scorului, protecția la limite).

Provocare: la finalul unei runde, întreabă „Mai joci? (da/nu)" și ia decizia corectă — o buclă în jurul întregului joc. Bonus de respect: ține minte recordul (cel mai mic număr de încercări) între runde și anunță-l când e doborât.

Ai terminat când:

  • programul rulează de la început la sfârșit fără nicio eroare, de 3 ori la rând;
  • un coleg care nu ți-a văzut codul poate juca fără să-l ajuți cu nimic;
  • contorul de încercări e corect (verificat de coleg, nu de tine);
  • codul are cel puțin două comentarii cu # care explică ce face bucla și contorul.