Saltar a contenido

Bucles

En los capítulos anteriores hemos visto como introducir una sentencia condicional:

n = 5
if n>0:
    print(n)

Un bucle consiste en ejecutar el bloque condicional de forma repetida, mientras se cumpla la condición. Hay que cambiar la palabra if por while:

CuentaAtras.py
print("Cuenta atrás:")
n = 5
while n:
    print(n)
    n -= 1

Al ejecutarse, muestra:

Cuenta atrás:
5
4
3
2
1

A tener en cuenta:

  • Estamos usando una variable "de control" para verificar cuando debe detenerse el bucle.

  • Podríamos escribir:

    while n>0 :
    

    pero nos estamos aprovechando de que 0 equivale a False

  • ¡Importante! No olvidar modificar la variable de control en cada iteración del bucle:

    n -= 1
    

    Sin ello, el bucle se ejecutaría indefinidamente.

Sentencia break

Una sentencia break fuerza que se abandone el bucle y se vaya a las sentencias que hay a continuación:

Contraseña.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
contraseña = "Hola"
intentos = 3

while intentos > 0:
    texto = input("Introduzca contraseña: ")

    if texto == contraseña:
        print("contraseña correcta")
        break
    else:
        print("contraseña incorrecta\n")
        intentos -= 1

if intentos > 0:
    print("bienvenido")

En el ejemplo, si el usuario adivina la contraseña, se deja de preguntarle y se abandona el bucle. Seguidamente, si la variable intentos tiene un valor mayor que cero, significa que hemos salido con break.

Bucles infinitos

En el ejemplo anterior, al usuario le damos tres oportunidades para adivinar la contraseña. Podríamos darle un número indefinido de oportunidades mediante:

contraseña = "Hola"

while True:
    texto = input("Introduzca contraseña (en blanco para abandonar): ")

    if len(texto)==0:
        break

    elif texto == contraseña:
        print("contraseña correcta")
        break

    else:
        print("contraseña incorrecta\n")

if len(texto) > 0:
    print("bienvenido")

Cuando en la cabecera de un bucle escribimos:

while True :

la expresión condicional es directamente True, y el bucle se ejecutará indefinidamente. Necesitamos alguna sentencia break para salir.

Sentencia continue

Una sentencia continue es similar a break:

  • ambas ignoran el resto de sentencias que quedan dentro del bucle:

    while condición:
        sentencias que se ejecutan
        break
        sentencias que se ignoran
    
  • break abandona las iteraciones, mientras que continue fuerza una nueva iteración.

Un ejemplo:

Impares.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# mostrar números impares

limite = 10
n=0
while True:
    n += 1
    if n>limite:
        break
    elif n%2==0:     ## Si es divisible por 2
        continue
    else:
        print(n)

Al ejecutarse, muestra:

1
3
5
7
9

Recordemos que el operador % devuelve el resto de la división. Si dividimos un número entre 2 y el resto es cero, el número es par.

Sentencias condicionales en el shell

Cuando introducimos en el shell una sentencia condicional o un bucle, formados por un bloque de sentencias sangrado, hasta no completar el bloque, se sigue mostrando el prompt secundario. Al finalizar, se ejecuta todo el bloque:

>>> n=5
... while n:
...     print(n)
...     n -= 1
... 
...     
    5
    4
    3
    2
    1

Para indicar el final de la sangría, en el shell necesitamos añadir una línea en blanco. En un programa, estas son decorativas.