Estructuras Repetitivas#

Las estructuras repetitivas, también conocidas como ciclos o bucles, son fundamentales en programación. Permiten ejecutar un bloque de código múltiples veces de manera eficiente. Python proporciona varias estructuras repetitivas: while, for, bucles anidados, y comprehensions. También existen iteradores y generadores que facilitan la manipulación de datos de forma eficiente.

Ciclo While#

El ciclo while ejecuta un bloque de código mientras una condición sea verdadera.

while condicion:
    # Bloque de código
contador = 0
while contador < 5:
    print(f"Contador: {contador}")
    contador += 1
Contador: 0
Contador: 1
Contador: 2
Contador: 3
Contador: 4

Ejemplo 1:#

Escribe un programa que use un ciclo while para contar del 10 al 1 e imprima cada número.

contador = 10
while contador > 0:
    print(contador)
    contador -= 1
10
9
8
7
6
5
4
3
2
1

Ciclo For#

El ciclo for itera sobre una secuencia (como una lista, tupla o cadena) y ejecuta un bloque de código por cada elemento.

for elemento in secuencia:
    # Bloque de código
nombres = ["Ana", "Carlos", "Beatriz"]
for nombre in nombres:
    print(f"Hola, {nombre}!")
Hola, Ana!
Hola, Carlos!
Hola, Beatriz!

Ejercicio 1:#

Escribe un programa que use un ciclo para imprimir la posición y el elemento que hay en una lista

v=['a','b','c','d']

for i in range(len(v)):
    print(i,"-->",v[i])
0 --> a
1 --> b
2 --> c
3 --> d

Ejercicio 2:#

Escribe un programa que use un ciclo for para imprimir cada letra de la cadena “Python”.

for letra in "Python":
    print(letra)
P
y
t
h
o
n

Ejercicio 3:#

Escribe un programa que use un ciclo for para imprimir los números del 1 al 10

for num in range(11):
  print(num)
0
1
2
3
4
5
6
7
8
9
10

Ejercicio 4:#

Escribe un programa que imprima los nombres de una lista y el número de nombre.

nombres = ["Ana","Pedro","Juan","Andres","Pablo","Jimmy","Felix","Sonia","Tania"]

for indice, nombre in enumerate(nombres):
  print(f"Nombre {indice}: {nombre}")
Nombre 0: Ana
Nombre 1: Pedro
Nombre 2: Juan
Nombre 3: Andres
Nombre 4: Pablo
Nombre 5: Jimmy
Nombre 6: Felix
Nombre 7: Sonia
Nombre 8: Tania

Ejercicio 5:#

Escribe un programa que imprima los nombres de una lista y las direcciones de correo que están en otra lista

# Listas de nombres y direcciones de correo
nombres = ["Juan Perez", "Maria Gomez", "Carlos Sanchez", "Ana Martinez"]
correos = ["juan.perez@example.com", "maria.gomez@example.com", "carlos.sanchez@example.com", "ana.martinez@example.com"]
# Usar zip para combinar las listas
for nombre, correo in zip(nombres, correos):
    print(f"Nombre: {nombre}, Correo: {correo}")
Nombre: Juan Perez, Correo: juan.perez@example.com
Nombre: Maria Gomez, Correo: maria.gomez@example.com
Nombre: Carlos Sanchez, Correo: carlos.sanchez@example.com
Nombre: Ana Martinez, Correo: ana.martinez@example.com

Ejemplos#

