Desarrollo de un Sistema de Gestión de Entidades en Python

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 6,51 KB

Introducción al Sistema de Gestión de Pilotos y Equipos

Este documento presenta la implementación de una clase en Python, denominada Sistema, diseñada para gestionar la información de pilotos y equipos. Se detallan las funcionalidades clave para el registro, búsqueda y modificación de datos, así como la lógica para la asignación de cupos en los equipos y la identificación de pilotos destacados.

Clase Sistema: Gestión Centralizada

La clase Sistema actúa como el contenedor principal para las colecciones de pilotos y equipos, facilitando las operaciones sobre estos conjuntos de datos.

Constructor de la Clase Sistema

El método __init__ inicializa las listas vacías para almacenar los objetos Piloto y Equipo.

class Sistema():
    def __init__(self):
        self.pilotos = []
        self.equipos = []

Métodos de Gestión de Equipos

Estos métodos permiten la manipulación de los datos relacionados con los equipos.

registrar_equipo(self, codigo, nombre, anio)

Este método se encarga de crear una nueva instancia de Equipo y añadirla a la lista de equipos gestionados por el sistema.

    def registrar_equipo(self, codigo, nombre, anio):
        # Crea un objeto Equipo.
        un_equipo = Equipo(codigo, nombre, anio)
        # Guarda el equipo en la lista de equipos.
        self.equipos.append(un_equipo)

buscar_equipo(self, un_codigo)

Permite buscar un equipo específico utilizando su código identificador. Retorna el objeto Equipo si lo encuentra, o None en caso contrario.

    def buscar_equipo(self, un_codigo):
        # Busca el equipo por su ID; si lo encuentra, lo retorna.
        # Si termina de recorrer toda la lista, retorna None
        # porque no encontró el equipo con el ID.
        for eq in self.equipos:
            if eq.codigo == un_codigo:
                return eq
        return None

Métodos de Gestión de Pilotos

Estos métodos se centran en la administración de los datos de los pilotos.

registrar_piloto(self, codigo, nombre, fecha, ptos, equipo)

Registra un nuevo piloto en el sistema, creando una instancia de Piloto y añadiéndola a la lista correspondiente.

    def registrar_piloto(self, codigo, nombre, fecha, ptos, equipo):
        un_piloto = Piloto(codigo, nombre, fecha, ptos, equipo)
        self.pilotos.append(un_piloto)

buscar_piloto(self, un_codigo)

Busca un piloto por su código. Retorna el objeto Piloto si lo encuentra, o None si no existe.

    def buscar_piloto(self, un_codigo):
        for piloto in self.pilotos:
            if piloto.codigo == un_codigo:
                return piloto
        return None

Lógica de Negocio: Cupos y Rendimiento

La clase Sistema también implementa lógica de negocio específica para la gestión de cupos y el seguimiento del rendimiento de los pilotos.

hay_cupo_en_equipo(self, un_equipo)

Verifica si un equipo tiene cupos disponibles para nuevos pilotos. Se asume que un equipo tiene un máximo de dos pilotos.

    def hay_cupo_en_equipo(self, un_equipo):
        cantidad_cupos = 0
        # Recorre la lista de pilotos para verificar a qué equipo pertenece cada uno.
        for piloto in self.pilotos:
            # Pregunta a cada piloto si pertenece al equipo buscado.
            if piloto.equipo == un_equipo:
                cantidad_cupos += 1
        # Hay cupos libres si la cantidad de pilotos es menor a 2.
        hay_cupos_libres = cantidad_cupos < 2 # (True o False)
        return hay_cupos_libres

cambiar_equipo_del_piloto(self, piloto, nuevo_equipo)

Permite cambiar un piloto de equipo, siempre y cuando el nuevo equipo tenga cupo disponible. Retorna True si el cambio se realiza con éxito, False en caso contrario.

    def cambiar_equipo_del_piloto(self, piloto, nuevo_equipo):
        # Verifica si existe cupo libre en el nuevo equipo.
        if self.hay_cupo_en_equipo(nuevo_equipo):
            # Realiza el cambio de equipo.
            piloto.actualizar_equipo(nuevo_equipo)
            # Se realizó la actualización del equipo.
            return True
        return False

pilotos_en_primer_lugar(self)

Identifica y retorna una lista de todos los pilotos que tienen la puntuación máxima en el sistema.

    def pilotos_en_primer_lugar(self):
        lista_pilotos = []
        # Determina la puntuación máxima entre los pilotos.
        maximo = 0
        for piloto in self.pilotos:
            if piloto.puntos > maximo:
                maximo = piloto.puntos

        # Verifica qué pilotos tienen el puntaje máximo.
        for piloto in self.pilotos:
            if piloto.puntos == maximo:
                lista_pilotos.append(piloto)

        return lista_pilotos

Función de Interfaz de Usuario: Cambio de Equipo

Esta función independiente simula una interacción de usuario para cambiar el equipo de un piloto, solicitando los códigos necesarios y validando su existencia antes de realizar la operación.

def cambiar_equipo_del_piloto():
    # Solicita el código del piloto y verifica su existencia.
    codigo_piloto = int(input("Ingrese el código del piloto: "))
    piloto = sistema.buscar_piloto(codigo_piloto)

    if piloto is None:
        print("No existe piloto con ese código.")
        return

    # Solicita el código del nuevo equipo.
    codigo_equipo = input("Ingrese el ID del equipo: ")
    equipo = sistema.buscar_equipo(codigo_equipo)

    if equipo is None:
        print("No existe un equipo con ese código.")
        return

    cambio_realizado = sistema.cambiar_equipo_del_piloto(piloto, equipo)
    if cambio_realizado:
        print("Equipo actualizado con éxito.")
    else:
        print("No se pudo actualizar el equipo. El nuevo equipo no tiene cupo.")

Entradas relacionadas: