Capítol 5

Repetir amb while

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

Què és una iteració?

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? Una iteració (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:

La iteració 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 d'teració s'anomena sentinella: el valor "sí", en aquest cas, actua com a senyal de parada.

Iteracions infinites i break

Si la condició del while mai es torna falsa, la iteració no s'atura mai. Això s'anomena iteració infinita i normalment és un error. Però en alguns casos pot ser convenient, si s'usa amb break:

while True: mai s'atura 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 de la iteració, el que fa és tornar a començar-la:

Iteracions que no s'executen mai

Si la condició del while ja és falsa des del principi, el bloc interior no s'executa ni una sola vegada:

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. Proveu de canviar el valor de i per veure quan s'executa el bloc i quan no:

Errors típics

Aquests tres errors apareixen sovint quan es fa servir while.

1. Oblidar avançar el comptador — conseqüència: la iteració mai acaba.

⚠️ No executis aquest codi: bloquejarà la pàgina. Afegeix i = i + 1 a l'interior de la iteració, per arreglar-ho.

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

3. Oblidar els dos punts :

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, la iteració és infinita. Pots sortir d'ella 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.