def comics():
    '''Lista de superheroes de comics'''
    comic = Lista()
    nombre = [
        'Linterna Verde', 'Wolverine', 'Dr. Strange', 'Capitana Marvel',
        'Mujer Maravilla', 'Flash', 'Star-Lord', 'Joker'
    ]
    anio = [1940, 1974, 1963, 1968, 1941, 1940, 1976, 1940]
    casacomic = ['DC', 'Marvel', 'DC', 'Marvel', 'DC', 'DC', 'Marvel', 'DC']
    biografia = [
        'traje : color verde, arma : anillo de poder',
        'poderosa capacidad de regeneracion, tres garras retractiles en cada mano',
        'hechicero supremo', 'guerrera extraterrestre de la civilizacion Kree',
        'princesa guerrera de las Amazonas',
        'capacidad de correr, moverse y pensar extremadamente rapido',
        'policia interplanetario', 'criminal mas notable de Gotham City'
    ]
    marvel, dc = 0, 0
    for i in range(len(nombre)):
        insertar(comic, [nombre[i], anio[i], casacomic[i], biografia[i]])
    barrido_lista(comic)
    print()
    aux = comic.inicio
    while aux is not None:
        dato = aux.info
        if dato[0] == 'Linterna Verde':
            eliminar(comic, aux.info)
            print('Se elimino:', dato[0])
        if dato[0] == 'Wolverine':
            print(dato[0], ': aparecio en el anio', str(dato[1]))
        if dato[0] == 'Dr. Strange':
            dato[2] = 'Marvel'
            print(dato)
        if dato[3].find('traje') >= 0 or dato[3].find('armadura') >= 0:
            print(dato[0], 'lleva la palabra armadura/traje en su bio')
        if dato[1] < 1963:
            print('El personaje', dato[0], 'de la casa ', dato[2],
                  'aparecio antes del anio 1963')
        if dato[0] == 'Capitana Marvel' or dato[0] == 'Mujer Maravilla':
            print(dato[0], 'pertenece a la casa', dato[2])
        if dato[0] == 'Flash' or dato[0] == 'Star-Lord':
            print('Info de', dato[0], ':', dato[3])
        cad = dato[0]
        if cad[0] == 'B' or cad[0] == 'M' or cad[0] == 'S':
            print(dato[0], 'comienza con la letra B, M o S')
        if dato[2] == 'Marvel':
            marvel += 1
        if dato[2] == 'DC':
            dc += 1
        aux = aux.sig
    print('En la casa DC hay', dc, 'personajes')
    print('En la casa Marvel hay', marvel, 'personajes')
def dados():
    '''Juego de dados'''
    amigos = Lista()
    nombre = [
        'Marcelo Gallardo', 'Juanfer Quintero', 'Franco Armani',
        'Nacho Scocco', 'Burrito Ortega', 'Enzo Francescoli', 'Javier Pinola',
        'Matias Biscay'
    ]
    dato = ['']
    for i in range(len(nombre)):
        dato[0] = nombre[i]
        dato[1] = randint(0, 100)
        insertar(amigos, dato)
    barrido_lista(amigos)
def parimpar(l):
    '''Dividie una lista dada en dos, una con numeros pares y otra
    con numeros impares'''
    lista_par, lista_impar = Lista(), Lista()
    aux = l.inicio
    while aux is not None:
        if aux.info % 2 == 0:
            insertar(lista_par, aux.info)
        else:
            insertar(lista_impar, aux.info)
        aux = aux.sig
    print('Lista par')
    barrido_lista(lista_par)
    print('Lista impar')
    barrido_lista(lista_impar)
 def lista_sin_repetidos(l1, l2):
     '''Concatena dos listas en una sola omitiendo los datos repetidos'''
     lsr = Lista()
     aux = l1.inicio
     while aux is not None:
         if busqueda_lista(lsr, aux.info) is None:
             insertar(lsr, aux.info)
         aux = aux.sig
     aux = l2.inicio
     while aux is not None:
         if busqueda_lista(lsr, aux.info) is None:
             insertar(lsr, aux.info)
         aux = aux.sig
     print('Lista concatenada sin repetidos')
     barrido_lista(lsr)
     print('Datos repetidos:', tamanio_lista(lsr))
def proyecto_software():
    '''Actividades de un proyecto de software'''
    lista, en_tiempo, fuera_tiempo = Lista(), Lista(), Lista()
    persona = ['Gerardo', 'Martina', 'Lucia', 'Geovanni', 'Jessica', 'Laura']
    prom_tareas, costo_total = 0, 0
    df = ''
    for i in range(5):
        costo = randint(0, 50000)
        tde = randint(1, 10)
        fdi = [2020, randint(1, 12), randint(1, 31)]
        fdfest = [2020, randint(1, 12), randint(1, 31)]
        fdfefc = [2020, randint(1, 12), randint(1, 31)]
        pac = choice(persona)
        tarea = [costo, tde, fdi, fdfest, fdfefc, pac]
        insertar(lista, tarea)
    print(
        'Costo | Tiempo de ejec. | Fecha de inicio | Fecha de fin estimada | Fecha de fin efectiva | Persona a cargo'
    )
    barrido_lista(lista)
    print()
    aux = lista.inicio
    while aux is not None:
        dato = aux.info
        # a
        prom_tareas += dato[1]
        # b
        costo_total += dato[0]
        # c
        if dato[5]:
            print()
            print('Persona:', dato[5])
            print('Actividades que realiza:')
            print('Coste de la actividad:', dato[0], 'ARS')
            print('Tiempo de ejecucion:', dato[1])
        # d
        if dato[2][1] > 5 and dato[3][1] > 5:
            df = [dato[0], dato[1], dato[2], dato[3]]
        # e
        if dato[3][0] > dato[4][0] and dato[3][1] > dato[4][1]:
            insertar(fuera_tiempo, [dato[0], dato[1], dato[5]])
        else:
            insertar(en_tiempo, [dato[0], dato[1], dato[5]])
        aux = aux.sig
    prom_tareas = prom_tareas / tamanio_lista(lista)
    print()
    print('Tiempo promedio de tareas', prom_tareas)
    print('Costo total del proyecto', costo_total, 'ARS')
    print('Tareas a realizar entre dos fechas dadas(a partir de Junio):')
    print(df)
    print()
    print('Tareas finalizadas en tiempo estipulado')
    barrido_lista(en_tiempo)
    print()
    if not lista_vacia(fuera_tiempo):
        print('Tareas fuera de tiempo')
        barrido_lista(fuera_tiempo)
    else:
        print('No hay tareas fuera de tiempo')
