0
from node import *
from copy import deepcopy
import pygame
from PIL import Image

def buscar_solucion(inicio, solucion):

    visitados=[]
    nodo_i=Nodo(inicio)

    while nodo_i.get_datos() != solucion:

        nodo_i = deep_search(nodo_i,solucion,visitados)

    moves=[]
    moves.append(solucion)

    while nodo_i.get_padre() != None:
        pater=nodo_i.get_padre()
        moves.append(pater.get_datos())
        nodo_i=pater
    moves.reverse()
    print moves

 def operaciones_h(dades):
   r=[]
   i=0
   while dades[i] != dades[-1]:
      s=deepcopy(dades)
      s[i]=dades[i+1]
      s[i+1]=dades[i]
      r.append(Nodo(s))
      i+=1
   return r

def deep_search(ini,sol,visit):

    visit.append(ini.get_datos())

    if ini.get_datos() == sol:
        return ini

    else:
        hijos=operaciones_h(ini.get_datos())
        for hijo in hijos:
            if hijo.get_datos() not in visit:
                hijo.set_padre(ini)
                return deep_search(hijo,sol,visit)

在创建 Class 的实例时,我遇到的问题在第 14 行Nodo。我得到的错误是:

AttributeError: 'NoneType' object has no attribute 'get_datos'

该类在一个名为node.py. 问题可能出在导入中吗?或者在定义实例时?

4

2 回答 2

0

问题出在你的deep_search函数中——它并不总是返回任何东西。例如,考虑如果operaciones_h(ini.get_datos())返回一个空列表会发生什么:for hijo in hijos永远不会进入循环。即便如此,如果所有 datos 都在 中visit,该if语句将永远不会是 True 并且您将永远不会点击 return 语句。在这两种情况下, 的值deep_search都是None

您应该确保所有路径都deep_search以返回Nodo对象结束。

于 2013-04-17T09:19:42.677 回答
0

在某些情况下nodo_i = deep_search(nodo_i,solucion,visitados)调用会返回None。里面deep_search有以下代码:

else:
    hijos=operaciones_h(ini.get_datos())
    for hijo in hijos:
        if hijo.get_datos() not in visit:

如果operaciones_h返回一个空列表或者如果没有任何hijo值与您的if语句匹配,则该函数返回None并且您将看到您的异常。

于 2013-04-17T09:20:19.173 回答