Els ordinadors són molt bons fent el mateix una i una altra vegada. Sempre són constants i mai s'avorreixen ni es cansen. Per sort, per aconseguir que un ordinador faci el mateix una i una altra vegada, no cal que escriguis el mateix codi repetidament. Podem dir-li directament. P.ex:
repeteix 100 vegades:
fes una passa endavant amb la cama dreta
fes una passa endavant amb la cama esquerra
Quan el programa arribi a l'última línia de codi del bucle, tornarà a la part superior i tornarà a començar, tantes vegades com li hagis dit. Executar el mateix codi una vegada i una altra es coneix com a bucle o iteració.
No us n'heu adonat, però en aquest curs ja hem utilitzat un iterable: els strings o cadenes de text. Conceptualment, una cadena és una llista de caràcters en un ordre: per exemple, "hola" és una llista de 4 caràcters en l'ordre "h" "o" "l" "a".
Obriu el vostre editor i creeu una variable de text anomenada "frase" i assigneu-li el valor "hola":
Podeu accedir als elements individuals d'una llista mitjançant índexs, essent un índex una posició en una llista.
Atenció! La majoria de llenguatges de programació comencen a contar des de zero (0) i no des d'1 com acostumem a fer els humans.
Podeu accedir als elements d'una llista utilitzant claudàtors [] després del nom de la variable i afegint l'índex (posició) de l'element que voleu obtenir:
Per exemple, per obtenir el primer element del text que tenim emmagatzemat a la variable frase, escriurem:
Repetiu el pas anterior per obtenir el tercer element, la "l", del text "hola".
Els índexs no han de ser sempre nombres positius. També podeu utilitzar índexs negatius per obtenir elements del final de la llista. Per exemple, l'últim element d'una llista té l'índex -1.
En quins casos creus que pot ser útil utilitzar els índexs negatius?
A més d'obtenir elements individuals d'un iterable, també podeu utilitzar índexs per obtenir "parts" d'una llista, com per exemple els tres primers caràcters. Per obtenir una porció, heu de proporcionar dos índexs (l'inici i el final de la porció que voleu), separats per dos punts : entre claudàtors:
Atenció! L'índex_final d'una porció indica fins a on s'ha d'iterar, però no inclou l'element.
Per exemple, per obtenir els tres primers caràcters del text "hola" que tenim emmagatzemat a la variable frase, escriurem:
Fins ara només hem treballat amb un tipus de llistes, les cadenes de caràcters (strings), però podem crear llistes de qualsevol tipus de dades (enters, booleans, decimals, strings, etc.). Per fer-ho crearem una variable de tipus llista de la mateixa manera que qualsevol altra variable: donant-li un nom i assignant-li un valor. Per a una llista, el valor serà una seqüència d'elements que es posaran a la llista, escrits entre claudàtors [] i separats per comes:
Si voleu crear una llista buida, a la qual podeu afegir elements més endavant, podeu utilitzar claudàtors buits: [].
Obre el teu editor i crea una llista de noms, p.ex:
Utilitzant un índex, tal com heu fet abans amb la cadena "hola", obteniu el segon nom (índex 1) de la llista.
Una característica de les llistes a Python és que es poden canviar després d'haver-se creat: podeu afegir nous elements al final de la llista, inserir-los al mig o eliminar-los completament mitjançant les tres funcions append(), insert() i remove(). Aquestes funcions només són específiques per treballar amb llistes i s'uneixen amb un punt al nom de la llista a la qual s'apliquen, com en els exemples següents. Tècnicament, les funcions d'aquest tipus s'anomenen "mètodes".
Afegeix un nom nou al final de la llista de noms i comproveu que s'ha afegit correctament:
A continuació, fem servir insert() per posar un nom nou al mig de la llista, utilitzant també l'índex d'on inserir el nom nou, i comprovem que la llista s'ha actualitzat:
Com a últim pas, eliminem el nom "Joan" de la llista:
En aquest apartat utilitzarem la iteració i les llistes per crear un programa que crearà i mostrarà una llista de la compra.
Començarem amb el codi per mostrar els articles de la compra. El primer pas és crear un programa que recorrerà tots els elements d'una llista i els imprimirà a la pantalla.
Creeu una variable de llista per a les vostres compres i ompliu-la amb alguns articles.
Per recórrer cadascun dels elements de la llista, utilitzareu un bucle for. Els bucles for existeixen a la majoria dels llenguatges de programació i el seu propòsit és permetre que el codi s'executi un nombre determinat de vegades. La sintaxi d'un bucle for en Python té aquest aspecte:
Utilitzeu un bucle for per imprimir cadascun dels elements de la vostra llista de la compra. Alerta amb els sagnats!, funcionen igual que amb els condicionals (if), el codi que estigui sagnat sota el for s'executa com a part d'aquest bucle.
Veiem que es crea una variable temporal, en aquest cas li hem dit "producte" però li podem posar el nom que vulguem, que s'utilitza per iterar entre els diferents elements de la llista.
Una tècnica de programació molt útil és comptar a mesura que s'executa el bucle. D'aquesta manera, sabrem quantes vegades s'ha executat. En el nostre programa de la llista de la compra ens pot servir, per exemple, per comptar quants elements tenim a la llista. Per fer-ho haurem de crear una variable que vagi comptant el total acumulat del nombre de productes.
Creeu una variable a la part superior del vostre programa i poseu-la a zero. Li podeu posar el nom que vulgueu. P.ex:
A fins del bucle for (i, per tant, amb sagnat) sumeu 1 a la variable comptador.
Què fa aquesta línia de codi? Recordeu que = és una assignació i, per tant, demana a l'ordinador que assigni un nou valor a la variable anomenada count. Quan l'ordinador executa aquesta línia de codi, ho fa en l'ordre següent:
Primer calcula quant val count + 1
A continuació actualitza el valor de count al resultat de l'operació anterior. Ara count val el valor d'abans més 1.
Al final del vostre programa, no sagnat sota el for, imprimiu el valor de count. El programa sencer hauria de ser semblant a això:
Comptar és una tècnica molt utilitzada i realment útil, però en el cas de les llistes hi ha una manera més fàcil de saber quants elements contenen, utilitzant la funció len(), abreviatura de "longitud":
Poder executar el mateix codi diverses vegades pot ser molt útil. Suposem que voleu capturar onze noms per a un equip de futbol o les longituds dels costats d'un triangle. Podeu fer-ho ajustant la manera d'utilitzar el bucle for.
Per fer alguna cosa cinc vegades, podem crear un bucle for per a tots els números entre 0 i 4 creant una llista d'aquests números, per exemple:
Però això és molt restrictiu. Què passa si volem fer alguna cosa un milió de vegades? No és gaire factible crear una llista amb cada nombre fins a 1.000.000. Per solucionar aquest problema, Python té una funció anomenada range() que us crearà una llista de números.
Amb l'ús de range() podem simplificar el programa d'exemple anterior:
Nota: la funció range(5) crearà una llista de cinc números del 0 al 4, no sis nombres del 0 al 5.
Ara utilitzarem un bucle for amb range() per crear un programa que farà un bucle un nombre determinat de vegades, demanant a l'usuari un article per comprar i els anirà afegint a una llista de la compra.
Creeu una variable de llista buida anomenada llista_compra i,
Afegiu un bucle for amb range() per demanar cinc vegades a l'usuari "què s'ha de comprar?"
Finalment, afegim cadascun dels productes que introdueix l'usuari a la llista i mostrem la llista final. El programa sencer hauria de ser semblant a:
En cada etapa del bucle, la variable numero_producte contindrà el nombre de vegades que s'ha executat el bucle for, començant a 0 i pujant fins a 4. Fem-ho més evident.
Canvieu la pregunta a l'usuari per tal que aquesta inclogui el numero_producte. Per exemple:
Però, què passa si l'usuari vol introduir més o menys articles? En el següent pas canviaràs el programa perquè comenci preguntant a l'usuari quants articles necessita, i utilitza aquest número en el bucle for.
Afegiu a la part superior del vostre programa un input() per obtenir el nombre d'articles a comprar. Recordeu que l'entrada de l'usuari serà del tipus text i, per tant, l'hem de convertir a un nombre enter:
Finalment, canvieu el valor de range() pel valor que ha introduït l'usuari. El programa final hauria de ser semblant a:
Fins ara hem après a fer que els ordinadors facin el mateix diverses vegades mitjançant un bucle for. Però, què passa si, quan inicieu el vostre bucle, no sabeu quantes vegades l'ordinador haurà de fer-ho? O què passa si vols que una cosa es repeteixi per sempre? En aquests casos podeu utilitzar el bucle condicional while.
A l'inici del bucle, l'ordinador avaluarà la condició (en aquest cas que la música soni), si és així (cert), executarà el codi de dins del bucle. Quan s'acaba d'executar el codi del bucle tornarà a avaluar la condició; si encara és cert, tornarà a executar el codi, i si no ho és, sortirà del bucle i continuarà executant la resta del programa.
Si la música no para mai el bucle tampoc. Què creus que passarà si la música deixa de sonar quan ha fet el gir a la dreta, però encara no ha fet el gir a l'esquerra?
La sintaxi d'un bucle while a Python és així:
La sintaxi és molt semblant al if , entre el while i els : hi va la condició que s'ha d'avaluar, i el codi sagnat a sota és el codi que s'executa com a part del bucle.
A continuació, crearem un petit programa on utilitzem un bucle while per demanar contínuament a l'usuari que "endevini el meu nom" fins que ho encerta.
Fes servir input() per demanar a l'usuari que introdueixi un nom i creeu un bucle que s'executi sempre que l'usuari no encerti el vostre nom. Si l'usuari no encerta el nom li heu de tornar a demanar:
Finalment, al final del vostre programa i no sagnat sota el bucle while, feu saber a l'usuari que ho ha fet correctament.
Executeu el vostre programa i proveu els escenaris següents:
a) Endevina el nom la primera vegada
b) Erreu el nom una vegada
c) Erreu el nom moltes vegades
Enteneu la lògica de què passa en cadascun dels casos?
Amb els bucles while, també podem aconseguir que un ordinador continuï fent la mateixa tasca per sempre; això es coneix com un bucle infinit.
Creeu un programa nou, afegiu aquest codi i executeu-lo:
Aquest programa és infinit, s'executarà sempre.