2016-06-15 11 views
0

私は自分自身を書き込もうとしましたが、私はチェスの木構造を作成するために使用できるpythonツリーを見つけることができませんでした。ツリーを深く進めるために、私は新しいポジションを追加するときにサブルートを返そうとしますが、すべてのポジションがルートに追加されているようですが、私は予想通りサブルートへの参照を与えられませんチェックしてルートには多くの孫がいます。あなたはそれがクラスレベルでスコープされる任意の関数のchildren外を宣言し、すべてのNodeオブジェクトが同じリストを共有するときに、基本的にPythonツリーに希望の値が渡されていません

class variables.を誤用しているので、

import chess.pgn 

class Node(object): 
    children = [] 
    score = None 
    def __init__(self, fen): 
     self.fen = fen 
    def add(self, fen): 
     for c in self.children: 
      if c.fen == (fen): 
       print("working") 
       return c 
     self.children.append(Node(fen)) 
     return self.children[-1] 

root = Node('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1') 
def createTree(fileName): 
    pgn = open(fileName) 
    game = chess.pgn.read_game(pgn) 
    while(game):  
     next_move = game.variations[0] 
     fen = next_move.board().fen() 
     global root 
     currentRoot = root.add(fen) 

     while(not next_move.is_end() and next_move.board().fullmove_number <= 5): 
      next_move = next_move.variations[0] 
      fen = next_move.board().fen() 
      currentRoot = currentRoot.add(fen) 
      print(currentRoot.children) 
     game = chess.pgn.read_game(pgn) 

file = r"C:\all.pgn" 
createTree(file) 
for n in root.children: 
    print(n.fen) 
+0

使用している 'chess.pgn'ライブラリへのダウンロードリンクを提供してください。 –

+0

https://pypi.python.org/pypi/pythonchesches – Josh

答えて

0

あなたのコードは失敗します。 __init__の範囲内で、self.childrenと定義すると、インスタンスレベルでスコープが設定されます。

class Node: 
    def __init__(self, fen): 
     self.fen = fen 
     self.score = None 
     self.children = [] 
    ... 
+0

意味があります。それが修正されることを願っています! – Josh

+0

@Joshコードがあなたのために働いていれば、それを受け入れられた答えとして選択してください。ありがとう! –

+0

それを修正しました。そして、私はそれを横断する再帰的な方法もいくつか作ることができました – Josh

関連する問題