Capítol 5 — Repetir amb while
Capítol 5

Repetir amb while

Quan no saps quantes vegades has de repetir una cosa, fas servir while.

Què és un bucle?

Imagina que has d'imprimir els números de l'1 al 5. Ho podries fer amb cinc print() separats, però si fossin cent números? Un bucle (en anglès, loop) és un bloc de codi que es repeteix automàticament mentre es compleixi una condició:

Llegeix-ho en veu alta: «mentre i sigui menor o igual a 5, imprimeix i i augmenta'l en 1». Quan i arriba a 6, la condició és falsa i el bucle s'atura.

Les dues peces clau del while són exactament les mateixes que al if: els dos punts : al final de la línia i la indentació del bloc interior.

while amb comptador

El patró anterior —inicialitzar un comptador, comprovar-lo, avançar-lo— és el més habitual per repetir un bloc un nombre concret de vegades:

Pots usar un acumulador —una variable que creix a cada iteració— per fer sumes o productes progressives:

Executa el codi i comprova el resultat. Després prova de canviar el límit per calcular la suma fins al 100.

while controlat per l'usuari

Quan el nombre de repeticions depèn de l'usuari —per exemple, seguir preguntant fins que respongui correctament—, el while és la única eina adequada:

El bucle s'executa una primera vegada perquè resposta comença buida (""), que és diferent de "sí". Quan l'usuari escriu "sí", la condició es torna falsa i el programa continua.

Aquest tipus de bucle també s'anomena bucle sentinella: el valor sentinella ("sí" en aquest cas) actua com a senyal de parada.

Bucles infinits i break

Si la condició del while mai es torna falsa, el bucle no s'atura mai. Això s'anomena bucle infinit i normalment és un error —però de vegades és útil si s'usa amb break:

while True: mai para per si sol perquè True sempre és cert. La instrucció break surt del bucle immediatament, salti a on salti. Fixa't que el print("Fins aviat!") s'executa perquè és fora del bucle.

Hi ha també continue, que en comptes de sortir del bucle salta directament a la propera iteració:

Bucles que no s'executen mai

Si la condició del while ja és falsa des del principi, el bloc interior no s'executa ni un sol cop:

No és un error, és un comportament vàlid. De vegades és el resultat que vols: si el comptador ja ha superat el límit, no cal repetir res.

Contrasteu-ho amb el cas habitual. Prova de canviar el valor de i per veure quan s'executa el bloc i quan no:

Errors típics

Aquests tres errors apareixen gairebé sempre en els primers programes amb while.

1. Oblidar avançar el comptador — el bucle mai s'atura:

⚠️ No executis aquest codi: bloquejarà la pàgina. Afegeix i = i + 1 dins del bucle per arreglar-lo.

2. Condició que mai es compleix pel valor inicial:

3. Oblidar els dos punts : — el mateix error que amb if:

Exercici

L'ordinador té un número secret fixat a 7. L'usuari ha d'intentar endevinar-lo: el programa llegeix un número i diu Més gran! si el número secret és major que l'intento, Més petit! si és menor, o Encertat! quan l'encerta i acaba.

El programa ha de seguir demanant números fins que l'usuari encertin el 7. Les paraules de la sortida han de ser exactament com s'indica (amb accent i majúscula inicial).

Resum

  • while condició: repeteix el bloc mentre la condició sigui certa; quan és falsa, el programa continua per sota.
  • El patró més habitual és un comptador: inicialitza'l, comprova'l a la condició i avança'l dins del bucle.
  • Un acumulador és una variable que s'actualitza a cada iteració per acumular un resultat (suma, producte, etc.).
  • Si la condició mai és falsa, el bucle és infinit. Pots sortir d'ell amb break.
  • continue salta la resta de la iteració actual i torna al principi del bucle.
  • Si la condició ja és falsa des del principi, el bloc no s'executa ni un cop.