Ejercicios de Programación Python: Bucles y Estructuras de Datos

Aprende y practica Python con ejercicios resueltos sobre bucles anidados y estructuras de datos. Domina matrices, simulaciones y más. ¡Empieza a programar ya!

Podcast

Programación en Python: Estructuras y Textos0:00 / 25:47
0:001:00 restante

¡Bienvenido, futuro programador! Si estás buscando dominar los bucles y estructuras de datos en Python, has llegado al lugar correcto. Esta guía completa te sumergirá en el fascinante mundo de la programación con Python, ofreciéndote ejercicios prácticos y explicaciones claras para consolidar tus conocimientos. Desde la gestión de notas estudiantiles hasta la simulación de juegos, prepárate para potenciar tus habilidades.

Ejercicios de Programación Python: Bucles Anidados y Listas Multidimensionales

Los bucles y las estructuras de datos son pilares fundamentales en cualquier lenguaje de programación. En Python, la flexibilidad de las listas permite crear estructuras complejas, como las listas anidadas o matrices, ideales para modelar datos bidimensionales. Los bucles anidados, por su parte, son herramientas esenciales para recorrer y manipular estas estructuras de manera eficiente.

Comprendiendo los Bucles Anidados en Python

Un bucle anidado es, simplemente, un bucle (interno) dentro de otro bucle (externo). Piensa en un reloj: el segundero completa un ciclo completo por cada avance del minutero. Este concepto es clave para trabajar con datos estructurados como matrices o para generar patrones.

¿Para qué se usan los ciclos anidados?

  • Manipulación de Matrices: Ideal para recorrer filas y columnas en listas bidimensionales.
  • Generación de Patrones: Permite dibujar figuras geométricas o tableros en la consola.
  • Operaciones Iterativas Complejas: Cuando una función iterativa necesita otra función iterativa en su interior.

Ejemplo Básico de Bucle Anidado:

Para imprimir un patrón como:

#####
#####
#####

Se usa un bucle externo para las filas y uno interno para los símbolos en cada fila.

for i in range(1, 4, 1): # Ciclo externo para las filas
 for j in range(1, 6, 1): # Ciclo interno para los caracteres por fila
 print("#", end="")
 print("") # Salto de línea al final de cada fila

Listas Anidadas: Matrices en Python

Las listas anidadas son listas que contienen otras listas como elementos, lo que permite modelar matrices y datos multidimensionales. Acceder a sus elementos se logra con dos índices: matriz[fila][columna].

Creación y Acceso a Listas Anidadas:

numeros = [
 [1, 2, 3],
 [4, 5, 6],
 [7, 8, 9]
]

el_uno = numeros[0][0] # Accede al valor 1
primera_lista = numeros[0] # Accede a la sublista [1, 2, 3]

n_filas = len(numeros) # Cantidad de filas: 3
n_columnas_fila_0 = len(numeros[0]) # Cantidad de columnas de la primera fila: 3

Análisis de Notas de Estudiantes con Python

Vamos a aplicar estos conceptos a un caso real: el análisis de notas de estudiantes. Este ejercicio simula un escenario universitario y utiliza una matriz para almacenar los datos.

Simulación de Notas y Cálculo de Promedios

La primera tarea es generar una matriz de 40x6 que contenga el ID de los estudiantes, sus notas en tres pruebas, la nota de controles y la nota promedio final.

1. Generación de la Matriz de Notas (40x6):

  • Columna 1: ID de estudiantes (1 a 40).
  • Columna 2: Prueba 1 (aleatoria entre 3.0 y 7.0).
  • Columna 3: Prueba 2 (aleatoria entre 1.0 y 7.0).
  • Columna 4: Prueba 3 (aleatoria entre 1.0 y 6.0).
  • Columna 5: Controles (aleatoria entre 5.0 y 7.0).
  • Columna 6: Promedio final.
import random

