Un prim proiect bun este suficient de mic pentru a fi terminat, dar suficient de bogat pentru a lua decizii. În acest ghid construim un joc de ghicit numărul: programul alege un număr între 1 și 100, primește încercările jucătorului și oferă indicii până la răspunsul corect.
Proiectul folosește Python 3 și consola. Vei exersa valori și variabile, input(), conversia la int, condiții, o buclă while, o funcție, tratarea unei erori și o metodă simplă de testare.
Înainte să scrii codul: definește regulile
Scrie mai întâi comportamentul jocului în propoziții:
- Programul alege un număr întreg între 1 și 100.
- Jucătorul introduce o încercare.
- Dacă valoarea nu este un număr întreg din interval, programul cere din nou.
- Dacă încercarea este prea mică sau prea mare, programul oferă indiciul potrivit.
- Jocul se termină când numărul este ghicit și afișează numărul încercărilor valide.
Această listă este un contract pentru program. Ne va spune ce trebuie implementat și ce cazuri trebuie testate.
Pasul 1: generează numărul secret
Modulul standard random oferă funcția randint(a, b), care întoarce un număr întreg între limitele incluse. Pentru joc folosim:
from random import randint
secret_number = randint(1, 100)
print("Am ales un număr între 1 și 100.")
Nu afișa numărul secret în versiunea finală. În timpul depanării îl poți afișa temporar sau îl poți înlocui cu o valoare fixă. Modulul random produce valori pseudo-aleatoare și documentația avertizează că nu este potrivit pentru parole sau tokenuri de securitate; aici îl folosim numai pentru un joc.
Pasul 2: citește și compară o încercare
input() întoarce text. Pentru a compara matematic valoarea, o transformăm într-un număr întreg:
guess = int(input("Numărul tău: "))
if guess < secret_number:
print("Prea mic.")
elif guess > secret_number:
print("Prea mare.")
else:
print("Corect!")
Ramurile sunt exclusive: programul execută una singură. Această versiune permite însă o singură încercare și se oprește cu ValueError dacă utilizatorul scrie, de exemplu, zece. Următorii pași rezolvă ambele probleme.
Pasul 3: validează intrarea într-o funcție
Separăm citirea valorii de logica jocului. Funcția repetă întrebarea până primește un număr întreg din interval:
def read_guess():
while True:
raw_value = input("Numărul tău: ")
try:
guess = int(raw_value)
except ValueError:
print("Scrie un număr întreg.")
continue
if 1 <= guess <= 100:
return guess
print("Alege un număr între 1 și 100.")
try delimitează conversia care poate eșua, iar except ValueError tratează exact situația în care textul nu poate fi transformat în întreg. Nu folosim o captură generică pentru toate erorile. continue reia bucla, iar return încheie funcția numai după validare.
Pasul 4: repetă până la răspunsul corect
Acum putem asambla jocul complet:
from random import randint
def read_guess():
while True:
raw_value = input("Numărul tău: ")
try:
guess = int(raw_value)
except ValueError:
print("Scrie un număr întreg.")
continue
if 1 <= guess <= 100:
return guess
print("Alege un număr între 1 și 100.")
def play_game():
secret_number = randint(1, 100)
attempts = 0
print("Am ales un număr între 1 și 100.")
while True:
guess = read_guess()
attempts += 1
if guess < secret_number:
print("Prea mic.")
elif guess > secret_number:
print("Prea mare.")
else:
print(f"Corect! Număr de încercări: {attempts}.")
break
play_game()
Variabila attempts crește numai după o valoare validă. Bucla principală se încheie prin break când numărul a fost găsit. Funcția read_guess() are o singură responsabilitate, iar play_game() coordonează regulile jocului.
Rulează programul
Salvează codul într-un fișier numit game.py. Într-un terminal deschis în directorul fișierului rulează:
python game.py
În unele sisteme comanda poate fi python3 game.py. Folosește un interpretor Python 3 actual și verifică instrucțiunile oficiale pentru sistemul tău dacă programul python nu este găsit.
Testează înainte să adaugi funcții noi
Pentru o verificare controlată, înlocuiește temporar linia cu randint prin:
secret_number = 42
Rulează apoi aceste cazuri:
20trebuie să producă mesajul „Prea mic.”;80trebuie să producă mesajul „Prea mare.”;42trebuie să încheie jocul;zecetrebuie să solicite un număr întreg fără oprirea programului;0și101trebuie respinse ca valori în afara intervalului;- încercările invalide nu trebuie adăugate la contor.
După verificare, restaurează secret_number = randint(1, 100). O valoare fixă face comportamentul reproductibil și te ajută să testezi fiecare ramură fără să ghicești ce a ales programul.
Erori frecvente și cum le localizezi
IndentationError: o linie nu este aliniată cu blocul din care face parte.SyntaxError: verifică parantezele, ghilimelele și caracterul:dupăif,elif,else,while,try,exceptșidef.- Jocul nu se termină: verifică dacă ramura corectă ajunge la
break. - Contor incorect: verifică locul în care este executat
attempts += 1. - Comparație imposibilă: confirmă că valoarea întoarsă de
read_guess()este un întreg, nu text.
Citește traceback-ul până la prima linie care indică fișierul tău. Mesajul, numărul liniei și tipul excepției formează împreună punctul de pornire al depanării.
Extinde proiectul câte o regulă pe rând
- Niveluri de dificultate: schimbă limita superioară la 20, 100 sau 1.000.
- Număr maxim de încercări: oprește jocul după o limită și dezvăluie răspunsul.
- Reîncepere: întreabă jucătorul dacă dorește o partidă nouă.
- Scor: calculează un punctaj în funcție de dificultate și încercări.
- Teste automate: separă funcția care compară două numere și verifică rezultatele ei fără input interactiv.
Adaugă o singură extensie, definește întâi regula, testează cazurile-limită și abia apoi continuă. Astfel, proiectul rămâne ușor de explicat și de reparat.
Ce ai exersat de fapt
Jocul nu este important doar prin rezultat. Ai transformat reguli în pași, ai separat o responsabilitate într-o funcție, ai validat date venite din exterior, ai tratat o eroare specifică, ai repetat o acțiune până la o condiție și ai verificat fiecare traseu important. Aceste obiceiuri se transferă în proiecte mai mari.
Pentru a înțelege cum ajunge ulterior codul într-o aplicație accesată prin browser, continuă cu Cum funcționează o aplicație web. Pentru un traseu ghidat de la fundamente la proiect final, vezi Python Foundations.