def explorar_cruceros_filtros(cruceros):
   print('  Que tipo de filtro le quiere aplicar a la busqueda?')
   
   all_habitaciones = [] # Todos los objetos de habitaciones en un solo lugar
   for crucero in cruceros: 
      for piso in crucero.pisos:
         for habitacion in piso.habitaciones:
            all_habitaciones.append(habitacion)
            habitacion.add_parent_crucero(crucero.get_nombre()) # Agregando referecia al crucero padre

   while True:
      filtro = m(['Por Tipo', 'Por Capacidad', 'Por ID', 'Volver']).get_menu()
      
      if filtro == '1': # Por tipo
         tipo = m(['Sencilla', 'Premium', 'VIP', 'Volver']).get_menu()

         if tipo == '1':
            mostrar_por_tipo('simple', all_habitaciones)
         elif tipo == '2':
            mostrar_por_tipo('premium', all_habitaciones)
         elif tipo == '3':
            mostrar_por_tipo('vip', all_habitaciones)
         elif tipo == '4':
            pass
         else: 
            print('Opción elegida invalidad. Intentar otra vez.\n')

      elif filtro == '2': # Por Capcidad
         while True:
            try:
               capacidad = int(input('Ingrese capacidad de habitacion: '))
               break
            except:
               print('Valor ingresado invalido. Intentar otra vez.\n')
         mostrar_por_capacidad(capacidad, all_habitaciones)

      elif filtro == '3': # Por ID (Tipo, Pasillo, Habitacion_num)
         print('     Primero escoja el tipo de habitacion')
         tipo = m(['Sencilla', 'Premium', 'VIP', 'Volver']).get_menu()
         identificador = input('Ingrese identificador (E.g: C3): ')
         
         if tipo == '1':
            mostrar_por_identidicador('simple', identificador, all_habitaciones)
         elif tipo == '2':
            mostrar_por_identidicador('premium', identificador, all_habitaciones)
         elif tipo == '3':
            mostrar_por_identidicador('vip', identificador, all_habitaciones)
         elif tipo == '4':
            pass
         else: 
            print('Opción elegida invalidad. Intentar otra vez.\n')
   
      elif filtro == '4':
         break
      else:
         print('Opción elegida invalidad. Intentar otra vez.\n')
def cancelar_reservacion(cruceros):
    while True:
        representar_cruceros(cruceros)
        try:
            c1 = int(input('Introduja numero de crucero: '))
            if c1 > len(cruceros):
                raise Exception

            piso = int(m(['Sencillo', 'Premium', 'VIP']).get_menu())
            if piso > 3:
                raise Exception

        except:
            print('Opción elegida invalidad. Intentar otra vez.\n')

        for crucero in range(len(cruceros)):
            if crucero == c1 - 1:
                print('\n Passillos ocupados: ')
                cruceros[crucero].pisos[piso - 1].get_representacion_ocupado()

                c2 = input(
                    'Ingrese ID (E.g. D3) de la habitacion que quiera desocupar: '
                )

                habitaciones_disponibles_id = [
                ]  # ID de habitaciones q esta ocupadas

                for habitacion in cruceros[crucero].pisos[piso -
                                                          1].habitaciones:
                    if habitacion.ocupado == True:
                        habitacion_disponible = habitacion
                        habitaciones_disponibles_id.append(
                            habitacion.identificador)

                if c2 in habitaciones_disponibles_id:  # Chekeando que habitacion este disponible
                    print(
                        'No refunds btw :)'
                    )  # No estoy quitando los pagos que se hicieron para mantener los datos del cliente
                    c3 = m([
                        f'Confirmar Cancelacion de Habitacion {habitacion_disponible.get_id()}',
                        'No, Volver'
                    ]).get_menu()
                    if c3 == '1':
                        update_datos(habitacion_disponible, cruceros)
                    else:
                        print('Cancelacion NO exitosa.')
                        return

                else:
                    print('\n ID no disponible. Verifique datos.')
                    pass

                return
