Bucles (while)

flor

while condicion: Los bucles while, se ejecutan mientras se cumpla la condición que contienen. Si la condición no se cumple la primera vez, no se ejecutaría ni una sola vez. Si utilizamos while == algo atención al doble signo igual.

tabla=1
while tabla<8:
    print (f"{tabla} x 5 = {tabla * 5}")
    tabla+=1
Resultado: 

1 x 5 = 5
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
5 x 5 = 25
6 x 5 = 30
7 x 5 = 35

while / break Para salir del bucle, también podemos utilizar la instrucción break.

suma=0
while True:
    try:
        numero=float(input("Introduzca un número. Si desea salir, introduzca 0: "))
        if numero==0:
            break
        else:
            suma=suma+numero
    except ValueError:
        print("Por favor, separe los decimales con un punto.")
    print(f"Suma acumulada: {suma}")
print("Ha introducido el 0. La suma ha finalizado.")
Posible resultado:

Introduzca un número. Si desea salir, introduzca 0: 2348,3
Por favor, separe los decimales con un punto.
Suma acumulada: 0
Introduzca un número. Si desea salir, introduzca 0: 2348.3
Suma acumulada: 2348.3
Introduzca un número. Si desea salir, introduzca 0: 8762.1
Suma acumulada: 11110.400000000001
Introduzca un número. Si desea salir, introduzca 0: 421.2
Suma acumulada: 11531.600000000002
Introduzca un número. Si desea salir, introduzca 0: 0
Ha introducido el 0. La suma ha finalizado.

Este bucle se ejecuta indefinidamente hasta que introduzcamos el 0 como valor. Comprobamos si es 0 para salir en ese mismo momento del bucle.

while / continue Nos puede interesar dentro de un bucle while pasar por alto lasinstrucciones que siguen dentro del bucle, para regresar de nuevo al principio del
bucle sin salirnos del mismo.

suma=0 

while True: 
    try: 
        numero=float(input("Diga Nº distinto a 0 y menor a 1000: ")) 
        if numero==0: 
            break 
        elif numero>999: 
            continue 
        else: 
            suma=suma+numero  
    except ValueError: 
        print("Por favor, separe los decimales con un punto.") 
    print(f"Suma acumulada: {suma}") 
    
print("Ha introducido el 0. La suma ha finalizado.") 

Hemos incorporado al programa anterior una sentencia que comprueba si el número es mayor que 999. Si lo es, lo ignora y vuelve al preguntar otro número. 

Posible resultado:

Diga Nº distinto a 0 y menor a 1000: 43
Suma acumulada: 43.0
Diga Nº distinto a 0 y menor a 1000: 0.3
Suma acumulada: 43.3
Diga Nº distinto a 0 y menor a 1000: 1002
Diga Nº distinto a 0 y menor a 1000: 334323
Diga Nº distinto a 0 y menor a 1000: 433
Suma acumulada: 476.3
Diga Nº distinto a 0 y menor a 1000: 987
Suma acumulada: 1463.3
Diga Nº distinto a 0 y menor a 1000: 0
Ha introducido el 0. La suma ha finalizado.

while / else También con while, podemos incorporar una sentencia else que se ejecute solo si el bucle finaliza con normalidad, o incluso si el bucle no se llega a ejecutar ni una sola vez. En caso de que el bucle finalice debido a un break, esta sentencia else no se ejecutaría. 

tabla=9 

while tabla<8: 
    print (f"{tabla} x 5 = {tabla * 5}") 
    tabla+=1 
else: 
    print("Tabla era igual o mayor que 8.")

En este caso no se ejecuta while, pero sí que se ejecuta la sentencia else. 

Resultado:
Tabla era igual o mayor que 8.
tabla=1 

while tabla<8: 
    print (f"{tabla} x 5 = {tabla * 5}") 
    tabla+=1 
else: 
    print("El bucle while se ha ejecutado.") 

Aquí se ejecuta la sentencia while y finaliza con normalidad cuando se deja de cumplir la condición. Por lo tanto, también se ejecutaría la sentencia else. 

Resultado:
1 x 5 = 5
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
5 x 5 = 25
6 x 5 = 30
7 x 5 = 35
tabla=1 

while tabla<8: 
    print (f"{tabla} x 5 = {tabla * 5}") 
    tabla+=1 
    if tabla==5:
        break
else: 
    print("Si ocurre break, esta instrucción no se ejecuta.")

print("Gracias.") 

Aquí no se llegará a ejecutar el bloque else, porque el bucle while se verá interrumpido con break cuando tabla==5. 

Resultado:
1 x 5 = 5
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
Gracias.

while / lista Una particular forma de uso while, es un bucle que se ejecuta mientras la lista que le acompaña tenga algún elemento:

lista_invitados=["Juan", "Pedro", "Miguel", "Eduardo", "Javier"]
lista_recibidos=[]
while lista_invitados:
    print(f"Bienvenido {lista_invitados[0]}. Puedes pasar.")
    lista_recibidos.append(lista_invitados[0])
    del lista_invitados[0]
Resultado:

Bienvenido Juan. Puedes pasar.
Bienvenido Pedro. Puedes pasar.
Bienvenido Miguel. Puedes pasar.
Bienvenido Eduardo. Puedes pasar.
Bienvenido Javier. Puedes pasar.

El bucle while anterior se ejecuta mientras lista_invitados contenga algún elemento. Según se van recibiendo los invitados, se borran de esta lista y pasan a lista_recibidos. Cuando la primera lista se queda sin elementos el ciclo se detiene.

while elemento in lista También podemos usar un bucle while para eliminar (o modificar) todas las apariciones
de elemento en la lista indicada.

lista_invitados=["Juan", "Pedro", "Miguel", "Eduardo", "Pedro",
"Javier", "Pedro"]

while "Pedro" in lista_invitados:
    lista_invitados.remove("Pedro")
    
print (lista_invitados)
Resultado: ['Juan', 'Miguel', 'Eduardo', 'Javier']

Tal y como vemos, se han eliminado todas las apariciones de “Pedro” en la lista_invitados.

Iniciocomandos Pythonbloques de código
comentar códigoprint ( )input ( )
captura de erroresCadenasDatos Numéricos
Módulo randomMódulo statisticsDatos Fecha/hora
ConstantesBucles forBucles while
Bloque ifTuplasListas.
match caseConjuntosDiccionarios
FuncionesClasesArchivos
Entorno gráfico TkinterVentanasWidgets básicos