def spotify():
    '''Lista de canciones de Spotify'''
    lista = Lista()
    datos = Cancion('Habia una vez...', 'Indio Solari', 4.47,
                    randint(100000, 100000000))
    insertar(lista, datos, 'nombre')
    datos = Cancion('Los Dinosaurios', 'Charly García', 3.28,
                    randint(100000, 100000000))
    insertar(lista, datos, 'nombre')
    datos = Cancion('Crimen', 'Gustavo Cerati', 3.52,
                    randint(100000, 100000000))
    insertar(lista, datos, 'nombre')
    datos = Cancion('Frijolero', 'Molotov', 3.30, randint(100000, 100000000))
    insertar(lista, datos, 'nombre')
    datos = Cancion('Figuración', 'Almendra', 3.33, randint(100000, 100000000))
    insertar(lista, datos, 'nombre')
    print()
    print('NOMBRE | ARTISTA | DURACION | REPRODUCCIONES')
    barrido_lista(lista)
    print()
    larga = 0
    aux = lista.inicio
    while aux is not None:
        if aux.info.duracion > larga:
            info = aux.info
            larga = aux.info.duracion
        if aux.info.artista == 'Artic Monkeys':
            print('La cancion', aux.info.nombre, 'pertenece a Artic Monkeys')
        if len(aux.info.artista.split()) == 1:
            print(aux.info.artista, 'lleva una sola palabra')
        aux = aux.sig
    print()
    print('La cancion mas larga es:', info.nombre)
    print('Artista:', info.artista)
    print('Duracion:', info.duracion)
    print('Reproducciones:', info.reproducciones)
Exemple #7
0
def agregar_ta(tabla, hash, dato, criterio=None):
    '''Agrega elementos a una tabla abierta'''
    pos = hash(dato, tabla)
    if tabla[pos] is None:
        tabla[pos] = Lista()
    insertar(tabla[pos], dato, criterio)
def punto_4():
    lista, laux = Lista(), Lista()
    avengers = ['Spider-Man', 'X-Men', 'Dr. Strange', 'Groot']
    insertar(laux, 'Iron Man')
    insertar(laux, 'Groot')
    insertar(laux, 'Falcon')
    insertar(laux, 'Vision')
    for i in range(5):
        insertar(lista, choice(avengers))
    print('Personajes de Avengers:')
    barrido_lista(lista)
    print()
    # barrido_lista(laux)
    # print()
    aux = lista.inicio
    cont = 0
    while aux is not None:
        # a
        if aux.info == 'Spider-Man':
            print('Spider-Man se encuentra en la posicion', cont)
        # b
        if aux.info == 'Dr. Strange':
            aux.info = 'Doctor Strange'
        cont += 1
        aux = aux.sig

    aux = laux.inicio
    while aux is not None:
        # c
        if busqueda_lista(lista, aux.info, 'nombre') is None:
            insertar(lista, aux.info)
        aux = aux.sig
    print()
    print('NUEVA LISTA')
    barrido_lista(lista)