Пример #3
0
def selecionar_estadistica():
    while True:
        estadistica = m([
            'Promedio de gastos de todos los clientes',
            'Promedio de gastos de un solo cliente',
            'Porcentaje de clientes que no comprar tour', 'Top 3 Clientes',
            'Top 3 Cruceros con mayor venta de tickets', 'Volver'
        ]).get_menu()
        try:
            if estadistica == '1':  # NO lei bien las isntrucciones. Pero bueno dejo esto aqui!
                promedio_de_gastos()
            elif estadistica == '2':
                promedio_de_gastos_cliente()
            elif estadistica == '3':
                porcentaje_de_no_tours()
            elif estadistica == '4':
                top3_clientes()
            elif estadistica == '5':
                top3_cruceros()
            elif estadistica == '6':
                break
            else:
                print('Opción elegida invalidad. Intentar otra vez.\n')
        except:
            print(
                'Todavia no hay pagos. Realize almenos un pago para utilizar este modulo'
            )
            break
def buscar_item(restaurante):
    b1 = m(['Buscar por nombre', 'Por precio', 'Ver todos',
            'Volver']).get_menu()

    if b1 == '1':  # Por nombre
        nombre = input('Ingrese nombre: ')
        print('Productos que hacen match el nombre ingresado:\n')

        for item in restaurante.menu:
            if item.nombre == nombre:
                mostrar_item(item)

    elif b1 == '2':  # Por price range
        try:
            minimo = float(input('Ingrese precio minimo: '))
            maximo = float(input('Ingrese precio maximo: '))
        except:
            print('Opción elegida invalidad. Intentar otra vez.\n')

        print(f'Todos los items entre ${minimo} y ${maximo}:\n')
        for item in restaurante.menu:
            if item.precio_base > minimo and item.precio_base < maximo:
                mostrar_item(item)

    elif b1 == '3':
        for item in restaurante.menu:
            mostrar_item(item)
    elif b1 == '4':
        return
    else:
        print('Opción elegida invalidad. Intentar otra vez.\n')
def eliminar_combo(restaurante):
    combos = []  # Lista con todos los combos
    opciones = []
    if len(restaurante.combos) == 0:
        print('No hay combos para eliminar.')
    else:
        print('   Combos disponibles para eliminar:')

        for combo in restaurante.combos:
            opciones.append(
                f'{combo.nombre} ${combo.precio_base} | Items: {combo.items}')
            combos.append(f'{combo.nombre}')

        try:
            opcion = int(m(opciones).get_menu())
            if opcion > len(combos) or opcion < 0:
                raise Exception
        except:
            print('Opción elegida invalidad. Intentar otra vez.\n')
            return

        restaurante.eliminar_combo(opcion - 1)
        update_datos(restaurante)

        return
def buscar_combo(restaurante):
    b2 = m(['Buscar por nombre', 'Por precio', 'Ver Todos',
            'Volver']).get_menu()

    if b2 == '1':  # Por nombre
        nombre = input('Ingrese nombre: ')

        for combo in restaurante.combos:
            if combo.nombre == nombre:
                mostrar_combo(combo)
                return

    elif b2 == '2':  # Por price range
        try:
            minimo = float(input('Ingrese precio minimo: '))
            maximo = float(input('Ingrese precio maximo: '))
        except:
            print('Opción elegida invalidad. Intentar otra vez.\n')
            return

        print(f'Todos los items entre ${minimo} y ${maximo}:')
        for combo in restaurante.combos:
            if combo.precio_base > minimo and combo.precio_base < maximo:
                mostrar_combo(combo)

    elif b2 == '3':
        for combo in restaurante.combos:
            mostrar_combo(combo)
    elif b2 == '4':
        return
    else:
        print('Opción elegida invalidad. Intentar otra vez.\n')