Realiza un algoritmo que cuente las vocales de un `string``

frase = "Anita lava la tina"
k = 0

for letra in frase.lower():
    if letra in ("a","e","i","o","u"): # Explicar la sentencia in para buscar elementos
        k += 1

print(f"Hay {k} vocales")
Hay 8 vocales
# Realiza un programa que haga un triangulo de caracteres
n = 10
for k in range(1,n+1):
    print("*"*k)
*
**
***
****
*****
******
*******
********
*********
**********

Ciclos anidados#

Puedes anidar ciclos for y while dentro de otros ciclos para iterar sobre estructuras de datos más complejas.

matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for fila in matriz:
    for elemento in fila:
        print(elemento, end=" ")
    print()
1 2 3 
4 5 6 
7 8 9 

Ejemplo 1:#

Escribe un programa que use ciclos anidados para imprimir cada combinación de números del 1 al 3 con las letras ‘A’ y ‘B’.

# Solución
for numero in range(1, 4):
    for letra in ["A", "B"]:
        print(f"{numero}{letra}")
1A
1B
2A
2B
3A
3B

List comprehensions#

Las comprehensions son una forma concisa de crear listas, diccionarios o conjuntos en Python.

cuadrados = [x**2 for x in range(10)]
print(cuadrados)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Ejemplo 2:#

Escribe una lista comprehension para crear una lista de los primeros 10 números al cubo.

cubos = [x**3 for x in range(1, 11)]
print(cubos)
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

Diccionario comprehensions#

cuadrados = {x: x**2 for x in range(10)}
print(cuadrados)
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

Ejercicios#

Vamos a resolver los siguientes ejercicios

Ejercicio 1: Análisis de Asistencia#

Crea un programa que analice la asistencia de empleados en una institución pública. Debe permitir ingresar el nombre de cada empleado y si asistió o no en una lista de días. Luego, debe calcular el porcentaje de asistencia de cada empleado y mostrar un resumen.

  1. Crear una lista de empleados.

  2. Para cada empleado, crear una lista de asistencia (True para asistió, False para no asistió).

  3. Calcular el porcentaje de asistencia.

  4. Imprimir un resumen.

# Solución
empleados = {
    "Juan": [True, False, True, True, False],
    "Ana": [True, True, True, False, True],
    "Carlos": [False, False, True, True, True]
}

for nombre, asistencias in empleados.items():
    porcentaje_asistencia = sum(asistencias) / len(asistencias) * 100
    print(f"{nombre}: {porcentaje_asistencia}% de asistencia")
Juan: 60.0% de asistencia
Ana: 80.0% de asistencia
Carlos: 60.0% de asistencia

Ejercicio 1: Registro de Equipos Informáticos#

Crea un programa que gestione el registro de equipos informáticos en una institución pública. Debe permitir ingresar el nombre del equipo, su tipo (computadora, impresora, escáner, etc.), y su estado (operativo, en reparación, dado de baja). Luego, debe permitir actualizar el estado de un equipo específico y mostrar un resumen del inventario.

  1. Crear un diccionario para el inventario.

  2. Agregar al menos tres equipos con su tipo y estado.

  3. Permitir actualizar el estado de un equipo.

  4. Imprimir un resumen del inventario.

# Solución
inventario = {
    "Equipo1": {"tipo": "Computadora", "estado": "operativo"},
    "Equipo2": {"tipo": "Impresora", "estado": "en reparación"},
    "Equipo3": {"tipo": "Escáner", "estado": "dado de baja"}
}

# Actualizar estado de un equipo
inventario["Equipo1"]["estado"] = "en reparación"

# Imprimir resumen del inventario
for equipo, datos in inventario.items():
    print(f"{equipo}: Tipo={datos['tipo']}, Estado={datos['estado']}")
Equipo1: Tipo=Computadora, Estado=en reparación
Equipo2: Tipo=Impresora, Estado=en reparación
Equipo3: Tipo=Escáner, Estado=dado de baja

Ejercicio en clase: Registro de Actividades Diarias#

Crea un programa para registrar las actividades diarias de empleados en una institución pública. El programa debe permitir agregar actividades con la duración en minutos. Luego, debe calcular el total de tiempo dedicado a las actividades y mostrar un resumen.

  1. Crear una lista de actividades.

  2. Agregar al menos cinco actividades con su duración.

  3. Calcular el total de tiempo dedicado.

  4. Imprimir un resumen de las actividades y el tiempo total.

# Tu código acá

Reto 1: Gestión de Incidentes#

Contexto: Trabajas en el departamento de TI de un ministerio y necesitas gestionar un registro de incidentes de seguridad.

Descripción del reto:

  1. Crea un programa que lea una lista de incidentes de seguridad registrados en un sistema.

  2. Cada incidente debe tener un identificador único, una descripción, una fecha y un estado (abierto, en progreso, cerrado).

  3. Usa un ciclo while para permitir a un administrador realizar las siguientes acciones en un menú:

  • Mostrar todos los incidentes.

  • Filtrar incidentes por estado.

  • Actualizar el estado de un incidente específico.

  • Salir del programa.

incidentes = [
    {"id": 1, "descripcion": "Acceso no autorizado", "fecha": "2024-06-01", "estado": "abierto"},
    {"id": 2, "descripcion": "Intento de phishing", "fecha": "2024-06-02", "estado": "en progreso"},
    {"id": 3, "descripcion": "Malware detectado", "fecha": "2024-06-03", "estado": "cerrado"}
]

# Tu código va acá

Reto 2: Análisis de Datos de Salud#

Contexto: Eres analista en una institución que audita empresas de salud y necesitas analizar los datos de salud de los pacientes.

Descripción del reto:

  1. Crea un programa que lea un conjunto de datos de salud de pacientes, donde cada paciente tenga un identificador único, nombre, edad y una lista de diagnósticos.

  2. Usa un ciclo for para iterar sobre los pacientes y realizar las siguientes tareas:

    • Imprimir el nombre y la edad de cada paciente.

    • Contar cuántos pacientes tienen más de 60 años.

    • Imprimir un informe de los diagnósticos más comunes entre los pacientes.

pacientes = [
    {"id": 1, "nombre": "Juan Perez", "edad": 45, "diagnosticos": ["Hipertensión", "Diabetes"]},
    {"id": 2, "nombre": "Maria Gomez", "edad": 70, "diagnosticos": ["Artritis"]},
    {"id": 3, "nombre": "Carlos Sanchez", "edad": 65, "diagnosticos": ["Hipertensión"]}
]

# Tu código va acá

Reto 3: Registro de Asistencia#

Crea un programa que registre la asistencia de empleados en una institución pública. El programa debe permitir agregar registros de asistencia diaria (nombre del empleado, fecha, asistencia: True/False). Luego, debe calcular el porcentaje de asistencia de cada empleado y mostrar un resumen.

  1. Crear una lista de registros de asistencia.

  2. Agregar al menos cinco registros con nombre del empleado, fecha y asistencia.

  3. Calcular el porcentaje de asistencia de cada empleado.

  4. Imprimir un resumen de la asistencia de todos los empleados.

asistencia = [
    {"nombre": "Juan", "fecha": "2023-06-01", "asistencia": True},
    {"nombre": "Ana", "fecha": "2023-06-01", "asistencia": True},
    {"nombre": "Carlos", "fecha": "2023-06-01", "asistencia": False},
    {"nombre": "Juan", "fecha": "2023-06-02", "asistencia": False},
    {"nombre": "Ana", "fecha": "2023-06-02", "asistencia": True}
]

# Tu código va acá