首页 > 解决方案 > Python 在决策树中使用一个参数调用不同的类变量

问题描述

所以我试图用类为tictactoe制作一个决策树,我不能让函数每次都调用不同的类变量。

class Node(object):
def __init__(self, player, state):
    self.possible = poss_moves(state)
    self.player = player
    self.local_state = state
    self.score = 0
    self.one = None
    self.two = None
    self.three = None
    self.four = None
    self.five = None
    self.six = None
    self.seven = None
    self.eight = None

如果我尝试用这个函数调用新的子节点,它就不起作用。如果我用 node.one、node.two 等输入代码。它可以工作,但我觉得必须有一种方法可以使这个功能工作。我尝试将它作为字符串传递,只需将 node.one 作为参数,将 node.one 分配给变量

def digger(self, node, child):
    temp = copy.deepcopy(node.local_state)
    temp[node.possible[0][0]][node.possible[0][1]] = node.player
    if len(poss_moves(temp)) == 0 or wincon.win_check(temp) == node.player:
        child = End_State(temp)
        node.score += child.score
    else:  
        if node.player == 2:
            child = Node(1, temp)
            self.deeper(child)
            node.score += child.score
        else:
            child = Node(2, temp)
            self.deeper(child)
            node.score += child.score
    node.possible.pop(0)



def deeper(self, node):
    while len(node.possible) > 0:
        self.digger(node, node.one)
        if len(node.possible) == 0:
            break
        self.digger(node, node.two)
        if len(node.possible) == 0:
            break
        self.digger(node, node.three)
        if len(node.possible) == 0:
            break
        self.digger(node, node.four)
        if len(node.possible) == 0:
            break
        self.digger(node, node.five)
        if len(node.possible) == 0:
            break
        self.digger(node, node.six)
        if len(node.possible) == 0:
            break
        self.digger(node, node.seven)
        if len(node.possible) == 0:
            break
        self.digger(node, node.eight)

标签: pythonpython-3.x

解决方案


推荐阅读