今年秋天,我用 Python 为编程课做了一个项目,有一个 20 题风格的游戏,可以从用户的反应中学习。它使用基于对问题的是/否响应的树,并为每个决定以及动物在到达“分支”末端时提出独特的问题。
在课程快结束时,我们在 C++ 中做了一些工作(但我对它还是很陌生),我想在我的休息时间制作一个 C++ 版本的项目——这将使它更容易运行例如,一个可执行文件。但是,我发现 C++ 没有太多用于 pickle 式数据存储的选项,而且我认为 Boost.serialization 或 Boost.Python 不会特别适合这种情况。
还有其他选择吗,或者您对如何在 C++ 中以另一种方式处理数据有什么建议?
原始的 Python 代码包括:
def check(self):
correct, lastnode = self.ask(self.root) #lastnode is the closest guess to the new animal
if correct =='n':
print("Rats! I didn't get it. Please help me improve.")
newanimal = AnTreeNode(input("What is your animal? "))
oldanimal = lastnode
newquestion = input("Please enter a yes/no question that would\n select between a(n) %s \
and a(n) %s: " %(newanimal,lastnode.data))+" "
direction = input("What would be the correct answer for a(n) %s? " %newanimal)
newnode = AnTreeNode(newquestion, parent = lastnode.parent)
if lastnode.parent == None:
self.root = newnode
elif lastnode.parent.yes == lastnode:
newnode.parent.yes = newnode
else:
newnode.parent.no = newnode
if direction == 'y':
newnode.yes, newnode.no = newanimal, oldanimal
elif direction == 'n':
newnode.yes, newnode.no = oldanimal, newanimal
newanimal.parent = newnode
oldanimal.parent = newnode
self.dumpTree()
elif correct == 'y':
print("I am soooo smart!")
def loadTree(self):
try:
f = open(self.treefile, "rb")
self.root = pickle.load(f)
except:
self.root = AnTreeNode("frog")
def dumpTree(self):
pickle.dump(self.root, open(self.treefile, 'wb'))
如果我将数据保存到文件或数组中,我想不出一种使树工作的方法(而且我并不特别想制作一个动态数组,尽管如果将内容存储在数组中我可以弄清楚最终工作了。)这些问题是我不确定如何引用特定节点。任何其他选项,或关于如何使用这些选项的想法?谢谢!(还有圣诞快乐!)