Repeteix
Escriure la mateixa ordre deu vegades és tediós i propens a errors. En aquest capítol descobrirem for i in range(N):, la instrucció que permet dir-li a en Karel «fes això N vegades» amb una sola línia.
Repetir és avorrit (per als humans)
Fins ara hem escrit una ordre per línia. Funciona, però imagina que en Karel ha de moure's dotze caselles: hauries d'escriure move() dotze vegades seguides. Si després t'adones que eren onze i no dotze, has de comptar i esborrar.
Els ordinadors no s'avorreixen de repetir. Som nosaltres qui hem de trobar una manera d'expressar la repetició de forma clara i curta.
Repetir N vegades: for i in range(N):
for i in range(N): li diu a en Karel que executi les ordres del bloc de sota exactament N vegades. Les ordres del bloc han d'anar indentades (desplaçades quatre espais cap a la dreta). Això és com li dius a en Karel on comença i on acaba el que s'ha de repetir.
Compara les dues maneres de fer el mateix:
# Sense for (5 línies): # Amb for (2 línies):
move() for i in range(5):
move() move()
move()
move()
move()
El resultat és exactament el mateix. Però ara, si vols canviar el nombre de passos, només canvies el 5.
Observa com en Karel fa cinc move() amb una sola instrucció for:
Cinc passos, dues línies de codi. Si el món hagués tingut quinze columnes, hauríem escrit range(15).
La indentació marca el que es repeteix
La indentació (els espais del davant) no és decoració: és la manera com el programa sap quines ordres formen part del bucle i quines no. Tot el que va indentat sota el for es repeteix. El que torna a l'esquerra ja queda fora.
for i in range(3):
move() # ← es repeteix 3 vegades
turn_left() # ← també es repeteix 3 vegades
move() # ← s'executa UNA SOLA VEGADA, després del bucle
Si la indentació no és consistent, el programa no funcionarà com esperes.
En aquest exemple, en Karel fa tres passos cap a l'Est, gira a l'esquerra i fa tres passos cap al Nord. El turn_left() queda fora del bucle, entre els dos for:
Dos bucles for separats per un turn_left(). En Karel ha fet una cantonada. Compte: el turn_left() no va indentat, per tant no forma part de cap for.
Exercici
for i un turn_left().
Pista: necessites moure't 4 caselles cap a l'Est, girar cap al Nord i moure't 3 caselles cap amunt. Pots fer-ho amb menys de 6 línies de codi.