def github():
    repositorio = Lista()
    user = Usuario('elchiche32')
    insertar(repositorio, user, 'nombre')
    user = Usuario('taunus99')
    insertar(repositorio, user, 'nombre')
    user = Usuario('rickyfort')
    insertar(repositorio, user, 'nombre')
    user = Usuario('oktubr3')
    insertar(repositorio, user, 'nombre')
    commit = Commit('test.py', '11-11-20 19:00', 'testeo de la app', 46)
    pos = busqueda_lista(repositorio, 'elchiche32', 'nombre')
    insertar(pos.sublista, commit, 'archivo')
    commit = Commit('data.py', '11-11-20 19:00', 'correccion error', 120)
    pos = busqueda_lista(repositorio, 'elchiche32', 'nombre')
    insertar(pos.sublista, commit, 'archivo')
    commit = Commit('object.java', '11-11-20 19:00', 'modelado del objeto', 0)
    pos = busqueda_lista(repositorio, 'taunus99', 'nombre')
    insertar(pos.sublista, commit, 'archivo')
    commit = Commit('app.py', '11-11-20 19:00', 'basta chicos', -34)
    pos = busqueda_lista(repositorio, 'rickyfort', 'nombre')
    insertar(pos.sublista, commit, 'archivo')
    commit = Commit('front.html', '11-11-20 19:00', 'update', 87)
    pos = busqueda_lista(repositorio, 'oktubr3', 'nombre')
    insertar(pos.sublista, commit, 'archivo')
    commit = Commit('vista.css', '11-11-20 19:00', 'update', -2)
    pos = busqueda_lista(repositorio, 'oktubr3', 'nombre')
    insertar(pos.sublista, commit, 'archivo')
    # barrido lista
    print('COLABORADORES')
    barrido_lista(repositorio)
    print()
    aux = repositorio.inicio
    # barrido sublista
    while aux is not None:
        print('Colaborador:', aux.info)
        print('ARCHIVO | TIMESTAMP | COMENTARIO | LINEAS MODIFICADAS')
        barrido_sublista(aux.sublista)
        print()
        aux = aux.sig

    # a
    aux = repositorio.inicio
    mayor_commit = 0
    while aux is not None:
        if tamanio_lista(aux.sublista) > mayor_commit:
            mayor_commit = tamanio_lista(aux.sublista)
        aux = aux.sig
    aux = repositorio.inicio
    while aux is not None:
        if tamanio_lista(aux.sublista) == mayor_commit:
            print('Colaborador con mayor cantidad de commits:', aux.info)
            print('Cantidad de commits:', mayor_commit)
        aux = aux.sig
    print()

    # b
    mayor = 0
    usuario_mayor = ''
    aux = repositorio.inicio
    while aux is not None:
        sublista = aux.sublista.inicio
        mayor_aux = 0
        while sublista is not None:
            mayor_aux += sublista.info.cant_lineas
            sublista = sublista.sig
        if mayor_aux > mayor:
            mayor = mayor_aux
            usuario_mayor = aux.info.nombre
        aux = aux.sig
    print('El usuario', usuario_mayor, 'agrego la mayor cantidad de lineas:',
          mayor)

    menor = 0
    usuario_menor = ''
    aux = repositorio.inicio
    while aux is not None:
        sublista = aux.sublista.inicio
        menor_aux = 0
        while sublista is not None:
            menor_aux += sublista.info.cant_lineas
            sublista = sublista.sig
        if menor_aux < menor:
            menor = menor_aux
            usuario_menor = aux.info.nombre
        aux = aux.sig
    print('El usuario', usuario_menor, 'elimino la mayor cantidad de lineas:',
          menor)

    # c
    aux = repositorio.inicio
    while aux is not None:
        pos = busqueda_lista(aux.sublista, 'test.py', 'archivo')
        if pos is not None:
            print('El usuario', aux.info, 'realizo cambios en test.py')
        aux = aux.sig

    # d
    aux = repositorio.inicio
    while aux is not None:
        pos = busqueda_lista(aux.sublista, 0, 'cant_lineas')
        if pos is not None:
            print('El usuario', aux.info, 'realizo un commit con 0 lineas')
        aux = aux.sig
    print()

    # e
    aux = repositorio.inicio
    while aux is not None:
        pos = busqueda_lista(aux.sublista, 'app.py', 'archivo')
        if pos is not None:
            print('El usuario', aux.info, 'realizo cambios en app.py')
            print('ARCHIVO | TIMESTAMP | COMENTARIO | LINEAS MODIFICADAS')
            barrido_sublista(aux.sublista)
        aux = aux.sig
def aeropuerto_creta():
    '''Vuelos del aeropuerto de Heraklion en Creta'''
    vuelos, vuelos_destinos, turista_disponible = Lista(), Lista(), Lista()
    monto_vuelos, vuelos_junio, lista_aux = Lista(), Lista(), Lista()
    nom_empr = [
        'Qatar Airways', 'Singapore Airlines', 'Fly Emirates', 'Iberia',
        'Turkish Airlines'
    ]
    ciudad_dest = [
        'Atenas', 'Miconos', 'Rodas', 'Tailandia', 'Nicosia', 'Ulan Bator',
        'Yakarta', 'El Brillante'
    ]
    estado = ['Ocupado', 'Desocupado']
    clase = ['Primera Clase', 'Turista']
    nro = 1
    for i in range(len(nom_empr)):
        empresa = nom_empr[i]
        num_vuelo = randint(1000, 10000)
        asientos = randint(40, 80)
        fds = [2020, randint(1, 12), randint(1, 31)]
        destino = choice(ciudad_dest)
        kms_vuelo = randint(400, 5000)
        datos_avion = [empresa, num_vuelo, asientos, fds, destino, kms_vuelo]
        insertar(vuelos, datos_avion)
        for j in range(asientos):
            as_avion = busqueda_lista_vec(vuelos, empresa, 0)
            if as_avion is not None:
                as_nro = nro
                nro += 1
                as_estado = choice(estado)
                as_clase = choice(clase)
                datos_asientos = [as_nro, as_estado, as_clase]
                insertar(as_avion.sublista, datos_asientos)
    print(
        'EMPRESA | NUM. VUELO | ASIENTOS | FECHA DE SALIDA | DESTINO | KMS. VUELO'
    )
    barrido_lista(vuelos)
    print()
    aux = vuelos.inicio
    km = aux.info[5]
    monto_turista, monto_pc = 0, 0
    while aux is not None:
        print('Datos de asientos:', aux.info[0])
        print('Cantidad de asientos:', tamanio_lista(aux.sublista))
        # print('ASIENTOS TOTALES | ESTADO | CLASE')
        # barrido_sublista(aux.sublista)
        print()
        # a
        if aux.info[4] == 'Atenas' or aux.info[4] == 'Miconos' or aux.info[
                4] == 'Rodas':
            insertar(vuelos_destinos, aux.info)
        # d
        # vuelos disponibles desde junio en adelante
        if aux.info[3][1] >= 6:
            insertar(vuelos_junio, aux.info)
        # b
        avion = aux.sublista.inicio
        while avion is not None:
            if avion.info[1] == 'Desocupado' and avion.info[2] == 'Turista':
                insertar(turista_disponible, aux.info)
                break
        # c
            if avion.info[1] == 'Ocupado':
                if avion.info[2] == 'Turista':
                    monto_turista += (75 * km)
                else:
                    monto_pc += (203 * km)
            avion = avion.sig
        montos = [aux.info[0], aux.info[1], monto_turista, monto_pc]
        insertar(monto_vuelos, montos)
        aux = aux.sig
    # e
    nro_vuelo = int(input('Ingrese el numero de vuelo: '))
    nro_as = int(input('Ingrese el numero del asiento: '))
    clase = input('Ingrese la clase: ')
    estado_asiento = 'Ocupado'
    datos_venta_pasaje = [nro_as, estado_asiento, clase]
    pos = busqueda_lista_vec(vuelos, nro_vuelo, 1)
    if pos is None:
        print('El vuelo no existe')
    else:
        aux = vuelos.inicio
        insertar(as_avion.sublista, datos_venta_pasaje)
        print('**** Se ha vendido el pasaje ****')
        print('N°Vuelo | N°Asiento | Clase')
        print(datos_venta_pasaje)
        print()
        aux = aux.sig
    # f
    eliminar_vuelo = int(
        input('Ingrese el numero de vuelo que desea eliminar: '))
    pos = busqueda_lista_vec(vuelos, eliminar_vuelo, 1)
    if pos is None:
        print('El vuelo no existe')
    else:
        aux = vuelos.inicio
        eliminar(vuelos, eliminar_vuelo, 1)
        lista_aux = as_avion.sublista
        print('Vuelo eliminado')
        aux = aux.sig
    print()
    print('Vuelos con destino a Atenas, Miconos o Rodas:')
    barrido_lista(vuelos_destinos)
    print()
    print('Vuelos con asientos clase turista disponible:')
    barrido_lista(turista_disponible)
    print()
    print(
        'Recaudado por cada vuelo, turista $75 x km y primera clase $203 x km')
    print('EMPRESA | NUM. VUELO | $ TURISTA | $ PRIMERA CLASE')
    barrido_lista(monto_vuelos)
    print()
    print('Vuelos disponibles entre junio y diciembre:')
    barrido_lista(vuelos_junio)
    print()
    print('Se elimino el vuelo', eliminar_vuelo)
    print('Pasajeros del vuelo eliminado:')
    barrido_lista(lista_aux)
    print()
