Ghicește numărul — jocul tău complet în Python
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
- Creează un folder
jocuri-pythonundeva unde îl găsești (Documents, nu Desktop-ul aglomerat). În VS Code: File → Open Folder și alege-l. - Fișier nou:
ghiceste.py. Extensia.pye importantă — după ea VS Code știe să coloreze codul. - 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)
- 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 deimport randompe prima linie.input(...)îți dă înapoi text, chiar dacă tu tastezi cifre.int(...)îl transformă în număr — fără el, comparația cusecretar 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:
- 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 ultimulprint. - Contorul:
incercariporneș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. - 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
pythonnu 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ă comandapyîn loc depython.SyntaxErrorcu săgeata sub două puncte sau paranteză: îți lipsește:la finalul liniei cuwhile,ifsauelif, 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.