如果我提出一个有点明显的问题,我会事先道歉,但我对Python有些新意,我仍在弄清楚它的问题。
我正在编写一个脚本来搜索树,从节点A开始,(希望)终止于目标节点M.我的工作基于人工智能:现代方法中提供的示例代码,specifically this Python search script。
尝试执行breadth_first_search时遇到困难,我收到以下错误:
...
update(self, state=state, parent=parent, action=action,
path_cost=path_cost, depth=0)
NameError: global name 'update' is not defined
我正在尝试使用update() function来更新节点的状态,父级,子级等,其代码如下:
class Node:
def __init__(self, state, parent=None, action=None, path_cost=0):
"Create a search tree Node, derived from a parent by an action."
update(self, state=state, parent=parent, action=action,
path_cost=path_cost, depth=0)
if parent:
self.depth = parent.depth + 1
我现在已经坚持了一段时间,我不确定如何继续。我将非常感谢任何有助于解决此问题的建议。谢谢!
答案 0 :(得分:1)
update()
是字典对象的实例方法。除非您为Node
定义相同的方法:
class Node:
...
def update(self, ...)
在课堂上有一个字典,可以是update
d:
class Node:
def __init__(self, ...):
...
self.some_dict.update(...)
或创建或import
带有Node
对象的函数:
def update(node, ...)
它将无法使用。
答案 1 :(得分:0)
您为update
提供的链接不是全局函数,而是字典的成员,因此必须在字典上调用。如果你的班级有一个,例如数据
def __init__(self, state, parent=None, action=None, path_cost=0):
"Create a search tree Node, derived from a parent by an action."
self.data.update(state=state, parent=parent, action=action, path_cost=path_cost, depth=0)
# Note the indentation
修改强>
此外,您链接的代码也没有utils.py here
这定义了一个全局更新函数,它将执行Node
尝试执行的操作:
def update(x, **entries):
"""Update a dict; or an object with slots; according to entries.
>>> update({'a': 1}, a=10, b=20)
{'a': 10, 'b': 20}
>>> update(Struct(a=1), a=10, b=20)
Struct(a=10, b=20)
"""
if isinstance(x, dict):
x.update(entries)
else:
x.__dict__.update(entries)
return x
您可能需要获取整个svn repo及其目录结构才能使其正常工作。
答案 2 :(得分:0)
update()
是内置dict
类型的方法。请注意该方法文档所在的部分。如果您使用字典,我们称之为my_dict
,您可以这样做:
my_dict.update(state=state, parent=parent, action=action, path_cost=path_cost, depth=0)
但我不确定您是否在为代码使用字典。您发布的链接未定义update()
功能。必须使用示例代码顶部的行导入它:
from utils import *
这假设在utils.py
中有一个名为update
的函数。如果是这种情况,您需要在文件中包含import
语句。
答案 3 :(得分:0)
您链接的update()函数是dict类型的方法。如果你的对象是dict的子类(或子类的子类),你应该可以调用
self.update()