def pokemon():
    lista = Lista()
    pokemon = [
        'Bulbasaur', 'Charmander', 'Squirtle', 'Pikachu', 'Spearow', 'Dugtrio',
        'Primeape', 'Terrakion', 'Tyrantrum', 'Wingull'
    ]
    tipo = ['Fuego', 'Agua', 'Electrico', 'Normal', 'Veneno']
    subtipo = ['Tierra', '-', 'Planta', 'Agua', '-', 'Volador']
    dato = Entrenador('Ranchero', randint(0, 10), randint(50, 200),
                      randint(0, 100))
    insertar(lista, dato, 'entrenador')
    dato = Entrenador('Alevin', randint(0, 10), randint(50, 200),
                      randint(0, 100))
    insertar(lista, dato, 'entrenador')
    dato = Entrenador('Pescador', randint(0, 10), randint(50, 200),
                      randint(0, 100))
    insertar(lista, dato, 'entrenador')
    for i in range(2):
        poke = Pokemon(choice(pokemon), randint(1, 20), choice(tipo),
                       choice(subtipo))
        pos = busqueda_lista(lista, 'Ranchero', 'entrenador')
        insertar(pos.sublista, poke, 'pokemon')
    for i in range(3):
        poke = Pokemon(choice(pokemon), randint(1, 20), choice(tipo),
                       choice(subtipo))
        pos = busqueda_lista(lista, 'Alevin', 'entrenador')
        insertar(pos.sublista, poke, 'pokemon')
    for i in range(4):
        poke = Pokemon(choice(pokemon), randint(1, 20), choice(tipo),
                       choice(subtipo))
        pos = busqueda_lista(lista, 'Pescador', 'entrenador')
        insertar(pos.sublista, poke, 'pokemon')
    # d
    print('NOMBRE | TORNEOS GAN. | VICTORIAS | DERROTAS')
    barrido_lista(lista)
    print()
    aux = lista.inicio
    # barrido sublista
    while aux is not None:
        print('Entrenador:', aux.info.entrenador)
        print('NOMBRE | NIVEL | TIPO | SUBTIPO')
        barrido_sublista(aux.sublista)
        print()
        aux = aux.sig

    # a
    aux = lista.inicio
    print('Cantidad de Pokemons de un determinado entrenador')
    entr = input('Ingrese nombre del entrenador: ')
    while aux is not None:
        pos = busqueda_lista(lista, entr, 'entrenador')
        if pos is not None:
            print(aux.info.entrenador, 'posee', tamanio_lista(aux.sublista),
                  'pokemones')
        else:
            print('El entrenador no existe')
            break
        aux = aux.sig
    print()

    # b
    aux = lista.inicio
    print('Entrenadores que ganaron mas de 3 torneos')
    while aux is not None:
        if aux.info.t_ganados >= 3:
            print(aux.info.entrenador + ':', aux.info.t_ganados, 'torneos')
        aux = aux.sig
    print()

    # c
    aux = lista.inicio
    mg, mn = 0, 0
    while aux is not None:
        if aux.info.t_ganados > mg:
            mg = aux.info.t_ganados
            mas_ganador = aux.info.entrenador
        buscado = busqueda_lista(aux.info.entrenador, mas_ganador,
                                 'entrenador')
        if buscado is not None:
            sublista = aux.sublista.inicio
            while sublista is not None:
                if sublista.info.nivel > mn:
                    mn = sublista.info.nivel
                    mayor_nivel = sublista.info.pokemon
                sublista = sublista.sig
        aux = aux.sig
    print('El entrenador mas ganador es', mas_ganador, 'con', mg, 'torneos')
    print('Su pokemon de mayor nivel es', mayor_nivel, 'con nivel', mn)
    print()

    # e
    aux = lista.inicio
    while aux is not None:
        batallas_totales = aux.info.b_ganadas + aux.info.b_perdidas
        porcentaje_batallas = (aux.info.b_ganadas * 100) / batallas_totales
        if porcentaje_batallas > 79:
            print(aux.info.entrenador,
                  'tiene un porcentaje de batalladas ganadas mayor a 79%')
        aux = aux.sig
    print()

    # f
    aux = lista.inicio
    while aux is not None:
        sublista = aux.sublista.inicio
        while sublista is not None:
            if sublista.info.tipo == 'Fuego' and sublista.info.subtipo == 'Planta':
                print(aux.info.entrenador,
                      'posee un pokemon tipo fuego y subtipo planta, llamado',
                      sublista.info.pokemon)
            if sublista.info.tipo == 'Agua' and sublista.info.subtipo == 'Volador':
                print(aux.info.entrenador,
                      'posee un pokemon tipo agua y subtipo volador, llamado',
                      sublista.info.pokemon)
            sublista = sublista.sig
        aux = aux.sig
    print()

    # g
    aux = lista.inicio
    while aux is not None:
        sublista = aux.sublista.inicio
        cont_nivel = 0
        while sublista is not None:
            cont_nivel += sublista.info.nivel
            prom_nivel = cont_nivel / tamanio_lista(aux.sublista)
            sublista = sublista.sig
        # round redondea el valor prom_nivel a 2 digitos despues de la coma
        print(aux.info.entrenador + ', promedio de nivel de sus pokemons:',
              round(prom_nivel, 2))
        aux = aux.sig
    print()

    # h
    aux = lista.inicio
    cont = 0
    poke = input('Ingrese nombre de pokemon a buscar: ')
    while aux is not None:
        pos = busqueda_lista(aux.sublista, poke, 'pokemon')
        if pos is not None:
            cont += 1
        aux = aux.sig
    print(cont, 'entrenadores tienen al pokemon', poke)
    print()

    # j
    aux = lista.inicio
    while aux is not None:
        sublista = aux.sublista.inicio
        while sublista is not None:
            if sublista.info.pokemon == 'Tyrantrum' or sublista.info.pokemon == 'Terrakion' or sublista.info.pokemon == 'Wingull':
                print(aux.info.entrenador, 'tiene al pokemon',
                      sublista.info.pokemon)
            sublista = sublista.sig
        aux = aux.sig
    print()

    # k
    aux = lista.inicio
    print('Busca un entrenador y sus pokemones')
    entr = input('Ingrese nombre de entrenador a buscar: ')
    poke = input('Ingrese nombre de pokemon a buscar: ')
    while aux is not None:
        sublista = aux.sublista.inicio
        while sublista is not None:
            if entr == aux.info.entrenador and poke == sublista.info.pokemon:
                print()
                print('NOMBRE | TORNEOS GAN. | VICTORIAS | DERROTAS')
                print(aux.info)
                print()
                print('NOMBRE | NIVEL | TIPO | SUBTIPO')
                print(sublista.info)
            sublista = sublista.sig
        aux = aux.sig
