Programación Orientada a Objetos — Python

Ing. Bernardo Prado · DSM3 · UTH 2026-2

🎓 2026-2 🐍 Python 3 📊 100 pts

⚠️ INSTRUCCIONES OBLIGATORIAS PARA LA ENTREGA DEL EXAMEN

📝 Ejercicios 1–6 — if / else · bool

Siete ejercicios de aplicación directa: lógica condicional con if / elif / else y atributos bool. Cada uno incluye escenario, diagramas y salida esperada.

6Ejercicios
100Puntos
if/elseFoco
boolTipo clave
1

Sistema de Semáforo

🎯 17 pts📦 if/else + bool🔗 Práctica U1

📋 Escenario

Una intersección inteligente necesita modelar un Semaforo con estado actual, ubicación y condición de encendido. El objeto debe usar un atributo booleano para saber si está activo, cambiar entre colores con if/elif/else y determinar si un conductor puede avanzar.

🧠 Lógica de cada método — cómo construirlo

Semaforo.__init__()
Guarda la ubicacion, inicializa estado en "ROJO" y crea el booleano activo = True para representar que el sistema está funcionando desde el inicio.
puede_pasar()
Retorna True solo cuando el semáforo está en verde y sigue activo. Es una condición booleana compuesta ideal para practicar and.
avanzar()
Usa if/elif/else para cambiar el ciclo: ROJO → VERDE, VERDE → AMARILLO y cualquier otro caso vuelve a ROJO.
apagar()
Desactiva el sistema con self.activo = False y fuerza el estado a ROJO para que el comportamiento sea seguro cuando ya no está funcionando.
__str__()
Construye un texto amigable usando un operador ternario para mostrar ✓ Puede pasar o ✗ Detenerse según el resultado de puede_pasar().

📐 Diagrama de Clases

Semaforo
Atributos
+ ESTADOS : list = ["ROJO", "AMARILLO", "VERDE"]
+ ubicacion : str
+ estado : str = "ROJO"
+ activo : bool = True
Métodos
+ puede_pasar() : bool
+ avanzar() : None
+ apagar() : None
+ __str__() : str

👤 Diagrama de Casos de Uso

«Sistema de Semáforo» Conductor Consultar estado Avanzar semáforo Verificar si puede pasar Apagar semáforo
▶ Comprobación — Salida esperada
Semáforo [Av. Principal] → ROJO | ✗ Detenerse
Semáforo [Av. Principal] → VERDE | ✓ Puede pasar
Semáforo [Av. Principal] → AMARILLO | ✗ Detenerse
Semáforo [Av. Principal] → ROJO | ✗ Detenerse
Semáforo [Av. Principal] → ROJO | ✗ Detenerse
2

Rendimiento Escolar

🎯 17 pts📦 if/elif/else + bool🔗 Práctica U1

📋 Escenario

Un sistema académico debe representar estudiantes con su nota y asistencia para decidir si aprueban. La clase Estudiante usará atributos de clase para las políticas mínimas y combinará condiciones booleanas con estructuras if/elif/else para construir un reporte claro.

🧠 Lógica de cada método — cómo construirlo

Estudiante.__init__()
Guarda nombre, nota y asistencia como datos propios de cada alumno para poder evaluarlo después.
Atributos de clase
NOTA_MINIMA y ASISTENCIA_MINIMA representan reglas globales del sistema. Se consultan desde todos los objetos sin repetir valores mágicos.
aprobado()
Retorna True solo si la nota alcanza el mínimo y la asistencia también cumple el porcentaje exigido.
calificacion()
Clasifica el rendimiento con una cadena de if/elif/else desde Excelente hasta Reprobado según el rango numérico obtenido.
__str__()
Arma el reporte final usando un operador ternario para mostrar ✓ Aprobado o ✗ Reprobado junto con nota, asistencia y calificación textual.

📐 Diagrama de Clases

Estudiante
Atributos
+ NOTA_MINIMA : int = 60
+ ASISTENCIA_MINIMA : int = 70
+ nombre : str
+ nota : int
+ asistencia : int
Métodos
+ aprobado() : bool
+ calificacion() : str
+ __str__() : str

👤 Diagrama de Casos de Uso

