2013-04-02 24 views
0

當我運行這個程序,我得到MinimaxNode」對象有沒有屬性‘值’極小對於連接四不返回值

屏風式四子棋是初始化板,這標誌着移動的其他類的錯誤,檢查是否有人贏了,等 實用程序只是返回2點(這仍然是一個進展)

問題出現在MinimaxPlayer在child.get_minimax_value因爲它把那MinimaxNode」對象有沒有屬性‘值’

錯誤
+0

請發佈整個回溯錯誤消息。它應該提供導致錯誤的語句順序。 – unutbu

+0

更好的是,請發佈[SSCCE](http://sscce.org/)。 – unutbu

+0

@unutbu給我一秒鐘,我有點修復它,但MinimaxPlayer只把芯片放在第一列 –

回答

1

如果get_minimax_value是一個方法時需要明確山坳值賦給循環執行前,再檢查所,child.get_minimax_valuechild.get_minimax_value()

沒有括號,child.get_minimax_value代表一個綁定方法,而不是方法返回的值。

因此,child.get_minimax_value永不等於v,並且if-clause條件爲False,並且col從不設置。然後

的Python會當它到達

board.ConnectFour.play_turn(self.playernum, col) 

我想也許在MinimaxPlayer.minimaxreturn v語句縮進級別應該是for -loops外引發錯誤。否則,該節點的值將僅取決於node.children中的第一個孩子。

def minimax(self, node, cur_depth): 
    if cur_depth == self.ply_depth: 
     u = self.utility.compute_utility(node, self.playernum) 
     node.set_minimax_value(u) 
     return u 
    node.compute_children() 
    if cur_depth % 2 == 0: 
     v = float("-inf") 
     for child in node.children: 
      childval = self.minimax(child, cur_depth + 1) 
      v = max(v, childval) 
      node.set_minimax_value(v) 
     return v 
    if cur_depth % 2 != 0: 
     v = float("inf") 
     for child in node.children: 
      childval = self.minimax(child, cur_depth + 1) 
      v = min(v, childval) 
      node.set_minimax_value(v) 
     return v 

但是,如果沒有可運行的代碼,真的很難說。

+0

它實際上是「get_minimax_value(self):return self.value」,但現在它說'MinimaxNode'對象沒有屬性'值' –

+0

好吧,這聽起來像是進步,但你必須告訴我們定義' MinimaxNode'然後。 – unutbu

+0

我做了,我不明白爲什麼它不想返回值 –

0

您看到的輸出僅僅是因爲您打印出對象MinmaxNode,它必須沒有設置__repr__方法。

您在分配之前引用的「局部變量」col錯誤是因爲您在for循環中有條件地定義了col,但在play_turn中將其用作參數,無論它是否已分配。運行for循環之後並在調用之前,應檢查是否已定義col

0

你得到的是錯誤的,因爲它s possible the following line runs before col`分配

board.ConnectFour.play_turn(self.playernum, col) 

col值只有for循環體中分配。 python解釋器可以看到並得出結論:如果循環體執行0次,或者if條件從不計算爲true,那麼將不分配col

你叫play_turns

col = -1 
for child in root.children 
    ... 
if col != -1: 
    board.ConnectFour.play_turn(self.playernum, col) 
+0

我剛剛嘗試過,它看起來像for循環永遠不會改變列號 –

+0

@JackF你有沒有嘗試與調試器逐步通過看看是什麼值? – JaredPar