def saga_starwars():
    lista = Lista()
    datos = Personaje('Darth Vader', 2.03, 37, 'M', 'Humano', 'Polis Massa',
                      [3, 4, 5, 6])
    insertar(lista, datos, 'nombre')
    datos = Personaje('Han Solo', 1.85, 66, 'M', 'Humano', 'Corellia',
                      [1, 2, 3, 4, 5, 6, 7, 8])
    insertar(lista, datos, 'nombre')
    datos = Personaje('R2D2', 1.09, 67, 'M', 'Droide', 'Naboo',
                      [1, 2, 3, 4, 5, 6, 7, 8, 9])
    insertar(lista, datos, 'nombre')
    datos = Personaje('C3PO', 1.75, 54, 'M', 'Droide', 'Tatooine',
                      [1, 2, 3, 4, 5, 6, 7, 8, 9])
    insertar(lista, datos, 'nombre')
    datos = Personaje('Yoda', 0.66, 900, 'M', 'Yoda', 'Desconocido',
                      [1, 2, 3, 4, 5, 6, 7, 8, 9])
    insertar(lista, datos, 'nombre')
    datos = Personaje('Rey Skywalker', 1.70, 20, 'F', 'Humano', 'Jakku',
                      [7, 8, 9])
    insertar(lista, datos, 'nombre')
    datos = Personaje('Chewbacca', 2.30, 140, 'M', 'Wookiee', 'Kashyyyk',
                      [1, 2, 3, 4, 5, 6, 7, 8, 9])
    insertar(lista, datos, 'nombre')
    datos = Personaje('Breha Organa', 1.63, 38, 'F', 'Humano', 'Alderaan',
                      [1, 2, 3, 4, 5, 6, 7, 8, 9])
    insertar(lista, datos, 'nombre')
    print(
        'NOMBRE | ALTURA | EDAD | GENERO | ESPECIE | PLANETA NATAL | APARICIONES'
    )
    barrido_lista(lista)
    print()

    # a
    aux = lista.inicio
    while aux is not None:
        if aux.info.genero == 'F':
            print(aux.info.nombre, 'personaje femenino')
        aux = aux.sig
    print()

    # b
    aux = lista.inicio
    while aux is not None:
        if aux.info.especie == 'Droide' and len(aux.info.episodios) >= 6:
            print(aux.info.nombre, 'es un droide')
        aux = aux.sig
    print()

    # c
    aux = lista.inicio
    while aux is not None:
        if aux.info.nombre == 'Darth Vader' or aux.info.nombre == 'Han Solo':
            print('NOMBRE:', aux.info.nombre)
            print('ALTURA:', aux.info.altura)
            print('EDAD:', aux.info.edad)
            print('GENERO:', aux.info.genero)
            print('ESPECIE:', aux.info.especie)
            print('PLANETA NATAL:', aux.info.planeta_natal)
            print('APARICIONES:', aux.info.episodios)
            print()
        aux = aux.sig
    print()

    # d
    aux = lista.inicio
    while aux is not None:
        aux = aux.sig
        if 4 in aux.info.episodios and 5 in aux.info.episodios and 6 in aux.info.episodios and 7 in aux.info.episodios:
            print(aux.info.nombre,
                  'aparece en al menos un episodio desde el IV al VII')
        aux = aux.sig
    print()

    # e
    mayor = 0
    aux = lista.inicio
    while aux is not None:
        if aux.info.edad >= 850 and aux.info.edad > mayor:
            print(aux.info.nombre, 'tiene mas de 850 anios')
            info = aux.info
            mayor = aux.info.edad
        aux = aux.sig
    print(info.nombre, 'es el personaje mas antiguo, con', info.edad, 'anios')
    print()

    # g
    aux = lista.inicio
    while aux is not None:
        if aux.info.planeta_natal == 'Alderaan':
            print(aux.info.nombre, 'pertenece a Alderaan')
        aux = aux.sig
    print()

    # h
    aux = lista.inicio
    while aux is not None:
        if aux.info.altura < 0.70:
            print(aux.info.nombre, 'mide menos de 70 centimetros')
        aux = aux.sig
    print()

    # i (inc)
    aux = lista.inicio
    while aux is not None:
        if aux.info.nombre == 'Chewbacca':
            print('NOMBRE:', aux.info.nombre)
            print('ALTURA:', aux.info.altura)
            print('EDAD:', aux.info.edad)
            print('GENERO:', aux.info.genero)
            print('ESPECIE:', aux.info.especie)
            print('PLANETA NATAL:', aux.info.planeta_natal)
            print('APARICIONES:', aux.info.episodios)
            print()
        aux = aux.sig
    print()

    # f
    aux = lista.inicio
    while aux is not None:
        if 4 in aux.info.episodios and 5 in aux.info.episodios and 6 in aux.info.episodios and len(
                aux.info.episodios) == 3:
            elim = eliminar(lista, aux.info)
            print('Eliminado:', elim.nombre)
        aux = aux.sig
    print()