«Rendimiento Escolar» Docente Registrar nota Calcular calificación Verificar aprobado Ver reporte
▶ Comprobación — Salida esperada
Ana López | Nota: 92 (Excelente) | Asistencia: 95% | ✓ Aprobado
Carlos Reyes | Nota: 75 (Bien) | Asistencia: 80% | ✓ Aprobado
Sofía Martínez | Nota: 55 (Reprobado) | Asistencia: 90% | ✗ Reprobado
Luis Torres | Nota: 70 (Bien) | Asistencia: 65% | ✗ Reprobado
3

Tienda de Descuentos

🎯 17 pts📦 if/else + bool🔗 Práctica U1

📋 Escenario

Una tienda necesita decidir descuentos según categoría y precio del producto. La clase Producto debe calcular el porcentaje con condicionales, activar un booleano cuando aplique descuento y mostrar un ticket final con precio rebajado.

🧠 Lógica de cada método — cómo construirlo

Producto.__init__()
Guarda el nombre, precio y categoria del artículo, además de crear el booleano tiene_descuento = False como estado inicial.
calcular_descuento()
Usa una cadena if/elif/else para decidir el porcentaje según la categoría. En electrónicos también compara el precio para distinguir entre 10% y 15%.
activar_descuento()
Solo cambia tiene_descuento a True si el porcentaje calculado es mayor que cero. Así el objeto conserva el estado de si el descuento fue activado.
precio_final()
Si el producto tiene descuento, devuelve el precio rebajado con round(..., 2); en caso contrario, retorna el precio original sin modificar.
__str__()
Usa un operador ternario para mostrar un texto como -15% o Sin descuento, y luego arma la línea final del ticket.

📐 Diagrama de Clases

Producto
Atributos
+ nombre : str
+ precio : float
+ categoria : str
+ tiene_descuento : bool = False
Métodos
+ calcular_descuento() : float
+ activar_descuento() : None
+ precio_final() : float
+ __str__() : str

👤 Diagrama de Casos de Uso

«Tienda de Descuentos» Cajero Registrar producto Activar descuento Calcular precio final Ver ticket
▶ Comprobación — Salida esperada
Laptop Gamer [Electronicos] | Precio: L8500 | -15% → L7225.0
Camisa Oxford [Ropa] | Precio: L350 | -20% → L280.0
Arroz 5 kg [Alimentos] | Precio: L90 | -5% → L85.5
Libro Python [Libros] | Precio: L250 | Sin descuento → L250
4

Sensor de Temperatura Industrial

🎯 17 pts📦 if/elif/else + bool🔗 Práctica U1

📋 Escenario

Una planta industrial quiere monitorear la temperatura en distintas áreas con un objeto Sensor. La clase debe clasificar el estado térmico con if/elif/else, activar una alerta booleana si hay valores extremos y mostrar un estado entendible para el técnico.

🧠 Lógica de cada método — cómo construirlo

Sensor.__init__()
Guarda la ubicacion, permite una temperatura inicial opcional y crea el booleano en_alerta = False para manejar eventos críticos.
clasificar()
Usa if/elif/else para traducir el valor numérico a estados como Congelamiento, Fría, Normal, Caliente o Crítica.
actualizar()
Primero reemplaza la temperatura actual y luego revisa si el valor es mayor a 40 o menor a 0. En esos casos activa la alerta; si no, la apaga.
__str__()
Usa un operador ternario para mostrar 🚨 ALERTA o ✓ OK y complementa la salida con la clasificación térmica del sensor.

📐 Diagrama de Clases

Sensor
Atributos
+ ubicacion : str
+ temperatura : float = 20.0
+ en_alerta : bool = False
Métodos
+ clasificar() : str
+ actualizar(nueva_temp) : None
+ __str__() : str

👤 Diagrama de Casos de Uso

«Monitoreo Industrial» Técnico Instalar sensor Actualizar temperatura Clasificar estado Revisar alerta
▶ Comprobación — Salida esperada
Sensor [Bodega Norte] | -5.0°C | Congelamiento | 🚨 ALERTA
Sensor [Sala Servidores] | 22.0°C | Normal | ✓ OK
Sensor [Horno Industrial] | 45.0°C | Crítica | 🚨 ALERTA
--- Actualizando sala servidores ---
Sensor [Sala Servidores] | 42.0°C | Crítica | 🚨 ALERTA
5