estudiantes_notas = []
for i in range(1, 41): # 40 estudiantes
 id_estudiante = i
 nota_p1 = round(random.uniform(3.0, 7.0), 1)
 nota_p2 = round(random.uniform(1.0, 7.0), 1)
 nota_p3 = round(random.uniform(1.0, 6.0), 1)
 nota_controles = round(random.uniform(5.0, 7.0), 1)
 # El promedio final se calculará después
 estudiantes_notas.append([id_estudiante, nota_p1, nota_p2, nota_p3, nota_controles, 0.0])

#... (cálculo del promedio final y otras operaciones)

2. Cálculo y Muestra del Promedio de Cada Evaluación:

Para esto, se itera sobre las columnas de notas y se calcula el promedio. Luego, se debe calcular el promedio final de cada estudiante y actualizar la columna 6 de la matriz.

3. Identificación del Mejor Estudiante por Evaluación:

Se requiere encontrar el ID del estudiante con la nota más alta en cada una de las evaluaciones (Prueba 1, 2, 3 y Controles).

4. Promedio de Evaluaciones de Estudiantes Aprobados:

Aquí, se calcula el promedio de cada evaluación, pero solo considerando a los estudiantes que hayan aprobado el ramo (generalmente con un promedio final igual o superior a 4.0).

5. Promedio Final de Estudiantes con Notas Superiores a 4.0 en Todas las Evaluaciones:

Este punto implica filtrar a los estudiantes que cumplan la condición de tener más de 4.0 en cada una de las evaluaciones individuales (P1, P2, P3, Controles) y luego calcular su promedio final.

6. IDs de Alumnos Aprobados con al Menos Una Nota Menor a 4.0:

Se pide identificar a aquellos estudiantes que, a pesar de tener un promedio final aprobatorio, tuvieron al menos una evaluación con una nota inferior a 4.0.

Ejercicios Prácticos con Listas Anidadas en Python

Además del análisis de notas, las listas anidadas son útiles para una variedad de problemas. Aquí te presentamos algunos ejemplos clave de los materiales.

Conversión y Promedio de Saltos de Atletas

Se tiene una tabla con mediciones de salto largo en metros. El objetivo es convertir estas mediciones a centímetros, calcular el promedio de salto para cada atleta y el promedio global de la competencia.

saltos = [
 [2.04, 1.74, 2.42],
 [3.43, 2.14, 2.02],
 [1.04, 1.62, 2.31]
]

# Convertir a cm y calcular promedios
for i in range(len(saltos)):
 for j in range(len(saltos[i])):
 saltos[i][j] *= 100
 print(f"El promedio del atleta {i} es {sum(saltos[i]) / len(saltos[i])}")

largoSaltos = sum(sum(atleta_saltos) for atleta_saltos in saltos)
numSaltos = sum(len(atleta_saltos) for atleta_saltos in saltos)
print(f"El promedio de todos los atletas es {largoSaltos / numSaltos}")

Búsqueda en una Matriz Aleatoria (10x10)

Crea una matriz de 10x10 con números aleatorios entre 1 y 99. Luego, busca el número 35 e imprime todas sus posiciones si lo encuentra, o un mensaje indicando que no está.

import random

matriz_10x10 = []
for _ in range(10):
 fila = [random.randint(1, 99) for _ in range(10)]
 matriz_10x10.append(fila)

#... (código para buscar el 35 y mostrar las posiciones)

Cálculo del Índice de Masa Corporal (IMC) Mejorado

Se proporciona un conjunto de alturas y pesos. Implementa una función imc que calcule el IMC, maneje sistemas de medición (métrico/imperial) y clasifique a las personas según la tabla de la OMS, retornando los nombres agrupados por clasificación.

Clasificación del IMC (OMS):

  • <18.50: Infrapeso
  • 18.50 - 24.99: Peso Normal
  • 25.00 - 29.99: Sobrepeso
  • >=30.00: Obeso

La función debe recibir nombres, alturas, pesos y el tipo de sistema ('metric' o 'imperial').

