Bucles For

Resumen

Enseñando: 10 min
Ejercicios: 15 min
Preguntas
  • ¿Cómo puedo hacer que un programa haga muchas cosas?

Objectivos
  • Explicar para qué se usan normalmente los bucles for.

  • Rastrear la ejecución de un bucle simple (no anidado) e indicar correctamente los valores de las variables en cada iteración.

  • Escribir bucles for que usan el patrón del Acumulador para agregar valores.

Un bucle for ejecuta comandos una vez para cada valor en una colección.

for number in [2, 3, 5]:
    print(number)
print(2)
print(3)
print(5)
2
3
5

Un bucle for se compone de una colección, una variable de control y un cuerpo.

for number in [2, 3, 5]:
    print(number)

La primera línea del bucle for debe terminar con dos puntos, y el cuerpo debe estar indentado.

for number in [2, 3, 5]:
print(number)
IndentationError: expected an indented block
firstName = "Jon"
  lastName = "Smith"
File "<ipython-input-7-f65f2962bf9c>", line 2
lastName = "Smith"
^
IndentationError: unexpected indent

Las variables de control pueden tener cualquier nombre.

for kitten in [2, 3, 5]:
    print(kitten)

El cuerpo de un bucle puede contener muchas instrucciones.

primes = [2, 3, 5]
for p in primes:
    squared = p ** 2
    cubed = p ** 3
    print(p, squared, cubed)
2 4 8
3 9 27
5 25 125

Usa range para iterar sobre una secuencia de números.

print('un range no es una lista: range(0, 3)')
for number in range(0, 3):
    print(number)
un range no es una lista: range(0, 3)
0
1
2

El patrón Acumulador convierte muchos valores en uno.

# Suma los primeros 10 números enteros.
total = 0
for number in range(10):
    total = total + (number + 1)
print(total)
55

Clasificación de errores 

¿Es un error de indentación un error de sintaxis o un error de tiempo de ejecución?

Solución

Un IndentationError es un error de sintaxis. Los programas con errores de sintaxis no se pueden iniciar Un programa con un error de ejecución se iniciará pero se lanzará un error bajo ciertas condiciones.

Rastreo de Ejecución

Crea una tabla que muestre los números de las líneas que se ejecutan cuando se corre este programa,
y los valores de las variables después de ejecutar cada línea.

total = 0
for char in "tin":
total = total + 1

Solución

no. de linea Variables
1 total = 0
2 total = 0 char = ‘t’
3 total = 1 char = ‘t’
2 total = 1 char = ‘i’
3 total = 2 char = ‘i’
2 total = 2 char = ‘n’
3 total = 3 char = ‘n’

Invertir a una secuencia de caracteres

Completa los espacios en blanco en el programa a continuación para que imprima “nit” (el reverso de la secuencia de caracteres original “tin”).

original = "tin"
result = ____
for char in original:
result = ____
print(result)

Solución

original = "tin"
result = ""
for char in original:
result = char + result
print(result)

Practica con el Acumulador

Complete los espacios en blanco en cada uno de los programas de abajo para producir el resultado indicado.

# Longitud total de las cadenas de texto en la lista: ["red", "green", "blue"] => 12
total = 0
for word in ["red", "green", "blue"]:
    ____ = ____ + len(word)
print(total)

Solución

total = 0
for word in ["red", "green", "blue"]:
    total = total + len(word)
print(total)
# Lista de longitudes de las palabras: ["red", "green", "blue"] => [3, 5, 4]
lengths = ____
for word in ["red", "green", "blue"]:
    lengths.____(____)
print(lengths)

Solución

lengths = []
for word in ["red", "green", "blue"]:
    lengths.append(len(word))
print(lengths)
# Concatena todas las palabras: ["red", "green", "blue"] => "redgreenblue"
words = ["red", "green", "blue"]
result = ____
for ____ in ____:
    ____
print(result)

Solución

words = ["red", "green", "blue"]
result = ""
for word in words:
    result = result + word
print(result)
# Crea un acrónimo: ["red", "green", "blue"] => "RGB"
# escribe toda la solución.

Solución

acronym = ""
for word in ["red", "green", "blue"]:
    acronym = acronym + word[0].upper()
print(acronym)

Suma acumulativa

Reordena e indenta correctamente las líneas de código a continuación para que se imprima una lista con la suma acumulativa de datos. El resultado debería ser [1, 3, 5, 10].

cumulative.append(sum)
for number in data:
cumulative = []
sum += number
sum = 0
print(cumulative)
data = [1,2,2,5]

Solución

sum = 0
data = [1,2,2,5]
cumulative = []
for number in data:
    sum += number
    cumulative.append(sum)
print(cumulative)

Identificación de errores en el nombre de la variable

  1. Lee el siguiente código e intenta identificar cuáles son los errores sin ejecutarlos.
  2. Ejecuta el código y lee el mensaje de error. ¿Qué tipo de NameError crees que es? ¿Es una secuencia de caracteres sin comillas, una variable mal escrita o una variable que debería haber sido definida pero no lo fue?
  3. Corrige el error.
  4. Repite los pasos 2 y 3, hasta que haya solucionado todos los errores.
for number in range(10):
    # usa a si el número es un múltiplo de 3, usa b en los otros casos
    if (Number % 3) == 0:
        message = message + a
    else:
        message = message + "b"
print(message)

Solución

la variable message necesita ser inicializada y los nombres de las variables en Python son sensibles a las mayúsculas y minúsculas: number y Number se refieren a diferentes variables.

message = ""
for number in range(10):
    # usa a si el número es un múltiplo de 3, usa b en los otros casos
    if (number % 3) == 0:
        message = message + "a"
    else:
        message = message + "b"
print(message)

Identificación de errores en los elementos

  1. Lee el código que aparece a continuación e intenta identificar cuáles son los errores sin ejecutarlo.
  2. Ejecuta el código y lee el mensaje de error. ¿Qué tipo de error es?
  3. Arregla el error.
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
print('Mi temporada favorita es  ', seasons[4])

Solución

Esta lista tiene 4 elementos y el índice para acceder al último elemento de la lista es 3.

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
print('Mi temporada favorita es ', seasons[3])

Puntos Clave

  • Un bucle for ejecuta comandos una vez para cada valor en una colección.

  • Un bucle for se compone de una colección, una variable de bucle y un cuerpo.

  • La primera línea del bucle for debe terminar con dos puntos, y el cuerpo debe ser indentado.

  • La indentación siempre es significativa en Python.

  • Las variables de bucle se pueden llamar de cualquier forma (pero se recomienda encarecidamente tener un nombre significativo para la variable de bucle).

  • El cuerpo de un bucle puede contener muchas instrucciones.

  • Usa range para iterar sobre una secuencia de números.

  • El patrón Acumulador convierte muchos valores en uno.