El primer joc en Python: aprendre bucles i condicionals sense adonar-te’n

Un joc senzill pot ensenyar-te molt més del que sembla. En aquest post construeixes el teu primer joc en Python —Endevina el nombre— i entens bucles, condicionals, input i errors sense adonar-te’n.

Seccions:

  1. Per què començar amb un joc tan simple
  2. La idea del joc (regles clares)
  3. El primer error habitual (inputs buits / bucle infinit)
  4. while com a motor del joc
  5. Comptar intents i donar feedback
  6. Què has après realment (encara que sembli “simple”)

Quan comences a programar, sovint els primers exercicis semblen artificials: sumar números, imprimir frases, repetir patrons…
Però hi ha un punt d’inflexió molt clar: quan escrius un petit joc i veus que “passa alguna cosa”.

Aquest post explica com un joc aparentment senzill —endevinar un nombre— es converteix en una excusa perfecta per entendre conceptes clau de Python sense adonar-te’n.

Per què començar amb un joc tan simple

Un joc petit té tres avantatges enormes per aprendre:

  • regles clares
  • interacció amb l’usuari
  • Té un final recognoscible (guanyar o perdre)

A diferència d’un exercici abstracte, un joc ens força a pensar:

què passa abans, què passa després, i què ha de repetir-se fins que alguna cosa canviï.

La idea del joc (regles clares)

La idea és molt senzilla:

  1. El programa tria un nombre secret.
  2. L’usuari intenta endevinar-lo.
  3. El programa diu si el nombre és massa gran, massa petit o correcte.
  4. El joc continua fins que l’usuari encerta.

Amb quatre frases ja tenim:

  • entrada (input)
  • comparacions (<, >, ==)
  • repetició (while)
  • i una condició de sortida

Sense dir-ho explícitament, ja estem treballant amb lògica de control.


El primer error habitual (inputs buits / bucle infinit)

Aquí apareix el primer obstacle real. Dos errors molt comuns:

1️⃣ L’input no és un número

input() sempre retorna text.
Si no el convertim a int, el programa fallarà o es comportarà de manera estranya.

Això en ensenya una lliçó clau:

les dades tenen tipus, i cal controlar-los.

2️⃣ El bucle no s’acaba mai

Si el while no té una condició clara de sortida, el joc queda atrapat.

Aquest moment és molt revelador:
entenem que el programa no “sap” quan parar, si no li ho diem explícitament.


while com a motor del joc

El while és literalment el cor del joc.

Mentalment, el que estem dient és:

mentre no hagis encertat, continua jugant.

Això és molt diferent d’un for:

  • no saps quants intents faràs
  • no hi ha un nombre fix de repeticions

Aquí aprenem que:

  • un bucle no sempre serveix per comptar
  • sovint serveix per esperar que passi una condició

Aquesta idea reapareixerà constantment més endavant (validacions, menús, jocs, processos interactius).


Comptar intents i donar feedback

Un petit detall que canvia molt el joc: comptar els intents.

Afegir un comptador et permet:

  • informar l’usuari
  • millorar l’experiència
  • entendre com funciona una variable que canvia dins d’un bucle

I el feedback (“massa gran”, “massa petit”) introdueix una altra idea important:

el programa respon de manera diferent segons l’estat actual.

Això és el primer pas cap a pensar en termes de lògica condicional real, no només exercicis d’if.


Què hem après realment

Encara que el joc sigui curt, aquí ja hem treballat:

  • ✔️ entrada d’usuari (input)
  • ✔️ conversió de tipus (int)
  • ✔️ condicions (if / elif / else)
  • ✔️ bucles indeterminats (while)
  • ✔️ control d’errors conceptuals
  • ✔️ estat del programa (encertat / no encertat)
  • ✔️ feedback a l’usuari

Al següent post, el joc creix una mica més: afegirem límits, validacions i estructura, i veurem com un script comença a semblar-se a un petit projecte.

El primer joc en Python — codi comentat pas a pas

A continuació, el codi complet del joc Endevina el nombre, comentat línia a línia. L’objectiu no és només que funcioni, sinó entendre per què cada part existeix.

import random
# El programa tria un nombre secret entre 1 i 100
# randint(a, b) retorna un enter entre a i b (inclosos)
nombre_secret = random.randint(1, 100)
# Inicialitzem el comptador d'intents
intents = 0
# Variable de control del joc:
# mentre sigui False, el joc continuarà
encertat = False
print("He pensat un nombre entre 1 i 100.")
print("Intenta endevinar-lo!")
# El bucle principal del joc
# Es repetirà fins que encertat sigui True
while not encertat:
    # input() sempre retorna text (str)
    entrada = input("Introdueix un nombre: ")
    # Cas habitual: l'usuari prem Enter sense escriure res
    if entrada == "":
        print("No has escrit res. Torna-ho a provar.")
        continue
    # Intentem convertir l'entrada a enter
    try:
        nombre = int(entrada)
    except ValueError:
        # Si no és un número vàlid, evitem que el programa falli
        print("Això no és un nombre vàlid.")
        continue
    # Comptem un intent correcte
    intents += 1
    # Compareu el nombre amb el secret
    if nombre < nombre_secret:
        print("Massa petit.")
    elif nombre > nombre_secret:
        print("Massa gran.")
    else:
        # Cas final: l'usuari ha encertat
        encertat = True
        print(f"Correcte! Has encertat el nombre en {intents} intents.")

Aquest petit joc ja incorpora conceptes fonamentals de programació: entrada d’usuari, control d’errors, bucles indeterminats, condicionals i estat del programa.