def mostrar_crucero(crucero, explore=True):
   while True:
      print(f'''
      Actualmente {'explorando' if explore else 'viendo'} pisos de {crucero.get_nombre()}!

               Capacidad    Costo    
   Sencillo:    {crucero.get_capacidad('sencillo')}            ${crucero.get_costo('sencillo')}    
    Premium:    {crucero.get_capacidad('premium')}            ${crucero.get_costo('premium')}    
        VIP:    {crucero.get_capacidad('vip')}            ${crucero.get_costo('vip')}    
      ''')

      print(f'Eliga piso que quisiera {"explorar" if explore else "ver"}')

      seleccion2 = m(['Sencillo', 'Premium', 'VIP']).get_menu()

      if seleccion2 == '1': # Sencillo
         crucero.pisos[int(seleccion2) - 1].get_representacion()
         return seleccion2
      elif seleccion2 == '2': # Premium
         crucero.pisos[int(seleccion2) - 1].get_representacion()
         return seleccion2
      elif seleccion2 == '3': # VIP
         crucero.pisos[int(seleccion2) - 1].get_representacion()
         return seleccion2
      else:
         print('Opción elegida invalidad. Intentar otra vez.\n')
Пример #8
0
    def parse(self, i):
        '''
        Parses the menu: an array of dictionaries consisting of the keys
        id, data, parent_id, child_ids.

        Note: MENUS is not zero-indexed.
        We want to iterate through the array nonlinearly, by child_ids.
        The parsing will be memoized as a result. Now, if child_ids is
        an empty list or yields a cycle, then we go to the next ID in sequence.
        '''
        k = i + 1
        if not self.visited[k]:
            self.visited[k] = True
            menu_id = self.menus[i]['id']
            data = self.menus[i]['data']
            child_ids = self.menus[i]['child_ids']
            if 'parent_id' in self.menus[i]:
                current_parent = self.menus[i]['parent_id']
                previous_parent = None
                while True:
                    previous_parent = current_parent
                    if 'parent_id' not in self.menus[previous_parent - 1]:
                        current_parent = self.menus[previous_parent - 1]['id']
                        break
                    current_parent = self.menus[previous_parent - 1]['parent_id']
                self.trees[current_parent].appendChildren(child_ids)
            else:
                parent_id = menu_id
                for c in child_ids:
                    if c in self.trees:
                        parent_id = c
                        child_ids.remove(c)
                self.trees[parent_id] = m(menu_id, child_ids)
            for child in child_ids:
                self.parse(child - 1)
Пример #9
0
def comprar_tour(tours):
    tours_disponibles = []  # Tours que todavia tienen cupo

    for tour in tours:
        if tour.get_disponibilidad():
            tours_disponibles.append(tour)

    while True:
        print('Estos son los tours disponibles\n')

        representar_tours(tours_disponibles)

        for tour in range(len(tours_disponibles)):
            print(f'    [{tour+1}] {tours_disponibles[tour].nombre}')

        oo1 = input('\nEscoja: ')

        opcion_tour = None

        for i in range(len(tours_disponibles)):
            if oo1 == f'{i+1}':
                opcion_tour = tours_disponibles[i]

        if opcion_tour == None:  # Si es invalida devolver
            print('Opción elegida invalidad. Intentar otra vez.\n')
            break

        try:
            cedula = int(input('Ingrese su cedula: '))
            party = int(input('Numero de personas con usted: '))

            if party > opcion_tour.max_personas:
                print(
                    'Cantidad de personas en el party exede la cantidad de personas maximas'
                )
                break

            if party + opcion_tour.cupos_ocupados > opcion_tour.cupos:  # Asegurando que existen suficientes cupos
                print(
                    '\nCupos agotados. Si quiere este tour debe ingresar con menos personas.\n'
                )
                break
            mostrar_factura(cedula, party, opcion_tour)

            print('Quiere comprar este tour?')
            confirmar = m(['Si', 'No']).get_menu()

            if confirmar == '1':
                update_datos(opcion_tour, party, cedula, tours)
                break
            elif confirmar == '2':
                break
            else:
                print('\nValor ingresado invalido. Intentar otra vez.')

        except:
            print('\nValor ingresado invalido. Intentar otra vez.')

        break
