4. Control de Flujo: Ciclos-Iteraciones

Contenidos

  1. Ciclos
  2. La sentencia while
  3. La sentencia for
  4. El tipo range()
  5. Contadores y acumuladores

4.1 Ciclos

Los computadores suelen usarse para automatizar tareas repetitivas. El hecho de repetir tareas idénticas o similar sin cometer errores es una características que los computadores realizan muy bien, pero no así los humanos.

Es natural, por lo tanto, en los lenguajes de programación, encontrar instrucciones que nos permitan ejecutar una o más instrucciones repetidamente. La repetición de un conjunto de instrucciones se conoce como iteración. En Python podemos expresar iteraciones usando las instrucciones while y for.

4.2 La sentencia while

La instrucción while permite especificar un bloque de código que se repetira contínuamente mientras se cumpla una condición. Ejecutemos el siguiente ejemplo:

Ejemplo 4.1

En este ejemplo mostraremos el uso básico del while. Hay que hacer un programa que pida un número al usuario que sea mayor que 0 para imprimir todos los números entre 0 y ese número.

Este programa solicita un entero positivo al usuario y utiliza una instrucción while para definir un bloque de código, que comprende las líneas 5 y 6 que se repetirá mientras se cumpla la condición escrita a continuación de while. En este caso, la condición es contador <= numero, donde :code:numero` es el número ingresado por el usuario, y contador es una variable inicializada en 0.

Al momento de ejecutar el programa, si el usuario ingresó un número positivo, la condición contador <= numero se cumplirá, ya que contador es 0, y numero es un valor mayor a 0. Luego de ejecutar las líneas incluida dentro del bloque de while, la condición se vuelve a revisar. En caso que la condición se cumpla, las instrucciones del bloque de while se volverán a ejecutar.

Esto nos dice que para que el ciclo while termine, es necesario que la condición deje de cumplirse en algún momento; de lo contrario el programa entrar en un ciclo que no terminará nunca. Ya que solo estamos ejecutando las instrucciones que se encuentran dentro el bloque while, es necesario que nos aseguremos que éstas instrucciones harán que la condición deje de cumplirse en algún momento.

Volvamos a ver el ejemplo. La línea 6 es clve porque la instrucción contador = contador + 1 hace que el valor de contador se incremente. Si ejecutamos esto suficientes veces, ocurrirá que contador será mayor a numero, que es una variable cuyo valor no cambia, y por lo tanto la condición contador <= numero dejará de cumplirse.

Este ejemplo usa esta idea para escribir en pantalla todos los números desde 0, que es el valor inicial de contador, hasta el número ingresado por el usuario.

4.3 La sentencia for

También podemos ejecutar iteraciones utilizando la instrucción for. La instrucción for nos ayuda a definir la cantidad de veces que se va a ejecutar el bloque de instrucciones.

Veamos el siguiente ejemplo:

Ejemplo 4.2.1

En este ejemplo mostraremos el uso básico del for. Haga un programa que reciba un número mayor que 0 e imprima el valor de la suma de todos los naturales entre 1 y el número incluyendolos.

Este programa solicita un entero al usuario y calcula la suma de todos los enteros desde 0 hasta el antecesor del número ingresado.

La instrucción for permite especificar una variable que tomará un valor diferente en cada iteración. En este ejemplo, ese rol lo tiene la variable :code`i`. Luego, después de la instrucción in, se especifica el conjunto de valores que tomará la variable i. En cada iteración, i tomará un valor del conjunto especificado por la función range(0, numero). Esta función genera un conjunto ordenado de valores entero que empiezan en 0 y terminan en numero-1.

Luego escribimos el bloque de instrucciones a repetir en cada iteración del for. En este caso es solamente una instrucción: la línea 4, que utiliza la variable suma, inicializada en 0 para calcular la suma de los números. Dado que en cada iteración, la variable i toma un valor distinto, entonces en cada iteración se agrega el siguiente número entero a la variable suma.

Por ejemplo, si ingresamos el valor 5, la instrucción for le asignará a la variable i el valor 0 en la primera iteración; el valor 1 en la segunda iteración; el valor 2 en la tercera iteración, y seguirá así hasta llegar a valor 4. Siguiendo el mismo razonamiento, en la primera iteración se agregará en suma el valor 0; en la segunda iteración el valor 1; en la tercera iteración el valor 2; en la cuarta iteración el valor 3; y en la quinta y última iteración, el valor 4. De esta manera el valor almancenado en suma será equivalente al cálculo de la expresión 0 + 1 + 2 + 3 + 4.

Una instrucción for puede escribirse de manera equivalente como una instrucción while. Podemos convertir el ejemplo anterior a una instrucción while de la siguiente manera:

Ejemplo 4.2.2

En este ejemplo haremos el mismo ejemplo anterior pero utilizando un while.

Podemos ver que el código tiene 2 líneas más, ya que ahora utilizamos una variable adicional, count, de manera equivalente a la variable i para determinar el valor a sumar en cada iteración.

De manera general, utilizaremos for cuando sepamos exactamente la cantidad de iteraciones que vamos a ejecutar. En el siguiente ejemplo, utilizamos iteraciones para determinar si un número es primo. Si bien podíamos escribirlo utilizando while, ya que sabemos exactamente qué divisores vamos a utilizar (desde 2 hasta numero-1), el uso de for resulta de manera natural en el siguiente código:

Ejemplo 4.3

En este ejemplo mostraremos el uso básico del for. Hay que hacer un programa que pida un número al usuario y compruebe si es primo. Recuerda que un número primo es solamente divisible por 1 y por si mismo.

4.4 Contadores y acumuladores

Dos de los usos más comunes para la iteración son la acumulación y el conteo de números. Hemos visto un ejemplo de acumulación con el Ejemplo 2. Este ejemplo utiliza la variable suma como acumulador para calcular la suma de los enteros desde 0 hasta numero-1.

De manera similar, podemos usar iteraciones para contar valores. Miremos el siguiente ejemplo:

Ejemplo 4.4

En este ejemplo usaremos un while. Haz un programa que reciba un número mayor que 10 e imprima todos los números pares entre 0 y el número.

Este ejemplo utiliza un ciclo while para contar cuántos números pares hay que sean menores al número ingreso por el usuario. En este caso usamos la variable count no como un acumulador, sino como un contador que se incremente en un 1 cada vez que se cumpla la condición.

Otro uso común para while es la validación de input. Supongamos que le pedimos al usuario ingresar valores positivos, pero el usuario erróneamente ingresa valores negativos. Podemos hacer que el programa no avance hasta el usuario ingresa datos de la manera que se lo pedimos. Esto se llama validación de datos, y se puede ver en el siguiente ejemplo:

Ejemplo 4.5

En este ejemplo usaremos un while para validar input. Este programa debe pedir dos números a y b, para luego sumarlos e imprimir el resultado. Sin embargo los números deben ser mayores que 0. El programa debe pedir los números hasta que el usuario los ingrese correctamente.

4.5 El tipo range()

La función range genera un conjunto de valores ordenados que pueden ser utilizados por for para determinar el valor que tomará una variable en cada iteración. La función range(a, b, c) recibe tres parámetros enteros, de los cuales el último es opcional.

La función range(a,b) genera un conjunto de valores ordenados desde a hasta b-1 inclusive, siempre utilizando incrementos de uno. Por lo tanto el conjunto de valores es a, a+1, a+2, ..., b-2, b-1.

La función range(a, b, c) genera un conjunto de valores ordenados desde a hasta b-1 inclusive, utilizando incrementos de c. Por lo tanto el conjunto de valores es a, a + c, a + 2c, ... y esta secuencia sigue hasta obtener el último valor que sea menor o igual a b-1.

El siguiente ejemplo muestra la diferencia:

Ejemplo 4.6

En este ejemplo mostraremos el uso de la función range para iterar por valores numéricos. Este programa recibirá tres números enteros a, b y c. Primero, imprimirá todos los números entre a y b sin considerar a b y luego imprimirá todos los números entre a y b sin considerar b, pero en vez de ir de uno en uno, avanzará c números en cada iteración.

4.6 Ejercicios

A continuación, te proponemos varios ejercicios para que los resuelvas en tu libro interactivo.

Ejercicio 4.1

Haz un programa que pida números positivos al usuario hasta que ingrese un número negativo. El programa debe imprimir la suma de todos los números que ingresó (sin el número negativo).

Ejercicio 4.2

En la siguiente actividad se revisará automáticamente el resultado de tu programa. Este programa consta de una función que recibe un número n. Debes asignarle a la variable el resultado el valor del factorial de n.

Ejercicio 4.3

En la siguiente actividad se revisará automáticamente el resultado de tu programa. Este programa consta de una función que recibe un número n. Debes asignarle a la variable el resultado el valor de la suma n de todos los números impares desde el 0 hasta el n sin incluirlo.

Ejercicio 4.4

Realiza un programa que pida al usuario un número n e imprima todos los primos desde el 0 hasta el número n sin considerarlo.

Ejercicio 4.5

Realiza un programa que pida al usuario un número n e imprima los primeros n valores de la secuencia de Fibonacci.

Next Section - 5. Funciones