Otros Ejercicios de Bucles y Listas

  • Generación de Figuras Geométricas: Crea funciones para dibujar rectángulos (completo y hueco), letras (H, A, X), número 9 y diferentes tipos de triángulos usando caracteres y pidiendo alto/ancho al usuario.
  • Matriz con Borde de Unos y Centro de Ceros: Solicita un número num al usuario y genera una matriz cuadrada num x num con unos en el borde y ceros en el interior.
  • Juego del Gato y el Ratón: Simula un juego en una malla de 5x5 donde el jugador (J) persigue a un ratón (R) que se mueve aleatoriamente.
  • Validación de Sudoku: Dada una matriz de 9x9, verifica si cumple las reglas de un Sudoku (números del 1 al 9 sin repetición en filas, columnas y submatrices 3x3).
  • Estadísticas en Deportes: Calcula el rendimiento de equipos de básquetbol (Rendimiento = (3*Ganados + Empatados) / (3*Total Jugados)).
  • Optimización de Sistemas de Calefacción: Encuentra el sistema que minimiza una ecuación de rendimiento dada una matriz de costos, calor y área.
  • Movimiento de Mosca en un Arreglo: Simula el movimiento aleatorio de una mosca en un arreglo hasta que es atrapada por una araña, contando el número de veces que estuvo en cada posición y el total de movimientos.
  • Juego de Movimientos en Arreglo: Dado un arreglo de números enteros, se avanza o retrocede casillas según el valor de la posición actual, terminando al llegar a la última posición, caer por la izquierda o por la derecha.

Tarjetas

1 / 46

¿Cómo solicitar al usuario el número de escalones en Python y qué debe desplegar el programa con asteriscos para 4 escalones cuando la escalera no se

Pedir entrada con input() y convertir a entero; para 4 escalones imprimir líneas con 2,4,6,8 asteriscos: "**\n****\n******\n********".

Toca para girar · Desliza para navegar

FAQ: Preguntas Frecuentes sobre Bucles y Estructuras de Datos en Python

¿Cuál es la diferencia entre un bucle for y un bucle while para listas anidadas?

Ambos pueden usarse para recorrer listas anidadas. El bucle for es ideal cuando conoces de antemano el número de iteraciones (como el número de filas o columnas). El bucle while es más adecuado cuando la condición de parada es dinámica, por ejemplo, hasta que se cumpla cierta condición o se encuentre un elemento específico, sin un número fijo de iteraciones.

¿Cómo se accede a un elemento específico en una matriz de Python?

Para acceder a un elemento en una matriz (lista anidada) en Python, usas dos índices: matriz[indice_fila][indice_columna]. Por ejemplo, matriz[0][0] accederá al primer elemento de la primera fila.

¿Puedo tener listas anidadas con diferentes longitudes de sub-listas?

Sí, Python permite que las sub-listas dentro de una lista anidada tengan diferentes longitudes. Esto es lo que se conoce como “cantidad de sub-elementos variable” en los materiales. Sin embargo, si representas una matriz matemática, generalmente todas las filas tendrán la misma longitud. Para recorrerlas, puedes usar len(sub_lista) en el bucle interno.

¿Qué son las matrices identidad y cómo se crean en Python?

Una matriz identidad es una matriz cuadrada donde todos los elementos de la diagonal principal son 1 y todos los demás son 0. Se puede crear con bucles anidados verificando si el índice de fila es igual al índice de columna (if i == j).

¿Cómo puedo simular un dado en Python para juegos?

La función random.randint(min, max) es perfecta para simular el lanzamiento de un dado. Por ejemplo, random.randint(1, 6) generará un número entero aleatorio entre 1 y 6 (ambos incluidos), ideal para juegos como "Todos contra el Profesor".

Sign up to access full content

Create a free account to unlock all study materials, take interactive tests, listen to podcasts and more.

Create free account

Temas relacionados