from colorama import Style, Fore 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 and nodo.dato < 1000: print (f''' __________ | | | {nodo.dato} | |________| ↓''') elif nodo.dato > 999: 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) # Método eliminar iguales def eliminariguales( self,d ): if self.cabeza == None: print(Fore.RED+'\n !Primero debe ingresar números!'+Style.RESET_ALL) else: nodoActual = self.cabeza c=0 while nodoActual != None: if nodoActual.dato == d: c=c+1 nodoActual=nodoActual.liga if c > 1: nodoActual = self.cabeza nodoAnterior = None print(Fore.YELLOW+'\n Fueron eliminados todos los números iguales de la lista '+Style.RESET_ALL) while nodoActual != None: if nodoActual.dato == d: if nodoAnterior is None: self.cabeza = nodoActual.liga nodoActual = nodoActual.liga else: nodoAnterior.liga=nodoActual.liga nodoActual.liga = None nodoActual=nodoAnterior.liga else: nodoAnterior=nodoActual nodoActual=nodoActual.liga elif c == 1: print(Fore.YELLOW+'\n El número no está repetido '+Style.RESET_ALL) else: print(Fore.RED+'\n Ese número no se encuentra'+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. ELiminar números iguales * * 7. Crear lista con cada dígito * * 8. Salir * ************************************************* ''')