While loop - Learn Python 3 - Snakify

Lesson 6
While loop


1. While loop

while loop repite la secuencia de acciones muchas veces hasta que alguna condición se evalúa como False . La condición se da antes del cuerpo del bucle y se comprueba antes de cada ejecución del cuerpo del bucle. Típicamente, el while se utiliza bucle cuando es imposible para determinar el número exacto de iteraciones del bucle de antemano.

La sintaxis del while de bucle en el caso más simple es el siguiente:

while some condition:
    a block of statements

Python primero verifica la condición. Si es falsa, entonces el bucle se termina y el control se pasa a la siguiente instrucción después de que el while cuerpo del bucle. Si la condición es Verdadero, se ejecuta el cuerpo del bucle y luego se vuelve a verificar la condición. Esto continúa mientras la condición es Verdadera. Una vez que la condición se convierte en False, el ciclo finaliza y el control pasa a la siguiente instrucción después del ciclo.

Por ejemplo, el siguiente fragmento de programa imprime los cuadrados de todos los enteros de 1 a 10. Aquí uno puede reemplazar el ciclo "while" por el ciclo for ... in range(...) :

i = 1
while i <= 10:
    print(i ** 2)
    i += 1

En este ejemplo, la variable i dentro del ciclo itera de 1 a 10. Dicha variable cuyo valor cambia con cada nueva iteración de bucle se denomina contador. Tenga en cuenta que después de ejecutar este fragmento, el valor de la variable i se define y es igual a 11 , porque cuando i == 11 la condición i <= 10 es False por primera vez.

Este es otro ejemplo el uso del while de bucle para determinar el número de dígitos de un número entero n :

n = int(input())
length = 0
while n > 0:
    n //= 10  # esto es equivalente a n = n // 10
    length += 1
print(length)  # 4

En cada iteración cortamos el último dígito del número usando la división de enteros por 10 ( n //= 10 ). En la length variable, contamos cuántas veces lo hicimos.

En Python hay otra manera más fácil de resolver este problema: length = len(str(i)) .

Advertising by Google, may be based on your interests

2. Flujo de control de lazo: else

Se puede escribir una instrucción else: después de un cuerpo de bucle que se ejecuta una vez después del final del bucle:

i = 1
while i <= 10:
    print(i)
    i += 1
else:
    print('Loop ended, i =', i)

A primera vista, esta afirmación no parece tener sentido, porque el cuerpo de declaración else: puede simplemente colocarse después del final del ciclo. La instrucción "else" después de un ciclo solo tiene sentido cuando se usa en combinación con el break instrucción. Si durante la ejecución del bucle, el intérprete de Python encuentra un break , inmediatamente detiene la ejecución del bucle y sale de él. En este caso, la rama else: no se ejecuta. Entonces, break se usa para abortar la ejecución del bucle durante la mitad de cualquier iteración.

Aquí hay un ejemplo de Black Jack: un programa que lee números y los suma hasta que el total sea mayor o igual a 21. La secuencia de entrada finaliza con 0 para que el programa pueda detenerse incluso si la suma total de todos los números menos de 21.

Veamos cómo se comporta en las diferentes entradas.

Versión 1. El ciclo se sale normalmente después de verificar la condición, por lo que se ejecuta la rama "else".

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

Versión 2. El ciclo se cancela por break , por lo que se omite la rama "else".

total_sum = 0
a = int(input())
while a != 0:
    total_sum += a
    if total_sum >= 21:
        print('Total sum is', total_sum)
        break
    a = int(input())
else:
    print('Total sum is less than 21 and is equal to', total_sum, '.')

La rama "Else" también se puede usar con el ciclo "for". Miremos el ejemplo cuando un programa lee 5 enteros pero se detiene justo cuando se cumple el primer entero negativo.

Versión 1. El ciclo se sale normalmente, por lo que se ejecuta la rama "else".

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Versión 2. El ciclo se cancela, por lo que la rama "else" no se ejecuta.

for i in range(5):
    a = int(input())
    if a < 0:
        print('Met a negative number', a)
        break
else:
    print('No negative numbers met')

Advertising by Google, may be based on your interests

3. Flujo de control de lazo: continuar

Otra instrucción utilizada para controlar la ejecución del bucle es continue . Si el intérprete de Python se encuentra, continue en algún lugar en el medio de la iteración del ciclo, omite todas las instrucciones restantes y continúa con la siguiente iteración.

for num in range(2, 10):
    if num % 2 == 0:
        print("Found an even number", num)
        continue
    print("Found a number", num)

Si la break y la continue se colocan dentro de varios bucles anidados, solo afectan a la ejecución de la más interna. Veamos un ejemplo bastante tonto para demostrarlo:

for i in range(3):
    for j in range(5):
        if j > i:
            # rompe solo el para en la línea 2
            break
        print(i, j)

Las instrucciones se break y continue desaconsejadas, si puede implementar su idea sin usarla. Aquí hay un ejemplo típico de un mal uso del break : este código cuenta el número de dígitos en un entero.

n = int(input())
length = 0
while True:
    length += 1
    n //= 10
    if n == 0:
        break
print('Length is', length)

Es más limpio y fácil de leer para reescribir este bucle con una condición de bucle significativa:

n = int(input())
length = 0
while n != 0:
    length += 1
    n //= 10
print('Length is', length)
Advertising by Google, may be based on your interests

4. Asignación múltiple

En Python, es posible que una sola instrucción de asignación cambie el valor de varias variables. Veamos:

a, b = 0, 1

El efecto que se muestra arriba del código se puede escribir como:

a = 0
b = 1

La diferencia entre las dos versiones es que la asignación múltiple cambia los valores de dos variables simultáneamente.

La asignación múltiple es útil cuando necesita intercambiar los valores de dos variables. En lenguajes de programación antiguos sin el soporte de asignaciones múltiples, esto se puede hacer usando la variable auxiliar:

a = 1
b = 2
tmp = a
a = b
b = tmp
print(a, b)
# 2 1

En Python, el mismo intercambio se puede escribir en una línea:

a = 1
b = 2
a, b = b, a
print(a, b)
# 2 1

El lado izquierdo de "=" debe tener una lista de nombres de variables separados por comas. El lado derecho puede ser cualquier expresión, separada por comas. Las listas de los lados izquierdo y derecho deben tener la misma longitud.

Advertising by Google, may be based on your interests