Bucles For
Resumen
Enseñando: 10 min
Ejercicios: 15 minPreguntas
¿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.
- Hacer cálculos sobre los valores en una lista uno por uno
es tan incómodo como trabajar con
pressure_001
,pressure_002
, etc. - Un bucle for le dice a Python que ejecute algunas instrucciones una vez por cada valor de una lista, una secuencia de caracteres, o alguna otra colección.
- “para cada cosa en este grupo, realiza estas operaciones”
for number in [2, 3, 5]:
print(number)
- Este bucle
for
es equivalente a:
print(2)
print(3)
print(5)
- Y la salida del bucle
for
es:
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 colección,
[2, 3, 5]
, es sobre lo que se está ejecutando el bucle. - El cuerpo,
print (number)
, especifica qué hacer para cada valor en la colección. - La variable de control,
number
, es lo que cambia para cada iteración del bucle. - El “valor actual de la variable”.
La primera línea del bucle for
debe terminar con dos puntos, y el cuerpo debe estar indentado.
- Los dos puntos al final de la primera línea indican el inicio de un bloque de instrucciones.
- Python usa indentación en lugar de
{}
obegin
/end
para mostrar *anidamiento *. - Cualquier indentación consistente es legal, pero casi todos usan cuatro espacios.
for number in [2, 3, 5]:
print(number)
IndentationError: expected an indented block
- La indentación es siempre significativa en Python.
firstName = "Jon"
lastName = "Smith"
File "<ipython-input-7-f65f2962bf9c>", line 2
lastName = "Smith"
^
IndentationError: unexpected indent
- Este error se puede solucionar eliminando los espacios adicionales al comienzo de la segunda línea.
Las variables de control pueden tener cualquier nombre.
- Como todas las variables, las variables de control son:
- Creadas a petición.
- Sin significado: pueden usar cualquier nombre.
for kitten in [2, 3, 5]:
print(kitten)
El cuerpo de un bucle puede contener muchas instrucciones.
- Pero ningún bucle debería tener más de unas pocas líneas de longitud.
- Es difícil para los seres humanos tener en mente grandes fragmentos de código.
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.
- La función incorporada
range
produce una secuencia de números. - No es una lista: los números se producen a pedido. para hacer que el bucle en grandes rangos sea más eficiente
range(N)
son los números 0..N-1- Exactamente los índices legales de una lista o secuencia de caracteres de longitud N
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.
- Un patrón común en los programas es:
- Inicializar una variable acumulador a cero, la secuencia de caracteres vacía o la lista vacía.
- Actualizar la variable con valores de una colección.
# Suma los primeros 10 números enteros.
total = 0
for number in range(10):
total = total + (number + 1)
print(total)
55
- Lee
total = total + (number + 1)
como: - Suma 1 al valor actual de la variable de control
number
. - Añade esto al valor actual de la variable acumuladora
total
. - Asigna esto a
total
, reemplazando el valor actual. - Tenemos que añadir
number + 1
porquerange
produce 0..9, no 1..10.
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
- Lee el siguiente código e intenta identificar cuáles son los errores sin ejecutarlos.
- 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?- Corrige el error.
- 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
yNumber
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
- Lee el código que aparece a continuación e intenta identificar cuáles son los errores sin ejecutarlo.
- Ejecuta el código y lee el mensaje de error. ¿Qué tipo de error es?
- 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.