Ejercicios Python - Nivel Intermedio (POO) - Parte 1

Ejercicio 1

Crear una clase Persona con atributos nombre y edad. Implementar un método que devuelva si la persona es mayor de edad.
Solución
class Persona:
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad

    def es_mayor_de_edad(self):
        return self.edad >= 18

Ejemplo de uso

persona = Persona("Juan", 20)
print(persona.es_mayor_de_edad())  # True

Ejercicio 2

Crear una clase Círculo con un atributo radio. Implementar métodos para calcular el área y el perímetro.
Solución
import math

class Circulo:
    def __init__(self, radio):
        self.radio = radio

    def area(self):
        return math.pi * self.radio ** 2

    def perimetro(self):
        return 2 * math.pi * self.radio

Ejemplo de uso

circulo = Circulo(5)
print(circulo.area())       # 78.54...
print(circulo.perimetro())  # 31.41...

Ejercicio 3

Crear una clase Rectángulo con atributos base y altura. Implementar un método que determine si es un cuadrado.

Solución
class Rectangulo:
    def __init__(self, base, altura):
        self.base = base
        self.altura = altura

    def es_cuadrado(self):
        return self.base == self.altura

Ejemplo de uso

rectangulo = Rectangulo(5, 5)
print(rectangulo.es_cuadrado())  # True

Ejercicio 4

Crear una clase Vehículo con atributos marca y modelo. Crear una clase hija Coche con un atributo adicional velocidad_maxima.

Solución
class Vehiculo:
    def __init__(self, marca, modelo):
        self.marca = marca
        self.modelo = modelo

class Coche(Vehiculo):
    def __init__(self, marca, modelo, velocidad_maxima):
        super().__init__(marca, modelo)
        self.velocidad_maxima = velocidad_maxima

Ejemplo de uso

coche = Coche("Toyota", "Corolla", 180)
print(coche.marca)             # Toyota
print(coche.velocidad_maxima)  # 180

Ejercicio 5

Crear una clase CuentaBancaria con métodos para depositar, retirar y consultar el saldo.

Solución
class CuentaBancaria:
    def __init__(self, saldo_inicial=0):
        self.saldo = saldo_inicial

    def depositar(self, cantidad):
        self.saldo += cantidad

    def retirar(self, cantidad):
        if cantidad <= self.saldo:
            self.saldo -= cantidad
        else:
            print("Fondos insuficientes.")

    def consultar_saldo(self):
        return self.saldo

Ejemplo de uso

cuenta = CuentaBancaria(100)
cuenta.depositar(50)
cuenta.retirar(30)
print(cuenta.consultar_saldo())  # 120

Ejercicio 6

Crear una clase Empleado con atributos nombre y salario. Implementar un método que calcule el salario anual.

Solución
class Empleado:
    def __init__(self, nombre, salario):
        self.nombre = nombre
        self.salario = salario

    def salario_anual(self):
        return self.salario * 12

Ejemplo de uso

empleado = Empleado("Ana", 1500)
print(empleado.salario_anual())  # 18000

Ejercicio 7

Crear una clase Animal con un método hablar. Crear subclases como Perro y Gato que implementen el método hablar.

Solución
class Animal:
    def hablar(self):
        raise NotImplementedError("Este método debe ser implementado por la subclase.")

class Perro(Animal):
    def hablar(self):
        return "Guau"

class Gato(Animal):
    def hablar(self):
        return "Miau"

Ejemplo de uso

perro = Perro()
gato = Gato()
print(perro.hablar())  # Guau
print(gato.hablar())   # Miau

Ejercicio 8

Crear una clase Tienda que gestione un inventario. Implementar métodos para agregar, eliminar y mostrar productos.

Solución
class Tienda:
    def __init__(self):
        self.inventario = {}

    def agregar_producto(self, producto, cantidad):
        if producto in self.inventario:
            self.inventario[producto] += cantidad
        else:
            self.inventario[producto] = cantidad

    def eliminar_producto(self, producto):
        if producto in self.inventario:
            del self.inventario[producto]

    def mostrar_inventario(self):
        return self.inventario

Ejemplo de uso

tienda = Tienda()
tienda.agregar_producto("Manzanas", 10)
tienda.agregar_producto("Peras", 5)
tienda.eliminar_producto("Peras")
print(tienda.mostrar_inventario())  # {'Manzanas': 10}

Ejercicio 9

Crear una clase Fracción con atributos numerador y denominador. Implementar un método para sumar dos fracciones.

Solución
class Fraccion:
    def __init__(self, numerador, denominador):
        self.numerador = numerador
        self.denominador = denominador

    def sumar(self, otra):
        nuevo_num = self.numerador * otra.denominador + otra.numerador * self.denominador
        nuevo_den = self.denominador * otra.denominador
        return Fraccion(nuevo_num, nuevo_den)

    def __str__(self):
        return f"{self.numerador}/{self.denominador}"

Ejemplo de uso

f1 = Fraccion(1, 2)
f2 = Fraccion(1, 3)
resultado = f1.sumar(f2)
print(resultado)  # 5/6

Ejercicio 10

Crear una clase Libro que contenga un atributo autores como una lista. Implementar un método para agregar y listar los autores.

Solución
class Libro:
    def __init__(self, titulo):
        self.titulo = titulo
        self.autores = []

    def agregar_autor(self, autor):
        self.autores.append(autor)

    def listar_autores(self):
        return self.autores

Ejemplo de uso

libro = Libro("Python Intermedio")
libro.agregar_autor("Autor 1")
libro.agregar_autor("Autor 2")
print(libro.listar_autores())  # ['Autor 1', 'Autor 2']