使用anytree模块在python中创建动态树



我试图为minmax算法创建一个实现,并且需要创建一个包含所有可能移动的树。使用python 3.7中的anytree模块创建一个树,但当尝试在第一个树级别迭代并构建下一个级别时,会收到一个错误。

Traceback (most recent call last):
Hello from the pygame community. https://www.pygame.org/contribute.html
File "C:/Users/User/PycharmProjects/Tema5AI/Main.py", line 217, in <module>
min_max_algorithm(game)
File "C:/Users/User/PycharmProjects/Tema5AI/Main.py", line 209, in min_max_algorithm
new_node = Node((game, i, 0), parent=(pre, fill, node))
File "C:UsersUserPycharmProjectsTema5AIvenvlibsite-packagesanytreenodenode.py", line 66, in __init__
self.parent = parent
File "C:UsersUserPycharmProjectsTema5AIvenvlibsite-packagesanytreenodenodemixin.py", line 126, in parent
msg = "Parent node %r is not of type 'NodeMixin'." % (value)
TypeError: not all arguments converted during string formatting

我的构建树代码是:

def min_max_algorithm(game):
first_black_move = util.get_all_available_black(game)
root = Node(game)
for i in first_black_move:
node = Node((game, i, 0), parent=root)
for pre, fill, node in RenderTree(root):
first_white_move = util.get_all_available_white(game)
for i in first_white_move:
new_node = Node((game, i, 0), parent=(pre, fill, node))
for pre, fill, node in RenderTree(root):
print("%s%s" % (pre, node.name))

更确切地说,问题是:如何通过遍历当前树将子节点添加到节点?

以下问题对我没有帮助:如何在任意树中指定子级并打印树

从文件中读取数据并使用python 中的任意树创建树

如何在Python中实现树?Python中有没有像Java中那样的内置数据结构?

异常具有误导性。我创建了一张票https://github.com/c0fec0de/anytree/issues/121.

您可以随时添加节点。请确保仅将节点对象设置为父对象或子对象。也许最好使用迭代器而不是呈现函数,即PreOrderIter。请尝试这个

def min_max_algorithm(game):
first_black_move = util.get_all_available_black(game)
root = Node(game)
for i in first_black_move:
node = Node((game, i, 0), parent=root)
for n in PreOrderIter(root):
first_white_move = util.get_all_available_white(game)
for i in first_white_move:
new_node = Node((game, i, 0), parent=n)
for pre, fill, node in RenderTree(root):
print("%s%s" % (pre, node.name))

最新更新