Control de Acceso por Membresía

🎯 16 pts📦 bool + if/else🔗 Práctica U1

📋 Escenario

Un centro recreativo necesita verificar si un usuario puede ingresar según su edad, membresía y estado de cuenta. La clase Usuario debe usar varios if consecutivos, atributos booleanos y mensajes claros para justificar cada denegación.

🧠 Lógica de cada método — cómo construirlo

Usuario.__init__()
Guarda nombre, edad y el valor inicial de membresia. También crea activo = True para representar que la cuenta no está suspendida al inicio.
puede_ingresar()
Usa varios if seguidos para bloquear el acceso si la cuenta está suspendida, si el usuario es menor de edad o si no posee membresía activa.
motivo_denegacion()
Repite la misma cadena lógica de validación, pero devolviendo un texto explicativo como cuenta suspendida, menor de edad o sin membresía.
renovar() / suspender()
Permiten cambiar el estado del usuario: renovar reactiva membresía y cuenta; suspender desactiva el acceso sin borrar al usuario.
__str__()
Usa un ternario para mostrar ✓ Acceso permitido o ✗ Denegado (...) con el motivo exacto según el resultado de las validaciones.

📐 Diagrama de Clases

Usuario
Atributos
+ nombre : str
+ edad : int
+ membresia : bool = False
+ activo : bool = True
Métodos
+ puede_ingresar() : bool
+ motivo_denegacion() : str
+ renovar() : None
+ suspender() : None
+ __str__() : str

👤 Diagrama de Casos de Uso

«Control de Acceso» Guardia Registrar usuario Renovar membresía Suspender cuenta Verificar acceso
▶ Comprobación — Salida esperada
María Pérez (edad: 25) | ✓ Acceso permitido
Juan Gómez (edad: 16) | ✗ Denegado (menor de edad)
Pedro Sánchez (edad: 30) | ✗ Denegado (sin membresía)
Laura Díaz (edad: 28) | ✗ Denegado (cuenta suspendida)
--- Pedro renueva membresía ---
Pedro Sánchez (edad: 30) | ✓ Acceso permitido
6

Clasificador de Triángulos

🎯 16 pts📦 if/elif/else + bool🔗 Práctica U1

📋 Escenario

Un estudiante de geometría necesita validar si tres lados forman un triángulo y luego clasificarlo por lados y por ángulos. La clase Triangulo combinará lógica booleana, desigualdad triangular y comparaciones cuadráticas con if/elif/else.

🧠 Lógica de cada método — cómo construirlo

Triangulo.__init__()
Guarda los tres lados a, b y c como atributos del objeto para que luego sean evaluados en distintas reglas geométricas.
es_valido()
Retorna un booleano aplicando la desigualdad triangular: la suma de dos lados siempre debe ser mayor que el tercero.
tipo_lados()
Primero verifica si el triángulo es válido. Luego usa if/elif/else para distinguir entre Equilátero, Isósceles y Escaleno.
tipo_angulos()
También valida primero el triángulo, identifica el lado mayor y compara cuadrados para devolver Rectángulo, Obtusángulo o Acutángulo.
__str__()
Usa un ternario para mostrar si la figura es válida y agrega las dos clasificaciones calculadas para producir un reporte geométrico compacto.

📐 Diagrama de Clases

Triangulo
Atributos
+ a : float
+ b : float
+ c : float
Métodos
+ es_valido() : bool
+ tipo_lados() : str
+ tipo_angulos() : str
+ __str__() : str

👤 Diagrama de Casos de Uso

«Clasificador de Triángulos» Estudiante Ingresar lados Validar triángulo Clasificar por lados Clasificar por ángulos
▶ Comprobación — Salida esperada
Triángulo (5, 5, 5) | ✓ Válido | Equilátero | Acutángulo
Triángulo (3, 4, 5) | ✓ Válido | Escaleno | Rectángulo
Triángulo (7, 5, 4) | ✓ Válido | Escaleno | Obtusángulo
Triángulo (1, 1, 10) | ✗ No es triángulo | Inválido | Inválido