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)
在创建类Nodo
的实例时,我得到的问题在第14行。我得到的错误是:
AttributeError: 'NoneType' object has no attribute 'get_datos'
Class在名为node.py
的文件中定义。问题可能在于导入?或者在定义实例时?
答案 0 :(得分:0)
问题出在您的deep_search
函数中 - 它并不总是返回任何内容。例如,考虑如果operaciones_h(ini.get_datos())
返回空列表会发生什么:永远不会输入for hijo in hijos
循环。即便如此,如果所有数据都在visit
中,if
语句将永远不会为True,您将永远不会返回return语句。在这两种情况下,deep_search
的值都是None
。
您应确保通过deep_search
的所有路径以返回Nodo
对象结束。
答案 1 :(得分: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
,您将看到异常。