def lista_alumnos():
    lista = Lista()
    materias = [
        'Estiramiento', 'Cardio', 'Juego con los pies', 'Retención',
        'Saque abajo', 'Saque arriba', 'Centros', 'Psicología'
    ]
    dato = Alumno('Armani', 'Franco', 1)
    insertar(lista, dato, 'apellido')
    dato = Alumno('Lux', 'Germán', 14)
    insertar(lista, dato, 'apellido')
    dato = Alumno('Bologna', 'Enrique', 25)
    insertar(lista, dato, 'apellido')
    dato = Alumno('Centurión', 'Ezequiel', 12)
    insertar(lista, dato, 'apellido')
    for i in range(3):
        datos = Parcial(choice(materias), randint(9, 10), date(2020, 12, 9))
        pos = busqueda_lista(lista, 1, 'legajo')
        insertar(pos.sublista, datos, 'materia')
    for i in range(3):
        datos = Parcial(choice(materias), randint(4, 8), date(2020, 12, 9))
        pos = busqueda_lista(lista, 12, 'legajo')
        insertar(pos.sublista, datos, 'materia')
    for i in range(3):
        datos = Parcial(choice(materias), randint(2, 7), date(2020, 12, 9))
        pos = busqueda_lista(lista, 14, 'legajo')
        insertar(pos.sublista, datos, 'materia')
    for i in range(3):
        datos = Parcial(choice(materias), randint(5, 10), date(2020, 12, 9))
        pos = busqueda_lista(lista, 25, 'legajo')
        insertar(pos.sublista, datos, 'materia')

    # a
    print('APELLIDO | NOMBRE | LEGAJO')
    barrido_lista(lista)
    print()

    # sublista
    aux = lista.inicio
    while aux is not None:
        print('Alumno:', aux.info.apellido + ', ' + aux.info.nombre)
        print('MATERIA | NOTA | FECHA')
        barrido_sublista(aux.sublista)
        aux = aux.sig
        print()

    aux = lista.inicio
    while aux is not None:
        # b
        promedio = 0
        sublista = aux.sublista.inicio
        control = True
        while sublista is not None:
            if sublista.info.nota < 6:
                control = False
            promedio += sublista.info.nota
            sublista = sublista.sig
        if control and tamanio_lista(aux.sublista) > 0:
            print('Aprobo todos los examenes:', aux.info.apellido,
                  aux.info.nombre)
        # e
        if tamanio_lista(aux.sublista) > 0:
            promedio = promedio / tamanio_lista(aux.sublista)
            print(aux.info.apellido, aux.info.nombre, 'promedio:',
                  round(promedio, 2))
        # c
        if (promedio > 8.89):
            print('Promedio mayor a 8.89:', aux.info.apellido, aux.info.nombre,
                  round(promedio, 2))
        # d
        if (aux.info.apellido[0].upper() == 'L'):
            print(aux.info.apellido, aux.info.nombre, 'empieza con la letra L')

        aux = aux.sig