def agregar_item(restaurante):
    nombre = input('Ingrese nombre de item: ')
    opcion_tipo = m(['Alimento', 'Bebida']).get_menu()

    if opcion_tipo == '1':
        opcion_info = m(['Empaque', 'Preparación']).get_menu()
        tipo = 'a'
        if opcion_info == '1':
            info = 'e'
        elif opcion_info == '2':
            info = 'p'
        else:
            print('Opción elegida invalidad. Intentar otra vez.\n')
            return

    elif opcion_tipo == '2':
        opcion_info = m(['Pequeño', 'Mediano', 'Grande']).get_menu()
        tipo = 'b'
        if opcion_info == '1':
            info = 'p'
        elif opcion_info == '2':
            info = 'm'
        elif opcion_info == '2':
            info = 'g'
        else:
            print('Opción elegida invalidad. Intentar otra vez.\n')
            return

    else:
        print('Opción elegida invalidad. Intentar otra vez.\n')
        return

    try:
        precio = int(input('Ingrese precio de este item: '))
        if precio < 0:
            raise Exception
    except:
        print('Valor invalido. Intentar otravez')
        return

    restaurante.agregar_item(nombre, tipo, info, precio)
    update_datos(restaurante)
def agregar_combo(restaurante):
    nombre = input('Ingrese nombre de combo: ')
    opciones = []  # Indexs de todos los item selecionados
    items = []

    try:
        cantidad_items = int(
            input('Ingrese cantidad de items que quiere agregar (mas de 2): '))
        if cantidad_items < 2 or cantidad_items > len(restaurante.menu):
            raise Exception
    except:
        print('Opción elegida invalidad. Intentar otra vez.\n')
        return

    for item in restaurante.menu:  # Para mostrar todos los items que se pudiera elegir
        items.append(
            f'{item.nombre} | {item.get_info()}, ${item.get_precio_base()}')

    for item in range(cantidad_items):
        print((f'\n    Item #{item+1} Escoga numero de item'))
        try:
            opcion = int(m(items).get_menu())
            if opcion > len(restaurante.menu) or opcion < 0:
                raise Exception
            opciones.append(opcion - 1)
        except:
            print('Opción elegida invalidad. Intentar otra vez.\n')
            return

    try:
        precio = float(input('Ingrese precio de este combo: '))
        if precio < 0:
            raise Exception
    except:
        print('Valor invalido. Intentar otravez')
        return

    nombre_de_items = []  # Lista con todos los nombre del combo

    for index in range(len(opciones)):
        nombre_de_items.append(restaurante.menu[opciones[index]].nombre)

    restaurante.agregar_combo(nombre, precio, nombre_de_items)
    update_datos(restaurante)
def gestion_productos(restaurante):
    while True:
        b2 = m([
            'Agregar Item', 'Agregar Combo', 'Eliminar Item', 'Eliminar Combo',
            'Modificar Item', 'Volver'
        ]).get_menu()

        if b2 == '1':
            agregar_item(restaurante)
        elif b2 == '2':
            agregar_combo(restaurante)
        elif b2 == '3':
            eliminar_item(restaurante)
        elif b2 == '4':
            eliminar_combo(restaurante)
        elif b2 == '5':
            modificar_item(restaurante)
        elif b2 == '6':
            break
        else:
            print('Opción elegida invalidad. Intentar otra vez.\n')
def eliminar_item(restaurante):
    items = []  # Lista con todos los items del menu
    opciones = []
    print('\n     Items en menu que se pueden eliminar:')

    for item in restaurante.menu:
        opciones.append(
            f'{item.nombre} | {item.get_info()}, ${item.get_precio_base()}')
        items.append(f'{item.nombre}')

    try:
        opcion = int(m(opciones).get_menu())
        if opcion > len(items) or opcion < 0:
            raise Exception
    except:
        print('Opción elegida invalidad. Intentar otra vez.\n')
        return

    restaurante.eliminar_item(opcion - 1)
    update_datos(restaurante)

    return
