2016-06-15 2 views
0

Я не мог найти дерево python, которое я мог бы использовать для создания древовидной структуры для шахматных открытий, поэтому я попытался написать свой собственный. Чтобы продвигаться глубже в дерево, я пытаюсь вернуть подкрот, когда добавляю новую позицию, но кажется, что все позиции добавляются к корню, и мне не дают ссылку на подкрот, как я ожидаю, хотя я сделал проверку, и в корне тоже много внуков.Не передается желаемое значение для дерева python

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/python-chess – Josh

ответ

0

Вашего код не потому, что вы неправильно class variables.

В основном, когда вы объявляете children вне любой функции она контекстная на уровне класса, и все Node объектов имеют один и тот же список. Вы хотите определить его в пределах __init__ как self.children так, чтобы он находился на уровне экземпляра.

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

Это имеет смысл. Надеюсь, он это исправит! – Josh

+0

@Josh Помните, если код работал на вас, выберите его в качестве принятого ответа. Благодаря! –

+0

Это исправить. И я смог сделать некоторые рекурсивные методы, чтобы пересечь его, а также – Josh

Смежные вопросы