Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: falconez en 3 Junio 2015, 18:43 pm



Título: Error en busqueda en amplitud con python
Publicado por: falconez en 3 Junio 2015, 18:43 pm
He estado tratando de corregir el error pero no lo encuentro ... Me sale: while nodo.get_padre() != None:
AttributeError: 'NoneType' object has no attribute 'get_padre'


Código
  1. from arbol import Nodo
  2.  
  3. def buscar_solucion_BFS(estado_inicial, solucion):
  4.    solucionado = False
  5.    nodos_visitados = []
  6.    nodos_frontera = []
  7.    nodoInicial = Nodo(estado_inicial)
  8.    nodos_frontera.append(nodoInicial)
  9.    while(not solucionado) and len(nodos_frontera) != 0:
  10.        nodo = nodos_frontera.pop(0)
  11.        #extraer nodo y anadirlo a visitados
  12.        nodos_visitados.append(nodo)
  13.        if nodo.get_datos() == solucion:
  14.            #solucion encontrada
  15.            solucionado = True
  16.            return nodo
  17.        else:
  18.            #expandir nodos hijos
  19.            dato_nodo = nodo.get_datos()
  20.  
  21.            #operador izquierdo
  22.            hijo = [dato_nodo[1], dato_nodo[0], dato_nodo[2], dato_nodo[3]]
  23.            hijo_izquierdo = Nodo(hijo)
  24.            if not hijo_izquierdo.en_lista(nodos_visitados) and not hijo_izquierdo.en_lista(nodos_frontera):
  25.                nodos_frontera.append(hijo_izquierdo)
  26.                #operador central
  27.                hijo = [dato_nodo[0], dato_nodo[2], dato_nodo[1], dato_nodo[3]]
  28.                hijo_central = Nodo(hijo)
  29.                if not hijo_central.en_lista(nodos_visitados) and not hijo_central.en_lista(nodos_frontera):
  30.                    nodos_frontera.append(hijo_central)
  31.                    #operador derecho
  32.                    hijo = [dato_nodo[0], dato_nodo[1], dato_nodo[3], dato_nodo[2]]
  33.                    hijo_derecho = Nodo(hijo)
  34.                    if not hijo_derecho.en_lista(nodos_visitados) and not hijo_derecho.en_lista(nodos_frontera):
  35.                        nodos_frontera.append(hijo_derecho)
  36.  
  37.                        nodo.set_hijos([hijo_izquierdo, hijo_central, hijo_derecho])
  38.  
  39.  
  40. if __name__ == "__main__":
  41.    estado_inicial = [4, 2, 3, 1]
  42.    solucion = [1, 2, 3, 4]
  43.    nodo_solucion = buscar_solucion_BFS(estado_inicial, solucion)
  44.        #mostrar resultado
  45.    resultado = []
  46.    nodo = nodo_solucion
  47.    while nodo.get_padre() != None:
  48.        resultado.append(nodo.get_datos())
  49.        nodo = nodo.get_padre()
  50.    resultado.append(estado_inicial)
  51.    resultado.reverse()
  52.  
  53.    print resultado
  54.  


Título: Re: Error en busqueda en amplitud con python
Publicado por: tincopasan en 4 Junio 2015, 20:34 pm
eso es porque la función "buscar_solucion_BFS(estado_inicial, solucion):" debe retornar "NONE" en algún caso y la tuya no lo hace.