def comprar_por_criterios(crucero, cruceros):
    print('\n   Escoga tipo de habitacion')
    try:
        piso = int(m(['Sencillo', 'Premium', 'VIP']).get_menu()) - 1
        party = int(input('Cantidad de personas en su party: '))

        if crucero.pisos[
                piso].capacidad_habitacion < party:  # Determinando Cantidadd de habitaciones que se deben comprar si la party es mayor que la capacidad
            habitaciones_a_compar = floor(
                (party) / (crucero.pisos[piso].capacidad_habitacion))
            if party % crucero.pisos[piso].capacidad_habitacion != 0:
                habitaciones_a_compar += 1
            print(
                f'La cantidad de gente que viaja con usted es mayor que la cantidad de gente que puede viajar en habitaciones de este tipo. Por lo tanto, debe comprar un minimo de {habitaciones_a_compar} habitaciones.'
            )

            seleccionar_habitacion(crucero.pisos[piso], party, cruceros,
                                   habitaciones_a_compar)
        else:  # Si la cantidad de habitaciones a comprar es solamente 1
            seleccionar_habitacion(crucero.pisos[piso], party, cruceros)
    except:
        print('Introdujo un valor invalido. Intentelo denuevo\n')
def modificar_item(restaurante):
    items = []  # Lista con todos los items del menu
    opciones = []
    print('\n     Items en menu que se pueden modificar:')

    for item in restaurante.menu:
        opciones.append(
            f'{item.nombre} | Tipo: {item.get_tipo()}, Info: {item.get_info()}, Precio: ${item.get_precio_base()}'
        )
        items.append(f'{item.nombre}')

    try:
        opcion = int(m(opciones).get_menu())
        if opcion > len(items) or opcion < 0:
            raise Exception
    except:
        print('Opción elegida invalidad. Intentar otra vez.\n')
        return

    print('Que desea modificar de este item?')
    cosa_a_modificar = m(['Nombre', 'Tipo', 'Info', 'Precio']).get_menu()

    if cosa_a_modificar == '1':
        nombre = input('Ingrese nuevo nombre: ')
        restaurante.menu[opcion - 1].modificar_algo('n', nombre)
    elif cosa_a_modificar == '2':
        print('Ingrese nuevo tipo: ')
        tipo = m(['Alimento', 'Bebida']).get_menu()
        if tipo == '1':
            new_tipo = 'a'
        elif tipo == '2':
            new_tipo = 'b'
        else:
            print('Opción elegida invalidad. Intentar otra vez.\n')
            return
        restaurante.menu[opcion - 1].modificar_algo('t', new_tipo)
    elif cosa_a_modificar == '3':
        if restaurante.menu[opcion - 1].tipo == 'a':
            info = m(['Empaque', 'Preparación']).get_menu()
            if info == '1':
                new_info = 'e'
            elif info == '2':
                new_info = 'p'
            else:
                print('Opción elegida invalidad. Intentar otra vez.\n')
                return
        elif restaurante.menu[opcion - 1].tipo == 'b':
            info = m(['Pequeño', 'Mediano', 'Grande']).get_menu()
            if info == '1':
                new_info = 'p'
            elif info == '2':
                new_info = 'm'
            elif info == '3':
                new_info = 'g'
            else:
                print('Opción elegida invalidad. Intentar otra vez.\n')
                return
        restaurante.menu[opcion - 1].modificar_algo('i', new_info)
    elif cosa_a_modificar == '4':
        try:
            new_price = float(input('Ingrese nuevo precio: '))
            if new_price < 0:
                raise Exception
        except:
            print('Opción elegida invalidad. Intentar otra vez.\n')
            return
        restaurante.menu[opcion - 1].modificar_algo('p', new_price)
    else:
        print('Opción elegida invalidad. Intentar otra vez.\n')
        return

    update_datos(restaurante)
    return
