【发布时间】:2016-02-14 23:25:35
【问题描述】:
我正在尝试创建一个类,该类可以从 Game Tic-Tac-Toe 中为棋盘生成决策树。我正在使用帖子Tic-Tac-Toe: How to populate decision tree? 上用户“ssoler”的评论作为课程的基础,但我认为课程没有工作。一方面,我看不到所有输出,因为使用“...”将它们缩写为空闲。我过去对类和递归的使用也很差。我的目标是将 Minimax 算法和 alpha-beta 修剪应用于类输出的树。
win_comb=((0,1,2),(3,4,5),(6,7,8),(6,3,0),(7,4,1),(8,5,2),(6,4,2),(8,4,0))
Board = [1, 2, 3, 4, 5, 6, 7, 8, 9]
whose_move = 1
child_nodes = []
class Node():
def __init__(self,Board,win_comb,whose_move, child_nodes):
self.c_g_s = Board
self.node = None
self.new_node = None
self.child_nodes = child_nodes
self.win_comb = win_comb
self.w_m = whose_move
def create_tree(self):
for index,each in enumerate(self.c_g_s):
if each == index + 1:
self.new_node = self.c_g_s
if self.w_m == 1:
self.new_node[index] = "X"
self.w_m = 0
else:
self.new_node[index] = "O"
self.w_m = 1
self.new_node = tuple(self.new_node)
if self.available_moves():
self.new_node = self.c_g_s
self.child_nodes.append(self.create_tree())
else:
child_nodes.append(self.new_node)
if self.child_nodes:
return [self.node,self.child_nodes]
return
def available_moves(self):
for index, each in enumerate(self.c_g_s):
if index + 1 == each:
return False
return True
n = Node(Board,win_comb,whose_move,child_nodes)
print(n.create_tree())
【问题讨论】:
-
'...'输出可能是尝试打印递归数据结构的结果。 (我怀疑self.c_g_s或self.child_nodes,虽然我还没有真正看过它。)由于打印一个包含自身的结构需要很长时间,Python 的标准类型使用'...'作为占位符来表示“更多相同这里”。reprlib.recursive_repr装饰器允许您将自己的__repr__函数标记为潜在递归,以避免在您自己的容器类型中出现此问题。
标签: python oop recursion tic-tac-toe