def __init__(self,*args,**kwargs):
     '''Metodo constructor de la clase laberinto'''
     b=Busqueda()
     self.prueba=2
     if (len(args)==2) and isinstance(args[0],str) and isinstance(args[1],str):
         self.read_json(args[0])
         if(self.comprobar_integridad()):
             print("Ha dado error en el json")
         estado_inicial,estado_objetivo,maze=b.readjson(args[1])
     else:
         self.filas=args[0]
         self.columnas=args[1]
         self.casillas=self.tablero()
         self.to_json(self.casillas)
         estado_inicial=str((0,0))
         estado_objetivo=str((self.filas-1,self.columnas-1))
         maze=None       
     lista_estados=b.generar_estados(self.casillas)
     
     if(self.comprobar_integridad_fichero_nodos(estado_inicial,estado_objetivo,maze)):
         print('Introduzca la estrategia del problema\n')
         print('Las estrategias disponibles son: A, BREADTH, DEPTH, UNIFORM, GREEDY\n')
         estrategia=str(input('>>'))
         estrategia=estrategia.upper()            
         while  (estrategia!='A' and estrategia!='BREADTH' and estrategia!='DEPTH' and estrategia!='UNIFORM' and estrategia!='GREEDY'):
             print('Error introduciendo estrategia\n')
             print('RECUERDE: las estrategias disponibles son: A, BREADTH, DEPTH, UNIFORM, GREEDY\n')
             estrategia=str(input('>>'))
             estrategia=estrategia.upper()                
         estado,frontera,visitados,lista_solucion=self.problema(estado_inicial,estado_objetivo,maze,lista_estados,estrategia)
         self.dibujar(self.casillas,frontera,visitados,lista_solucion,estrategia)
         b.imprimir_solucion(lista_solucion,self.filas,self.columnas,estrategia)
     else:
         print("Finalizando programa....")
示例#2
0
 def __init__(self,rutaBD):
     u''' Costructor de la clase. '''
     self.__pathBD = rutaBD
     self.__Busqueda = Busqueda()
     
     self.bd = sqlite.sqlite(self.__pathBD)
示例#3
0
class Database:
    ''' Clase manejadora de operaciones con una base de datos/catalogo. '''
    
    def __init__(self,rutaBD):
        u''' Costructor de la clase. '''
        self.__pathBD = rutaBD
        self.__Busqueda = Busqueda()
        
        self.bd = sqlite.sqlite(self.__pathBD)

###############
# METODOS BD  #
###############

    def getPathBD(self):
        u''' Obtiene la ruta de la base de datos en uso. '''
        return self.__pathBD

    def getLenguajes(self):
        u''' Obtiene los lenguajes para la actual BD. '''
        resultado = self.bd.realizarConsulta('SELECT DISTINCT language FROM snippet ORDER BY language')
        return resultado

    def getLengAndTitles(self, consulta=None, favorito = None, tagsPresicion = None):
        u''' Obtiene los snippets por lenguajes de la actual BD.
        
            @return: una lista de tuplas con este formato (lenguaje,titulo)'''
        
        #por defecto busca los que no son favoritos
        if not consulta and not favorito:
            resultado = self.bd.realizarConsulta('''SELECT language,title 
                                                FROM snippet  
                                                ORDER BY language,title ''')
        else:
            #si no se pasa este parametro
            if favorito is None: 
                favorito = 0
            if tagsPresicion is None:
                tagsPresicion = False
            #genera un sql con la busqueda segun la consulta recibida
            consulta = self.__Busqueda.generarConsulta(consulta, int(favorito), tagsPresicion)
            #obtiene los resultados de la consulta
            resultado = self.realizarConsulta(consulta)
        return resultado

    def getAllSnippets(self):
        u''' Obtiene todos los snippets de la base de datos. '''
        resultado = self.bd.realizarConsulta('''SELECT title,language,tags,contens,
                                                    description,creation,reference,
                                                    modified,uploader,starred
                                            FROM snippet
                                            ORDER BY language,title''')
        return resultado

    def getSnippet(self, lenguaje, titulo):
        u''' Obtiene un snippet por su lenguaje y titulo correspondiente. '''
        resultado = self.bd.getDatosColumnas("snippet",criterios = {'language':lenguaje,'title':titulo})
        return self.__convertirASnippet(resultado)

    def getSnippetsCount(self):
        u''' Obtiene la cantidad de snippets cargados en la actual bd. '''
        cantidad = self.realizarConsulta('SELECT count(*) FROM snippet')
        return int(cantidad[0][0])

    def realizarConsulta(self,consulta):
        return self.bd.realizarConsulta(consulta)