Пример #16
0
def main():
    cruceros = get_cruceros()  #Lista de todos los cruceros
    tours = get_tours()  #Lista de todos los tours
    restaurante = get_restaurante()
    load_data(cruceros=cruceros)  # Para mantener data de cruceros
    load_data(tours=tours)  # Para mantener data de tours
    restaurante.update_menu()  # Para mantenere data de restaurantes

    while True:
        opcion = m([
            'Gestión de Cruceros', 'Gestión de Habitaciones', 'Venta de tours',
            'Gestión de restaurante', 'Estadísticas', 'Salir'
        ]).get_menu()

        if opcion == '1':  # MODULO 1
            while True:
                opcion12 = m(['Explorar Todos los Cruceros',
                              'Volver']).get_menu()
                if opcion12 == '1':  # Representacion de Cruceros (1)
                    representar_cruceros(cruceros)
                    break
                elif opcion12 == '2':
                    break
                else:
                    print('Opción elegida invalidad. Intentar otra vez.\n')
        elif opcion == '2':  # MODULO 2
            while True:
                opcion21 = m([
                    'Explorar Habitaciones', 'Reservar Habitación',
                    'Cancelar Reservación', 'Volver'
                ]).get_menu()
                if opcion21 == '1':  # Para Explorar habitaciones disponibles
                    while True:
                        opcion22 = m([
                            'Explorar todas las habitaciones dispobibles',
                            'Explorar Habitaciones por filtros', 'Volver'
                        ]).get_menu()
                        if opcion22 == '1':  # Explorar todas (1)
                            explorar_cruceros(cruceros)
                        elif opcion22 == '2':  # Explorar con filtros (4)
                            explorar_cruceros_filtros(cruceros)
                        elif opcion22 == '3':
                            break
                        else:
                            print(
                                'Opción elegida invalidad. Intentar otra vez.\n'
                            )
                elif opcion21 == '2':  # Para la compra de Habitacion (2)
                    elegir_habitacion(cruceros)
                elif opcion21 == '3':
                    cancelar_reservacion(cruceros)
                elif opcion21 == '4':
                    break
                else:
                    print('Opción elegida invalidad. Intentar otra vez.\n')
        elif opcion == '3':  # MODULO 3
            comprar_tour(tours)
        elif opcion == '4':  # MODULO 4
            while True:
                opcion41 = m([
                    'Buscar item', 'Buscar Combo', 'Gestionar Items & Combos',
                    'Volver'
                ]).get_menu()
                if opcion41 == '1':
                    buscar_item(restaurante)
                elif opcion41 == '2':
                    buscar_combo(restaurante)
                elif opcion41 == '3':
                    gestion_productos(restaurante)
                elif opcion41 == '4':
                    break
                else:
                    print('Opción elegida invalidad. Intentar otra vez.\n')
        elif opcion == '5':  # MODULO 5
            selecionar_estadistica()
        elif opcion == '6':
            print('Programa terminado. Hasta luego!')
            break
        else:
            print('Opción elegida invalidad. Intentar otra vez.\n')
