gpt4 book ai didi

python - 保存基于Python程序的二叉树中的所有节点

转载 作者:行者123 更新时间:2023-11-30 09:24:03 25 4
gpt4 key购买 nike

我一直在尝试添加一种存储和检索程序animal.py获得的知识的方法。 ,这是一种通过二元决策树工作的“20 个问题”学习算法。 (请点击链接查看原程序)

在原始程序中,我为每个节点添加了状态“up”,以指向决策树中节点的父节点,以便更轻松地在树上上下移动。我还使用正则表达式将所有非字母数字用户输入更改为空格,因此用户不能混淆我的两个新函数:

def know(know):
#Load preset knowledge
p=node("")
knowledge=p
for char in know:
if char not in "+-":p.question+=char
if char=="+":
p.right=node("")
p.right.up=p
p.left=node("")
p.left.up=p
p=p.right
if char=="-": p=p.up.left
return knowledge

def output(node,accum=""):
#Output all knowledge
accum=accum+node.question
if node.right!= None : accum=output(node.right,accum+"+")
if node.left!= None : accum=output(node.left,accum+"-")
return accum

函数“output”旨在返回作为单个字符串传递给它的节点下的完整树,其中“+”和“-”字符指示该字符串接下来是哪个节点。函数“know”应该采用先前由“output”创建的字符串,创建二元决策树并返回指向顶部节点的指针。这是我无法弄清楚的不太有效的部分。 (目前,我将初始知识字符串直接输入到程序源中:稍后将添加加载和保存文件,看起来是一个微不足道的任务)

例如:output(know('mineral+crystal+quartz-obsidian-nothing')) 返回:'mineral+crystal+quartz-obsidiannothing-'

它应该返回原始字符串:'mineral+crystal+quartz-obsidian-nothing'

我确信这应该有效(理论上),但我已经碰壁了,并且真的不明白为什么它不起作用。

我的想法是错误的,还是我只是试图实现它?有没有更好的方法来存储从原始程序创建的决策树?

我是一位狂热的读者,但第一次在 stackoverflow 上发帖,并且对这个网站上的人才感到敬畏,所以我非常期待您的想法。

最佳答案

pickle module可以序列化和反序列化复杂的结构。这应该很简单:

with open('animal.dat', 'w') as outf:
pickle.dump(knowledge, outf)

with open('animal.dat', 'r') as inf:
knowledge = pickle.load(inf)

正如他们所说,"the batteries are included"所以学习标准库会让困难的事情变得容易,even flying .

关于python - 保存基于Python程序的二叉树中的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com