def lista_peliculas():
    lista, lista_ranking = Lista(), Lista()
    datos = Peliculas('El Padrino', randint(0, 10), 1972,
                      randint(50000000, 500000000))
    insertar(lista, datos, 'nombre')
    datos = Peliculas('Goodfellas', randint(0, 10), 1990,
                      randint(50000000, 500000000))
    insertar(lista, datos, 'nombre')
    datos = Peliculas('El Irlandés', randint(0, 10), 2019,
                      randint(50000000, 500000000))
    insertar(lista, datos, 'nombre')
    datos = Peliculas('Casino', randint(0, 10), 1995,
                      randint(50000000, 500000000))
    insertar(lista, datos, 'nombre')
    datos = Peliculas('Sicario', randint(0, 10), 2015,
                      randint(50000000, 500000000))
    insertar(lista, datos, 'nombre')
    print(
        '   NOMBRE   |  VALORACION(0-10) |  AÑO DE ESTRENO | RECAUDACION(USD)')
    barrido_lista(lista)
    print()

    # a
    aux = lista.inicio
    buscado = int(input('Ingrese un año de estreno: '))
    while aux is not None:
        if buscado == aux.info.año_estreno:
            print(aux.info.nombre, 'se estreno en el año', buscado)
        aux = aux.sig
    print()

    # b
    mas_recuadacion = 0
    mayor_peli = ''
    aux = lista.inicio
    while aux is not None:
        if aux.info.recaudacion > mas_recuadacion:
            mayor_peli = aux.info
        aux = aux.sig
    print('Pelicula que mas recaudo y sus datos')
    print(' NOMBRE  | VALORACION(0-10)| AÑO DE ESTRENO | RECAUDACION(USD)')
    print(mayor_peli)
    print()

    # c
    aux = lista.inicio
    mas_valor = 0
    while aux is not None:
        if aux.info.valoracion > mas_valor:
            mas_valor = aux.info.valoracion
        aux = aux.sig
    aux = lista.inicio
    while aux is not None:
        if aux.info.valoracion == mas_valor:
            print(aux.info.nombre, 'tiene la valoracion mas alta,', mas_valor,
                  'puntos')
        aux = aux.sig
    print()

    # d
    print('Ingrese criterio de orden: ')
    print('* nombre')
    print('* valoracion')
    print('* año_estreno')
    print('* recaudacion')
    criterio = input()
    aux = lista.inicio
    while aux is not None:
        insertar(lista_ranking, aux.info, criterio)
        aux = aux.sig
    print()
    if criterio == 'nombre':
        print('Lista ordenada por nombre:')
        barrido_lista(lista_ranking)
    elif criterio == 'valoracion':
        print('Lista ordenada por valoracion:')
        barrido_lista(lista_ranking)
    elif criterio == 'año_estreno':
        print('Lista ordenada por año de estreno:')
        barrido_lista(lista_ranking)
    elif criterio == 'recaudacion':
        print('Lista ordenada por recaudacion:')
        barrido_lista(lista_ranking)
def empresa_meteorologica():
    lista = Lista()
    paises = [
        'Myanmar', 'Laos', 'Vietnam', 'Indonesia', 'Malasia', 'Singapur',
        'Brunei', 'Sri Lanka'
    ]
    estado = [
        'soleado', 'nublado', 'lloviendo', 'nevando', 'tormenta eléctrica',
        'huracanes'
    ]
    datos = Estacion('Invierno', choice(paises), randint(-90, 90),
                     randint(-180, 180), randint(0, 2000))
    insertar(lista, datos, 'estacion')
    datos = Estacion('Otoño', choice(paises), randint(-90, 90),
                     randint(-180, 180), randint(0, 2000))
    insertar(lista, datos, 'estacion')
    datos = Estacion('Primavera', choice(paises), randint(-90, 90),
                     randint(-180, 180), randint(0, 2000))
    insertar(lista, datos, 'estacion')
    datos = Estacion('Verano', choice(paises), randint(-90, 90),
                     randint(-180, 180), randint(0, 2000))
    insertar(lista, datos, 'estacion')
    for i in range(1):
        datos = Medicion(randint(0, 10), randint(700, 800), randint(0, 100),
                         choice(estado),
                         date(2020, randint(1, 12), randint(1, 30)),
                         time((randint(00, 23)), (randint(00, 59))))
        pos = busqueda_lista(lista, 'Invierno', 'estacion')
        insertar(pos.sublista, datos, 'estacion')
    for i in range(1):
        datos = Medicion(randint(10, 25), randint(700, 800), randint(0, 100),
                         choice(estado),
                         date(2020, randint(1, 12), randint(1, 30)),
                         time((randint(00, 23)), (randint(00, 59))))
        pos = busqueda_lista(lista, 'Otoño', 'estacion')
        insertar(pos.sublista, datos, 'estacion')
    for i in range(1):
        datos = Medicion(randint(15, 30), randint(700, 800), randint(0, 100),
                         choice(estado),
                         date(2020, randint(1, 12), randint(1, 30)),
                         time((randint(00, 23)), (randint(00, 59))))
        pos = busqueda_lista(lista, 'Primavera', 'estacion')
        insertar(pos.sublista, datos, 'estacion')
    for i in range(1):
        datos = Medicion(randint(20, 40), randint(700, 800), randint(0, 100),
                         choice(estado),
                         date(2020, randint(1, 12), randint(1, 30)),
                         time((randint(00, 23)), (randint(00, 59))))
        pos = busqueda_lista(lista, 'Verano', 'estacion')
        insertar(pos.sublista, datos, 'estacion')
    # a
    print(' ESTACION | PAIS | LATITUD | LONGUITD | ALTITUD')
    barrido_lista(lista)
    print()

    # b
    aux = lista.inicio
    while aux is not None:
        print('Estacion:', aux.info.estacion)
        print('Pais:', aux.info.pais)
        print('TEMP. | PRESION | HUMEDAD | ESTADO |   FECHA   |   HORA   ')
        barrido_sublista(aux.sublista)
        print()
        aux = aux.sig
    print()

    # c
    aux = lista.inicio
    prom_temperatura = 0
    prom_humedad = 0
    while aux is not None:
        sublista = aux.sublista.inicio
        while sublista is not None:
            prom_temperatura += sublista.info.temperatura
            prom_humedad += sublista.info.humedad
            sublista = sublista.sig
        aux = aux.sig
    print('Promedio de temperatura:', prom_temperatura / tamanio_lista(lista))
    print('Promedio de humedad:', prom_humedad / tamanio_lista(lista))
    print()

    # d
    aux = lista.inicio
    while aux is not None:
        lluvia = busqueda_lista(aux.sublista, 'lloviendo', 'estado')
        if lluvia is not None:
            print('En', aux.info.pais, 'esta lloviendo')
        nieve = busqueda_lista(aux.sublista, 'nevando', 'estado')
        if nieve is not None:
            print('En', aux.info.pais, 'esta nevando')
        aux = aux.sig
    print()

    # e
    aux = lista.inicio
    while aux is not None:
        tormenta = busqueda_lista(aux.sublista, 'tormenta eléctrica', 'estado')
        if tormenta is not None:
            print(' ESTACION | PAIS | LATITUD | LONGUITD | ALTITUD')
            print(aux.info, ', se registraron tormentas eléctricas')
            print()
        huracan = busqueda_lista(aux.sublista, 'huracanes', 'estado')
        if huracan is not None:
            print(' ESTACION | PAIS | LATITUD | LONGUITD | ALTITUD')
            print(aux.info, ' , se registraron huracanes')
            print()
        aux = aux.sig
    print()