def comprar_habitacion(habitacion, personas, cruceros):
    print(
        '\nA continuacion se le preguntara informacion necesaria para completar la compra.'
    )
    current_cart = []  # Lista de objetos personas en la cuenta actual

    while True:
        if len(
                current_cart
        ) < personas:  # Asegurar que la cantidad de personas que se registran coinciden con la cantidad del party
            try:
                if len(current_cart) == 0:
                    print(
                        f'\n⇃Datos de persona a pagar! (La compra estara a su nombre)'
                    )
                else:
                    print(f'\n⇃Datos de persona #{len(current_cart) + 1}⇂')

                nombre = input('Ingrese su nombre: ')
                cedula = int(input('Ingerese su cedula: '))
                edad = int(input('Ingrese su edad: '))
                discapacidad = input('Sufre de alguna discapacidad? [Y/N]: ')

                if cedula < 0:  # Para que gente no ponga numeros negativos
                    raise Exception

                # Verificando que el input es Y o N. Y formatiando el valor para que sea bool
                if discapacidad == 'y' or discapacidad == 'Y':
                    discapacidadF = True
                elif discapacidad == 'n' or discapacidad == 'N':
                    discapacidadF = False
                else:
                    raise Exception

                temp_persona = Persona(  # Creando objeto persona
                    nombre, cedula, edad, discapacidadF,
                    habitacion.identificador, habitacion.costo)

                print(f'{temp_persona.nombre} se ha Registrado!'
                      )  # Verificando Registracion
                current_cart.append(temp_persona)
                habitacion.agregar_personas(
                    temp_persona)  # porsicaso necesito una referencio luego
            except:
                print('Valor invalido. Intente otravez.')
        else:  # Una vez que la cantidad de personas correctas se registren, salir del loop
            break

    # Una vez que se registraron todos. Mostramos factura y preguntamos si la compra se quire hacer para finalizar transaccion
    costo = mostrar_factura(current_cart)
    while True:
        print('Confirma tu compra')
        confirmar = m(['Si', 'Cancelar']).get_menu()

        if confirmar == '1':
            print('Tu Compra ha sido realizada!')
            update_datos(habitacion, costo, current_cart[0], cruceros)
            break
        elif confirmar == '2':
            print('Compra Cancelada')
            break
        else:
            print('Opción elegida invalidad. Intentar otra vez.\n')
def elegir_habitacion(cruceros):
    while True:
        o1 = m([
            'Comprar en base a destino', 'Comprar en base a crucero', 'Volver'
        ]).get_menu()
        if o1 == '1':  #En base a destino
            destinos_disponibles = []  # Lista con destinos disponibles
            for crucero in cruceros:
                for destino in crucero.ruta:
                    if destino not in destinos_disponibles:
                        destinos_disponibles.append(destino)

            print(f'Destinos disponibles: \n')
            for destino in range(len(destinos_disponibles)):
                print(f'    [{destino+1}] {destinos_disponibles[destino]}')

            o2 = input('\nEscoja Cual destino quiera: ')
            o22 = None
            for i in range(len(destinos_disponibles)):
                if o2 == f'{i+1}':
                    o22 = destinos_disponibles[i]

            if o22 == None:  # Si es invalida devolver
                print('Opción elegida invalidad. Intentar otra vez.\n')
                break

            cruceros_disponibles = [
            ]  # Todos los cruseros con el destino requerido

            for crucero in cruceros:
                for destino in crucero.ruta:
                    if o22 in destino:
                        if crucero.get_nombre(
                        ) not in cruceros_disponibles:  # Cunado una ruta esa dos veces
                            cruceros_disponibles.append(crucero.get_nombre())

            print(f'Los crucero con ese destino son: {cruceros_disponibles}\n')

            representar_cruceros(cruceros)  # Mostrar cruceros actuales
            barco = input(
                f'NOTA! El(los) unico(s) crucero(s) con su destino querido es(son): {cruceros_disponibles}\nEliga el numero de crucero del cual quiera comprar una habitacion: '
            )

            for crucero in range(len(cruceros)):
                if barco == f'{crucero + 1}':
                    comprar_por_criterios(cruceros[crucero], cruceros)
                    return

            print('Opción elegida invalidad. Intentar otra vez.\n')

        elif o1 == '2':  # En base a barco
            while True:
                representar_cruceros(cruceros)  # Mostrar cruceros actuales
                barco = input(
                    'Eliga el numero de crucero del cual quiera comprar una habitacion: '
                )

                for crucero in range(len(cruceros)):
                    if barco == f'{crucero + 1}':
                        comprar_por_criterios(cruceros[crucero], cruceros)
                        return

                print('Opción elegida invalidad. Intentar otra vez.\n')

        elif o1 == '3':
            break
        else:
            print('Opción elegida invalidad. Intentar otra vez.\n')