Matrices de Números
Contexto: tableros y grillas. Se trabaja con listas anidadas donde cada celda contiene un número entero o flotante. Los ejercicios simulan sistemas reales de gestión de espacios y consumo de datos estructurados en filas y columnas.
Un centro comercial tiene un estacionamiento con 3 pisos y 8 espacios por piso. Cada celda de la matriz representa un espacio: 0 = libre, 1 = ocupado.
Debes representar el estado del estacionamiento con una matriz 3×8 y mostrar un resumen de ocupación.
- 01 Definir la matriz con el estado inicial dado (hardcodeado)
- 02 Recorrer toda la matriz y contar los espacios libres y ocupados
- 03 Mostrar cuántos espacios libres hay en cada piso
- 04 Mostrar el total de libres y ocupados en todo el estacionamiento
- 05 Indicar en qué piso hay más espacio disponible
# 0 = libre, 1 = ocupado estacionamiento = [ [0,1,1,0,0,1,0,1], # Piso 1 [1,1,0,0,1,1,1,0], # Piso 2 [0,0,0,1,0,0,0,1], # Piso 3 ]
===== ESTACIONAMIENTO DEL MALL ===== Piso 1: 4 libres, 4 ocupados Piso 2: 3 libres, 5 ocupados Piso 3: 6 libres, 2 ocupados TOTAL: 13 libres / 11 ocupados El piso con más espacio disponible es el Piso 3
Una sala de cine tiene 6 filas de 10 butacas cada una. La matriz representa el estado de cada butaca: 0 = disponible, 1 = reservado, 2 = bloqueado (mantenimiento).
El programa debe permitir al usuario consultar disponibilidad y reservar un asiento ingresando fila y columna.
- 01 Mostrar el mapa de sala con:
[ ]libre,[X]reservado,[·]bloqueado - 02 Pedir al usuario fila y número de butaca para reservar
- 03 Validar que la fila y butaca existan dentro del rango de la sala
- 04 Validar que el asiento no esté ya reservado ni bloqueado
- 05 Si es válido, marcar como reservado y mostrar el mapa actualizado
- 06 Mostrar el total de asientos disponibles restantes
# 0=libre 1=reservado 2=bloqueado sala = [ [0,0,0,1,1,1,0,0,0,0], # A [0,1,1,1,0,0,1,0,0,2], # B [2,0,0,0,1,1,0,0,1,0], # C [0,0,1,0,0,2,2,0,0,1], # D [1,1,0,0,0,0,1,1,0,0], # E [0,0,0,0,0,0,0,0,0,0], # F ] filas = ["A","B","C","D","E","F"]
===== CINEMAX - SALA 3 =====
1 2 3 4 5 6 7 8 9 10
A [ ] [ ] [ ] [X] [X] [X] [ ] [ ] [ ] [ ]
B [ ] [X] [X] [X] [ ] [ ] [X] [ ] [ ] [·]
C [·] [ ] [ ] [ ] [X] [X] [ ] [ ] [X] [ ]
D [ ] [ ] [X] [ ] [ ] [·] [·] [ ] [ ] [X]
E [X] [X] [ ] [ ] [ ] [ ] [X] [X] [ ] [ ]
F [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
Ingrese la fila (A-F): C
Ingrese el número de butaca (1-10): 2
✔ Asiento C2 reservado con éxito.
Asientos disponibles restantes: 30
"[ ]", 1→"[X]", 2→"[·]". Para convertir la letra a índice usa filas.index(entrada).
Una empresa eléctrica organiza su red en 5 sectores (filas) y mide el consumo en 4 períodos del día: madrugada, mañana, tarde, noche (columnas). Cada celda contiene el consumo en kWh (número decimal).
Debes analizar la matriz para generar un reporte de eficiencia: picos de consumo, promedios por sector y alertas de sectores críticos (consumo total > 400 kWh al día).
- 01 Calcular el consumo total y promedio por cada sector (fila)
- 02 Calcular el consumo total y promedio por cada período (columna)
- 03 Identificar la celda con mayor consumo (sector y período)
- 04 Identificar la celda con menor consumo (sector y período)
- 05 Listar los sectores que superan 400 kWh como "CRÍTICO"
- 06 Mostrar qué período concentra el mayor consumo total de la red
# [madrug, mañana, tarde, noche] consumo = [ [45.2, 120.8,98.5, 87.3 ],# Norte [33.1, 210.5,185.2,140.0],# Sur [12.0, 88.3, 76.4, 55.1 ],# Este [67.8, 198.4,220.1,175.6],# Oeste [22.5, 145.0,162.3,110.8],# Centro ] sectores = ["Norte","Sur","Este", "Oeste","Centro"] periodos = ["Madrugada","Mañana", "Tarde","Noche"] umbral = 400
======= RED ELÉCTRICA - REPORTE DIARIO ======= --- CONSUMO POR SECTOR --- Sector Norte: 351.8 kWh | Promedio: 87.95 kWh Sector Sur: 568.8 kWh | Promedio: 142.20 kWh ⚠ CRÍTICO Sector Este: 231.8 kWh | Promedio: 57.95 kWh Sector Oeste: 661.9 kWh | Promedio: 165.48 kWh ⚠ CRÍTICO Sector Centro: 440.6 kWh | Promedio: 110.15 kWh ⚠ CRÍTICO --- CONSUMO POR PERÍODO --- Madrugada: 180.6 kWh total Mañana: 762.0 kWh total ← PICO DE LA RED Tarde: 742.5 kWh total Noche: 568.8 kWh total --- EXTREMOS --- Mayor consumo: Sector Oeste, Tarde (220.1 kWh) Menor consumo: Sector Este, Madrugada (12.0 kWh) 3 sector(es) en estado CRÍTICO.
consumo[sector][periodo]. Para el máximo global usa dos variables: max_val y los índices fila_max, col_max, actualizándolos en cada iteración del doble for.
Matrices de Diccionarios
Contexto: venta de entradas y pasajes. Cada celda ya no es un número simple, sino un diccionario con múltiples atributos (precio, categoría, nombre del pasajero, etc.). Se trabaja con listas de listas donde cada elemento es un dict.
El Teatro Municipal tiene 4 filas de 5 butacas. Cada butaca es un diccionario con su categoría, precio y si está disponible o no.
El programa debe mostrar el mapa de butacas con su precio y calcular cuántas butacas disponibles hay por categoría.
- 01 Recorrer la matriz y mostrar cada butaca con categoría y precio
- 02 Indicar visualmente disponible (
✔) u ocupada (✘) - 03 Contar butacas disponibles por categoría (VIP, Preferente, General)
- 04 Calcular total de ingresos ya generados (butacas vendidas × precio)
teatro = [ [ # Fila A — VIP $25.000 {"butaca":"A1","categoria":"VIP", "precio":25000,"disponible":False}, {"butaca":"A2","categoria":"VIP", "precio":25000,"disponible":False}, {"butaca":"A3","categoria":"VIP", "precio":25000,"disponible":True }, # A4 True, A5 False... ], [ # Fila B — Preferente $15.000 # 5 butacas, misma estructura ], [ # Filas C y D — General $8.000 # 5 butacas, misma estructura ], ]
===== TEATRO MUNICIPAL - MAPA DE SALA ===== A1[VIP $25000]✘ A2[VIP $25000]✘ A3[VIP $25000]✔ A4[VIP $25000]✔ A5[VIP $25000]✘ B1[PRE $15000]✔ B2[PRE $15000]✘ B3[PRE $15000]✔ B4[PRE $15000]✔ B5[PRE $15000]✘ C1[GEN $8000]✔ C2[GEN $8000]✔ C3[GEN $8000]✘ C4[GEN $8000]✔ C5[GEN $8000]✔ D1[GEN $8000]✔ D2[GEN $8000]✘ D3[GEN $8000]✔ D4[GEN $8000]✘ D5[GEN $8000]✔ --- DISPONIBILIDAD POR CATEGORÍA --- VIP : 2 butacas disponibles Preferente: 3 butacas disponibles General : 7 butacas disponibles --- INGRESOS GENERADOS --- Butacas vendidas: 8 Total recaudado : $175.000
butaca["categoria"], butaca["precio"], butaca["disponible"]. Para los ingresos suma el precio solo cuando disponible == False.
Una empresa de buses tiene 3 servicios diarios (mañana, tarde, noche) con 5 asientos por bus. Cada asiento es un diccionario con la información del pasajero si está ocupado.
El programa debe permitir vender un pasaje: elegir servicio y asiento, ingresar nombre y RUT, y registrar la compra calculando el precio según el servicio.
- 01 Mostrar los 3 servicios con asientos libres u ocupados (con nombre)
- 02 Pedir al usuario: servicio (1-3) y número de asiento (1-5)
- 03 Validar que el asiento exista y esté libre
- 04 Pedir nombre completo y RUT del pasajero
- 05 Registrar la venta actualizando el diccionario del asiento
- 06 Mostrar comprobante: mañana=$8.500, tarde=$9.000, noche=$11.000
buses = [ [ # Servicio 1 — 08:00 $8.500 {"asiento":1,"libre":False, "pasajero":"Ana Pérez", "rut":"12.345.678-9"}, {"asiento":2,"libre":True, "pasajero":"","rut":""}, # asientos 3, 4, 5 ... ], [ # Servicio 2 — 14:00 $9.000 # misma estructura ], [ # Servicio 3 — 22:00 $11.000 # misma estructura ], ] precios = [8500,9000,11000] horarios = ["08:00","14:00","22:00"]
==== TRANSBUS - VENTA DE PASAJES ==== [Servicio 1 - 08:00 | $8.500] Asiento 1: OCUPADO - Ana Pérez Asiento 2: LIBRE Asiento 3: OCUPADO - Luis Mora Asiento 4: LIBRE Asiento 5: LIBRE Elija el servicio (1-3): 2 Elija el asiento (1-5): 3 Ingrese nombre completo: Sofía Tapia Ingrese RUT: 17.888.999-0 === COMPROBANTE DE VENTA === Servicio : Tarde (14:00) Asiento : 3 Pasajero : Sofía Tapia RUT : 17.888.999-0 Precio : $9.000 ¡Buen viaje, Sofía Tapia!
idx = int(input(...)) - 1. Para actualizar usa buses[idx_serv][idx_asiento]["libre"] = False y buses[...][...]["pasajero"] = nombre.
Un avión tiene 4 filas de 6 asientos (A, B, C — pasillo — D, E, F). Cada asiento tiene clase (Business/Economy), precio, nombre del pasajero y estado de check-in. La aerolínea aplica reglas de negocio reales: asientos ya confirmados no pueden volver a registrarse, y pasajeros menores de 18 no pueden ocupar la fila de emergencia (fila 3).
El programa debe procesar el check-in de un pasajero, validar las reglas y generar el manifiesto de vuelo.
- 01 Mostrar el mapa del avión con clase, precio y estado de check-in
- 02 Pedir al usuario: fila (1-4) y asiento (A-F) para hacer check-in
- 03 Validar que el asiento tenga pasajero asignado y no haya hecho check-in
- 04 Pedir edad: si fila 3 y edad < 18, rechazar y sugerir otro asiento
- 05 Registrar el check-in actualizando el campo del diccionario
- 06 Mostrar el manifiesto final y recaudación total por clase
vuelo = [ [ # Fila 1 — Business $850.000 {"asiento":"1A", "clase":"Business", "precio":850000, "pasajero":"Isabel Rojas", "checkin":True}, {"asiento":"1B", "clase":"Business", "precio":850000, "pasajero":"Jorge Mendez", "checkin":False}, # 1C sin pasajero, 1D-1F... ], [ # Fila 2 — Economy $320.000 # misma estructura ], [ # Fila 3 — Economy (EMERGENCIA) # requiere edad >= 18 ], [ # Fila 4 — Economy # misma estructura ], ] columnas = ["A","B","C","D","E","F"]
=== VUELO LA-830 SCL → MIA ===
A B C D E F
1 [BIZ ✔] [BIZ ] [BIZ ---] [BIZ ✔] [BIZ ] [BIZ ---]
2 [ECO ✔] [ECO ] [ECO ---] [ECO ✔] [ECO ] [ECO ---]
3 [ECO ] [ECO ---] [ECO ✔] [ECO ---] [ECO ] [ECO ---] ⚠ EMERGENCIA
4 [ECO ] [ECO ✔] [ECO ---] [ECO ] [ECO ---] [ECO ]
✔=check-in | espacio=pendiente | ---=sin pasajero
Ingrese fila (1-4): 3
Ingrese asiento (A-F): A
Ingrese su edad: 16
✘ Fila de emergencia requiere mayores de 18 años.
Asientos sugeridos: 2B, 2E, 4A...
(con edad válida >= 18:)
✔ Check-in registrado: Felipe Saez — Asiento 3A
=== MANIFIESTO DE VUELO LA-830 ===
N° Asiento Clase Pasajero Check-in
1 1A Business Isabel Rojas ✔
2 1D Business Rosa Lillo ✔
3 2A Economy Carlos Ruiz ✔
4 2D Economy Tomás Vera ✔
5 3C Economy Paula Mora ✔
6 4B Economy Valentina R. ✔
Pasajeros con check-in : 6 / 14 totales
Pendientes de check-in : 8
Recaudación Business : $2.550.000
Recaudación Economy : $1.920.000
columnas.index(letra). Valida fila de emergencia comparando idx_fila == 2. Para el manifiesto, recorre toda la matriz con doble for y muestra sólo si checkin == True.