私はこの秋、Pythonでプログラミングクラスのプロジェクトを行い、ユーザーの応答から学習する20の質問スタイルのゲームを作成しました。質問に対するyes/noの回答に基づいたツリーを使用し、「ブランチ」の終わりに到達したら、動物と一緒に各決定に固有の質問を選択して質問します。
クラスの終わりに向けて、C ++でいくつかの作業を行いました(ただし、私はまだ非常に新しいです)。休憩中にプロジェクトのC++バージョンを作成したいと思います。これにより実行がはるかに簡単になります。たとえば、実行可能ファイルとして。ただし、C ++にはピクルススタイルのデータストレージのオプションがあまりないことがわかりました。この状況では、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'))
データをファイルまたは配列に保存した場合、ツリーを機能させる方法を考えることはできません(そして、配列に格納することで理解できますが、特に動的配列を作成したくありません)それらの問題は、特定のノードを参照する方法がわからないことです。他のオプション、またはそれらをどのように扱うかについての考えはありますか?ありがとう!(そしてメリークリスマス!)