Jocul Piatră-Hârtie-Foarfecă în Python
Construiește pas cu pas jocul Piatră-Hârtie-Foarfecă în Python: alegerea calculatorului cu random, logica de câștig, scor și mai multe runde. Cod complet.
Piatră-Hârtie-Foarfecă e jocul perfect de învățat programare: îl știe toată lumea, regulile sunt simple, dar logica de câștig te pune frumos la treabă cu condiții și dicționare. Hai să-l construim de la zero, pas cu pas.
Regulile, pe scurt
Fiecare jucător alege una dintre trei variante. Câștigătorul se decide așa:
- piatra bate foarfeca;
- foarfeca bate hârtia;
- hârtia bate piatra;
- alegeri egale = remiză.
Pasul 1: alegerea calculatorului
Calculatorul alege aleator cu modulul random:
import random
optiuni = ["piatra", "hartie", "foarfeca"]
alegere_pc = random.choice(optiuni)
random.choice ia un element la întâmplare dintr-o listă. Simplu și exact ce ne trebuie.
Pasul 2: citirea alegerii jucătorului
Cerem input și ne asigurăm că e valid, repetând până primim o opțiune corectă:
def citeste_alegere():
while True:
a = input("Alege (piatra/hartie/foarfeca): ").strip().lower()
if a in optiuni:
return a
print("Opțiune invalidă. Încearcă din nou.")
Pasul 3: cine câștigă?
Aici e inima jocului. Cea mai curată variantă e un dicționar care spune, pentru fiecare alegere, pe cine bate:
bate = {
"piatra": "foarfeca",
"foarfeca": "hartie",
"hartie": "piatra",
}
def cine_castiga(jucator, pc):
if jucator == pc:
return "remiza"
if bate[jucator] == pc:
return "jucator"
return "pc"
Logica e elegantă: dacă ce a bătut jucătorul (bate[jucator]) e fix alegerea calculatorului, jucătorul câștigă. Altfel, dacă nu e remiză, câștigă calculatorul. Niciun lanț lung de if-uri.
Un dicționar bine gândit poate înlocui zeci de condiții. Când vezi multe
ifrepetitive, întreabă-te dacă nu cumva o structură de date le poate înlocui.
Pasul 4: o rundă completă
Legăm pașii într-o singură rundă care întoarce rezultatul:
def runda():
jucator = citeste_alegere()
pc = random.choice(optiuni)
print(f"Calculatorul a ales: {pc}")
rezultat = cine_castiga(jucator, pc)
if rezultat == "remiza":
print("Remiză!")
elif rezultat == "jucator":
print("Ai câștigat runda!")
else:
print("Calculatorul a câștigat runda.")
return rezultat
Pasul 5: scor și mai multe runde
Jucăm până când cineva ajunge la 3 puncte:
def main():
scor_jucator = 0
scor_pc = 0
print("=== Piatră-Hârtie-Foarfecă ===")
print("Primul la 3 puncte câștigă!\n")
while scor_jucator < 3 and scor_pc < 3:
rezultat = runda()
if rezultat == "jucator":
scor_jucator += 1
elif rezultat == "pc":
scor_pc += 1
print(f"Scor: Tu {scor_jucator} - {scor_pc} PC\n")
if scor_jucator == 3:
print("Felicitări, ai câștigat meciul!")
else:
print("Calculatorul a câștigat meciul. Revanșă?")
main()
Cum îl rulezi
Pune tot codul într-un fișier phf.py și rulează în terminal:
# în terminal:
# python phf.py
Idei de îmbunătățire
| Funcție | Cum |
|---|---|
| Statistici | numără câte runde ai câștigat în total |
| Variantă extinsă | adaugă „șopârlă" și „Spock" |
| Istoric | salvează rezultatele într-un fișier |
| Interfață grafică | reconstruiește cu tkinter și butoane |
Pentru varianta extinsă, frumusețea e că trebuie doar să actualizezi dicționarul bate cu noile reguli — restul codului rămâne neschimbat. Asta arată cât de bine ai structurat logica.
Recapitulare
Ai folosit random, citire validată, dicționare pentru logică, funcții și o buclă cu scor. Sunt fix uneltele de care ai nevoie în orice proiect mai mare.
La ByteSchool învățăm prin proiecte ca acesta, pas cu pas, alături de mentori care au lucrat în companii Big Tech. Te ajutăm să transformi joaca în abilități reale de programator.