def astillero():
    lista, lista_clientes, lista_anonimos = Lista(), Lista(), Lista()
    nombre_clientes = Lista()
    producto = [
        'Caza TIE', 'Destructor Estelar', 'Transporte Acorazado AT-AT',
        'Transporte de Exploración AT-ST', 'Ejecutor Táctico AT-TE'
    ]
    reciclado = [True, False]
    comprador = [
        'Darth Vader', 'Lando Calrissian', 'Boba Fett', 'Flia. Organa',
        'Han Solo', 'Desconocido'
    ]
    venta = Ventas_Naves(randint(1, 1000), choice(producto),
                         randint(1000, 100000), choice(reciclado),
                         choice(comprador))
    insertar(lista, venta, 'codigo')
    venta = Ventas_Naves(randint(1, 1000), choice(producto),
                         randint(1000, 100000), choice(reciclado),
                         choice(comprador))
    insertar(lista, venta, 'codigo')
    venta = Ventas_Naves(randint(1, 1000), choice(producto),
                         randint(1000, 100000), choice(reciclado),
                         choice(comprador))
    insertar(lista, venta, 'codigo')
    venta = Ventas_Naves(randint(1, 1000), choice(producto),
                         randint(1000, 100000), choice(reciclado),
                         choice(comprador))
    insertar(lista, venta, 'codigo')
    venta = Ventas_Naves(randint(1, 1000), choice(producto),
                         randint(1000, 100000), choice(reciclado),
                         choice(comprador))
    insertar(lista, venta, 'codigo')
    # a
    print('LISTA PRINCIPAL')
    print('CODIGO | PRODUCTO | PRECIO | RECIADO(V/F) | COMPRADOR')
    barrido_lista(lista)
    print()

    # b
    aux = lista.inicio
    while aux is not None:
        if aux.info.cliente == 'Desconocido':
            insertar(lista_anonimos, aux.info, 'codigo')
        else:
            insertar(lista_clientes, aux.info, 'codigo')
        aux = aux.sig
    print('Ventas a clientes habituales')
    barrido_lista(lista_clientes)
    print()
    print('Ventas a clientes desconocidos')
    if not lista_vacia(lista_anonimos):
        barrido_lista(lista_anonimos)
    else:
        print('No hay compradores anonimos')
    print()

    # c pendiente

    # d
    aux = lista.inicio
    total_ingresos = 0
    while aux is not None:
        total_ingresos += aux.info.precio
        aux = aux.sig
    print('Cantidad de unidades vendidas:', tamanio_lista(lista))
    print('Ingresos totales:', total_ingresos, 'creditos galácticos')
    print()

    # e
    aux = lista.inicio
    while aux is not None:
        nombre = aux.info.cliente
        pos = busqueda_lista(nombre_clientes, nombre)
        if pos is None:
            insertar(nombre_clientes, nombre)
        aux = aux.sig
    print('Listado de clientes:')
    barrido_lista(nombre_clientes)
    print()

    # f
    aux = lista.inicio
    print('Compras realizadas por Darth Vader')
    while aux is not None:
        if aux.info.cliente == 'Darth Vader':
            print(aux.info)
        aux = aux.sig
    print()

    # g
    aux = lista.inicio
    print(
        'Descuento del 15% a los clientes que compraron naves con partes recicladas'
    )
    while aux is not None:
        if aux.info.reciclado is True:
            descuento = aux.info.precio * 15 / 100
            print('Al cliente', aux.info.cliente, 'se le deben reintegrar',
                  descuento, 'creditos')
        aux = aux.sig
    print()

    # h
    aux = lista.inicio
    ingresos_at = 0
    while aux is not None:
        pos = busqueda_lista(lista, 'AT', 'producto')
        if pos is None:
            ingresos_at += aux.info.precio
        aux = aux.sig
    print('La venta de naves modelo AT generó', ingresos_at, 'creditos')