################################
# METODOS PARA MANEJAR SNIPPET #
################################

    def agregarSnippet(self, datosSnippet):
        u''' Agrega un nuevo Snippet a la base de datos. 
        datosSnippet = diccionario con los datos del snippet a agregar.'''

        # TODO: agregar los try-catch para contemplar:
        # º snippet repetido
        # º error al agregar un snippet

        #genera los sig de preguntas segun la cantidad de campos recibidos
        sp = str('('+'?,'*len(datosSnippet))[:-1] + ')'
        #genera un string con los nombre de los campos
        campos = '('+','.join(datosSnippet.keys())+')'
        #se convierten los campos a unicode/utf8
        valores = []
        for valor in datosSnippet.values():
            valores.append(valor)#.encode('ascii','utf-8'))        
        try:
            return self.bd.realizarAlta("snippet", datosSnippet) , None
        except Exception, msg:
            print 'agregarSnippet >> ',str(msg)
            return False, str(msg)
示例#4
0
 def __init__(self,rutaBD, database_name):
     u''' Costructor de la clase. '''
     self.__pathBD = rutaBD
     self.__Busqueda = Busqueda()
     self.bd = couchdb.Server(rutaBD)[database_name]
示例#5
0
class Database:
    ''' Clase manejadora de operaciones con una base de datos/catalogo. '''
    
    def __init__(self,rutaBD, database_name):
        u''' Costructor de la clase. '''
        self.__pathBD = rutaBD
        self.__Busqueda = Busqueda()
        self.bd = couchdb.Server(rutaBD)[database_name]
        
###############
# METODOS BD  #
###############

    def getPathBD(self):
        u''' Obtiene la ruta de la base de datos en uso. '''
        return self.__pathBD

    def getLenguajes(self):
        u''' Obtiene los lenguajes para la actual BD. '''
        resultado = self.bd.query("""
            function (doc) {
                if (doc.doc_type == 'snippet') {
                    emit(doc.language, null);
        };}""")
        return list(tuple([doc['key'] for doc in resultado]))

    def getLengAndTitles(self, consulta=None, favorito = None, tagsPresicion = None):
        u''' Obtiene los snippets por lenguajes de la actual BD.
            
            @return: lista de tuplas con este formato: (lenguaje,titulo)'''
        #por defecto busca los que no son favoritoss
        if not consulta and not favorito:
            resultado = self.bd.query('''
                function (doc) {
                    if (doc.doc_type == 'snippet') {
                        emit([doc.language, doc.title]);
                };}''')
            return [doc['key'] for doc in resultado]
        else:
            #si no se pasa este parametro
            if favorito is None: 
                favorito = 0
            if tagsPresicion is None:
                tagsPresicion = False
            #genera un sql con la busqueda segun la consulta recibida
            consulta = self.__Busqueda.generarConsulta(consulta, int(favorito), tagsPresicion)
            #obtiene los resultados de la consulta
            resultado = self.bd.query(consulta)
            return [(doc['key'],doc['value']) for doc in resultado]

    def getAllSnippets(self):
        u''' Obtiene todos los snippets de la base de datos. '''
        orden = ['title','language','tags','code','description','creation','modified','uploader','starred','reference']
        resultado = self.bd.query("""
            function (doc) {
                if (doc.doc_type == 'snippet') {
                    emit(doc.title, doc);
        };}""")
        self.cant_snippets = len(resultado)
        return [doc['value'] for doc in resultado]

    def getSnippet(self, lenguaje, titulo):
        u''' Obtiene un snippet por su lenguaje y titulo correspondiente. '''
        resultado = self.bd.getDatosColumnas("snippet",criterios = {'language':lenguaje,'title':titulo})
        return self.__convertirASnippet(resultado)

    def getSnippetsCount(self):
        u''' Obtiene la cantidad de snippets cargados en la actual bd. '''
        resultado = self.bd.query('''
            function (doc) {
               if (doc.doc_type == 'snippet') {
                 emit(null, doc.title);
            };}''')
        return len([doc for doc in resultado])

    def realizarConsulta(self,consulta):
        return []

