python - 使用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:\Users\User\PycharmProjects\Tema5AI\venv\lib\site-packages\anytree\node\node.py", line 66, in __init__
self.parent = parent
File "C:\Users\User\PycharmProjects\Tema5AI\venv\lib\site-packages\anytree\node\nodemixin.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))
更确切地说,问题是:如何通过当前树将子节点添加到节点?
以下问题对我没有帮助: How to specify children in anytree and print a tree
解决方案
例外是误导性的。我创建了一张票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))
推荐阅读
- bash - Bash 创建一个同名但小写的新文件
- ruby-on-rails - 如何为单个迁移设置 statement_timeout?
- docker - Docker 镜像修剪过滤
- neo4j - 如何使用 apoc.refactor.cloneNodes([nodes], true) 返回创建的关系?
- minecraft - 为什么我的召唤箱子的setblock命令不把我告诉它的物品放进去?
- python - 使用函数登录到网页,然后使用 Selenium 在 Python 中继续我的代码
- rust - Diesel:BoxableExpressions 通用表及其连接?
- python - Python 缩放循环
- c - 如何从使用动态分配创建的数组中删除所有重复项?
- html - 谷歌应用程序脚本中的 HtmlService.createHtmlOutput 是否更改字符串/它做什么/添加