La instrucció for i in range
Si saps quantes vegades hauràs de repetir una cosa, la instrucciófor acostuma a ser millor que while.
for i in range(n)
Al capítol anterior vam fer servir while per comptar fins a 5. Ho pots aconseguir escrivint menys codi, usant for. Fixa't com s'escriu:
Llegeix-ho: «per cada i dins de range(5), imprimeix i». range(5) genera la seqüència de nombres 0, 1, 2, 3, 4 —cinc valors que comencen a 0 i arriben fins a 4 (sense incloure el 5).
Fixa't que el valor 5 no apareix mai a la sortida.
La instrucció for inicialitza i=0, augmenta en una unitat i s'aturar quan cal.
És a dir, no cal escriure i = 0 ni i = i + 1.
Si vols que la teva numeració comencin per 1 en comptes de 0, una opció és sumar 1 dintre de la iteració. Aquest exemple donarà com a resultat els nombres 1, 2, 3, 4, 5
range(inici, fi)
range(inici, fi, pas)
range() accepta dos arguments: inici, fi (sense incloure). Amb aquestes dos arguments, triem exactament on comença i on acaba la nostra repetició.
Si afegim un tercer argument a range, podem controlar quant avança el comptador i a cada iteració.
Per exemple, si volem fer una llista de nombres parells, ens convé saltar de dos en dos:
El pas també pot ser negatiu, i això vol dir comptar enrere. En aquest cas el nombre d'inici ha de ser més gran que el nombre de final:
La taula de multiplicar
Una instrucció for pot contenir, a dins, una altra instrucció for. La interior s'executa sencera per a cada pas de l'exterior. Això s'anomena iteracions enniuades (en anglès, nested loops).
L'exemple clàssic és la taula de multiplicar:
És obligatori fer servir la indentació correctament: la instrucció print té el doble d'espais perquè pertany a la iteració interior.
Modifica el codi següent, amb l'objectiu de generar la taula completa de l'1 al 10:
Quan fem servir la instrucció for en lloc de while?
- Fes servir la instrucció
forquan ja saps quantes vegades vols repetir, o bé quan recorres una seqüència coneguda de valors. - Fes servir la instrucció
whilequan el nombre de repeticions depèn d'una condició que pot canviar durant l'execució.
Compara aquests dos codis, que fan exactament el mateix:
Errors de sintaxi o d'execució
Aquests són els errors més habituals en programes que contenen les instruccions for
1. Límits: range(n) va de 0 a n-1, i range(x , y) va de x a y-1:
2. La variable de control no es pot modificar: la instrucció for sobreescriu el valor de i a cada iteració; per tant, canviar-la dins de la iteració no té l'efecte que esperaries.
Per saltar una iteració usa continue, igual que amb while:
3. Has d'escriure for i in range(5) afegint els dos punts al final, d'aquesta manera for i in range(5):
Exercici
*) d'alçada N. La primera línia té 1 asterisc, la segona en té 2, i així fins a la fila N.
Per exemple, amb N = 4 la sortida ha de ser:
*
**
***
****
Resum
for i in range(n):repeteix el blocnvegades, ambiprenent els valors0, 1, …, n-1.range(x, y)genera valors des dexfins ay-1.range(x, y, pas)avança depasenpas; el pas pot ser negatiu i així podem comptar enrere.- Les iteracions enniuades posen un
fordins d'un altre: el bucle interior s'executa complet per cada iteració de l'exterior. - Usa
forquan saps quantes repeticions vols; usawhilequan el nombre de repeticions depen d'un valor que pot variar. - No modifiquis la variable de control (
i) dins de la instrucciófor; usacontinueper saltar iteracions.