################################
# METODOS PARA MANEJAR SNIPPET #
################################

    def agregarSnippet(self, datosSnippet):
        u''' Agrega un nuevo Snippet a la base de datos. 
        datosSnippet = diccionario con los datos del snippet a agregar.'''
        try:
            from uuid import uuid4
            doc_id = uuid4().hex
            datosSnippet['doc_type'] = 'snippet'
            self.bd[doc_id] = datosSnippet 
            return True, ''
        except Exception, msg:
            return False, str(msg)
示例#6
0
from archivo.miarchivo import *  #Importamos las clases que usaremos
from busqueda.Busqueda import *
elementoBuscar = 3  #Establecemos el elemento que vamos a buscar
mtxt = MiArchivo(
    "data/datos.txt")  #Enviamos la dirrección de archivo a la clase
lista = mtxt.obtener_informacion()  #Obtenemos las lineas en una lista
lista = [l.split(",") for l in lista
         ]  #Hacemos un split para separar cada elemento seguido de una ","
lista2 = [
]  #Inicializamos una lista vacia que contendra los elementos ordenados
for d in lista:  #For que recorre las lineas de la lista
    for numero in d:  #For que recorre cada elemento de cada linea
        e = int(numero)  #Transformamos la cadena en entero
        lista2.append(
            e)  #Agregamos a la lista vacia los elementos como enteros
lista2.sort()  #Ordenamos la lista
a = Busqueda(
    lista2
)  #Creamos un objeto y enviamos la lista ordenada a su constructor de clase
b = a.busquedaBinaria(
    3)  #Creamos una variable que recibira el return del metodo busquedaBinaria
if (b == -1
    ):  #En caso de que no se enceuntre retorna -1 y presentamos el mensaje
    print("El número no existe")
else:  #En caso de encontrare presentamos su posición
    print("La posicion es %s" % b)
mtxt.cerrar_archivo()
    def problema(self,estado_inicial,estado_objetivo,maze,lista_estados,estrategia):
        '''En este metoodo realizamos la resolucion del problema'''
        visitados=[]
        b=Busqueda()
        frontera= []
        funcion_sucesores=[]        
        estado_inicial=b.conversion_estado(estado_inicial,lista_estados)
        estado_objetivo=b.conversion_estado(estado_objetivo,lista_estados)        
        funcion_sucesores.append(estado_inicial)        
        lista_nodos, identificador = b.creacion_nodo(funcion_sucesores, 0, None ,estrategia,estado_objetivo,None)       
        estado=estado_inicial
        frontera=b.reorden_frontera(frontera, lista_nodos,visitados)

        while(b.objetivo(estado_objetivo,estado)!=True):           
            nodo,frontera=self.comprobarfrontera(visitados,frontera)
            visitados.append(nodo)
            estado=b.nodo_a_estado(nodo,lista_estados)
            funcion_sucesores=b.creacion_sucesores(estado,lista_estados)
            lista_nodos, identificador=b.creacion_nodo(funcion_sucesores, identificador,  estado,estrategia,estado_objetivo,nodo)
            frontera=b.reorden_frontera(frontera, lista_nodos,visitados)        
        frontera=self.comprobarfrontera2(visitados,frontera)       
        frontera=self.ultimosvecinos(lista_nodos,frontera)       
        lista_solucion=b.encontrar_solucion(visitados,estado_inicial)             
        return estado ,frontera , visitados,lista_solucion