Iteracions: while

Les iteracions o bucles ens permeten que un fragment de codi s’execute de manera repetitiva.

Mitjançant l’estructura while, que podem traduir com «mentre», podem executar un fragment de codi mentre s’acomplisca una determinada condició. Observa el següent exemple:

1comptador = 10
2while comptador > 0:
3    print('Ara el comptador val', comptador)
4    comptador = comptador - 1
5print('Adeu!')

En aquest exemple, comencem amb la variable comptador amb un valor 10. En cada iteració, el valor de aquesta variable s’imprimeix per pantalla, i després es redueix en una unitat. El bucle es repeteix fins que el comptador val cero, moment en que es deixa de complir la condició del bucle.

Si en algun moment ens interessa finalitzar el bucle ho podem fer amb l’ordre break. Observa el següent exemple:

1while True:
2    entrada = input()
3    if entrada == '0':
4        print('Fi del bucle.')
5        break
6    else:
7        print('Has escrit el següent:', entrada)

En aquest programa utilitzem input() per a demanar a l’usuari que introdueix-ca alguna cosa amb el teclat. La variable entrada emmagatzemarà qualsevol cosa que l’usuari escriga fins prémer la tecal de retorn. Amb while True aconseguim un bucle infinit, és a dir, un bucle que, en principi, no deixarà mai d’executar-se. A continuació hi ha una estructura condicional: si el valor de la variable entrada és 0 es mostra un missatge i es surt del bucle, sinó es mostra per pantalla el valor de la variable entrada i es torna a executar el bucle.

Altra ordre que podem utilitzar és continue. El que aconseguim amb ella no és sortir completament del bucle, sinó donar per finalitzada la iteració actual. Observa el següent exemple:

1entrada = ''
2while entrada != 0:
3    entrada = int(input())
4    if entrada % 2 == 0:
5        continue
6    print('El nombre és senar.')

Aquest programa demana nombres a l’usuari fins que aquest introdueix un 0, moment en que acaba el bucle. Si el nombre introduït és senar es mostra un missatge, mentre que si és parell el programa bota directament a la següent iteració del bucle.

Observa que input() retorna l’entrada de l’usuari en forma de cadenes de text, així que per poder utilitzar-los com variables de tipus sencer utilitzem int(input()). Aquesta funció retorna una variable de tipus int amb el valor escrit per l’usuari.

Sortir d’un bucle

Hi ha diferents opcions per començar un bucle while i sortir d’ell. Una és la creació d’un comptador, però açò implica que sabem quantes vegades es produeix la repetició i, en eixe cas, és més fàcil utilitzar el bucle for que estudiarem a continuació. En els exemples següents pots veure tres maneres diferents d’utilitzar els bucles while, amb algunes anotacions sobre la seua conveniència.

  • Creant una variable buida.

    lletra = ''
    while lletra != 'x':
        lletra = input('Escriu \'x\' per a sortir.')
        print('Has escrit la lletra', lletra)
    print('Ja hem sortit del bucle!')
    

    En aquest mètode assignem un valor inicial arbitrari a la variable i després demanem el valor a l’usuari quan estem dins de la iteració.

  • Demanant el valor abans del bucle i també al seu interior:

    lletra = input('Escriu \'x\' per a sortir.')
    while lletra != 'x':
        print('Has escrit la lletra', lletra)
        lletra = input('Escriu \'x\' per a sortir.')
    print('Ja hem sortit del bucle!')
    

    En aquest mètode demanem a l’usuari que introdueix-ca un valor abans d’entrar en la iteració. També demanem un nou valor al acabar cada iteració i així comencem la següent amb un nou valor.

  • Utilitzant un bucle infinit i break.

    while True:
        lletra = input('Escriu \'x\' per a sortir.')
        if lletra == 'x':
            break
    print('Ja hem sortit del bucle!')
    

    Aquesta solució utilitza l’ordre break per acabar la iteració. És llegible, evita les repeticions innecessàries i també l’assignació de valors arbitraris a una variable.

  • Utilitzant una variable booleana que indique si cal o no treancar el bucle.

    sortirDelBucle = False
    while not sortirDelBucle:
        lletra = input('Escriu \'x\' per a sortir.')
        if lletra == 'x':
            sortirDelBucle = True
    print('Ja hem sortit del bucle!')
    

    Aquesta solució també és llegible i no repetitiva. També és una solució vàlida al problema de sortir del bucle.