from colorama import Fore, Style class nodo: def __init__(self, dato=None, liga = None): self.dato = dato self.liga = liga class lista: def __init__(self): self.cabeza = None self.liga= None def vacia(self): if self.cabeza is None: return True #Donde insertar def bdi (self, dato): previo=self.cabeza y=None while (previo is not None) and (previo.dato < dato): y=previo previo=previo.liga nuevo=nodo(dato) if y == None: nuevo.liga=self.cabeza self.cabeza = nuevo else: nuevo.liga=y.liga y.liga=nuevo # Método para eleminar nodos def bdb (self, d): if self.cabeza == None: print(Fore.RED+'\n !Primero debe ingresar números!'+Style.RESET_ALL) else: nodoActual = self.cabeza nodoAnterior = None while nodoActual and nodoActual.dato != d: nodoAnterior = nodoActual nodoActual = nodoActual.liga if nodoAnterior is None: self.cabeza = nodoActual.liga print(Fore.YELLOW+'\n Número eliminado '+Style.RESET_ALL) elif nodoActual: nodoAnterior.liga = nodoActual.liga nodoActual.liga = None print(Fore.YELLOW+'\n Número eliminado '+Style.RESET_ALL) else: print(Fore.RED+'\n Ese número no se encuentra'+Style.RESET_ALL) # Método para imprimir la lista de nodos def imprimirnodos( self ): if self.cabeza == None: print(Fore.RED+'\n !Primero debe ingresar números!'+Style.RESET_ALL) else: print(Fore.YELLOW+ f'''\n La lista es: '''+Style.RESET_ALL) nodo = self.cabeza while nodo != None: if nodo.dato > 9 and nodo.dato < 100: print(f''' __________ | | | {nodo.dato} | |________| ↓''') elif nodo.dato > 99: print (f''' __________ | | | {nodo.dato} | |________| ↓''') else: print(f''' _________ | | | {nodo.dato} | |_______| ↓''') nodo = nodo.liga print(f''' |-- ''') # Método promedio def promedio( self ): if self.cabeza == None: print(Fore.RED+'\n !Primero debe ingresar números!'+Style.RESET_ALL) else: suma=0 prom=0 cont=0 nodo = self.cabeza while nodo is not None: cont = cont + 1 suma=suma + nodo.dato nodo = nodo.liga if cont == 0: print(Fore.GREEN+ f'''\n !El promedio de los números es {nodo.dato}! '''+Style.RESET_ALL) else: prom=suma/cont print(Fore.GREEN+ f'''\n !El promedio de los números es {prom}! '''+Style.RESET_ALL) # Método mayor y menor def mayorymenor( self ): if self.cabeza == None: print(Fore.RED+'\n !Primero debe ingresar números!'+Style.RESET_ALL) else: may=0 men=10**10 nodo = self.cabeza while nodo is not None: if nodo.dato > may: may = nodo.dato if nodo.dato < men: men = nodo.dato nodo = nodo.liga print(Fore.GREEN+ f'''\n !El número mayor de la lista es {may}! '''+Style.RESET_ALL) print(Fore.GREEN+ f'''\n !El número menor de la lista es {men}! '''+Style.RESET_ALL) def opciones(): print(''' ************************************************* * Selecciona una opción del menú * * ------------------------------ * * 1. Agregar un número * * 2. Mostrar lista * * 3. Mostrar promedio * * 4. Mostrar Mayor y menor * * 5. Eliminar un número * * 6. Salir * ************************************************* ''')