當我運行這個程序,我得到MinimaxNode」對象有沒有屬性‘值’極小對於連接四不返回值
屏風式四子棋是初始化板,這標誌着移動的其他類的錯誤,檢查是否有人贏了,等 實用程序只是返回2點(這仍然是一個進展)
問題出現在MinimaxPlayer在child.get_minimax_value因爲它把那MinimaxNode」對象有沒有屬性‘值’
錯誤當我運行這個程序,我得到MinimaxNode」對象有沒有屬性‘值’極小對於連接四不返回值
屏風式四子棋是初始化板,這標誌着移動的其他類的錯誤,檢查是否有人贏了,等 實用程序只是返回2點(這仍然是一個進展)
問題出現在MinimaxPlayer在child.get_minimax_value因爲它把那MinimaxNode」對象有沒有屬性‘值’
錯誤如果get_minimax_value
是一個方法時需要明確山坳值賦給循環執行前,再檢查所,child.get_minimax_value
應child.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.minimax
爲return 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
但是,如果沒有可運行的代碼,真的很難說。
它實際上是「get_minimax_value(self):return self.value」,但現在它說'MinimaxNode'對象沒有屬性'值' –
好吧,這聽起來像是進步,但你必須告訴我們定義' MinimaxNode'然後。 – unutbu
我做了,我不明白爲什麼它不想返回值 –
您看到的輸出僅僅是因爲您打印出對象MinmaxNode
,它必須沒有設置__repr__
方法。
您在分配之前引用的「局部變量」col錯誤是因爲您在for循環中有條件地定義了col
,但在play_turn
中將其用作參數,無論它是否已分配。運行for
循環之後並在調用之前,應檢查是否已定義col
。
你得到的是錯誤的,因爲它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)
我剛剛嘗試過,它看起來像for循環永遠不會改變列號 –
@JackF你有沒有嘗試與調試器逐步通過看看是什麼值? – JaredPar
請發佈整個回溯錯誤消息。它應該提供導致錯誤的語句順序。 – unutbu
更好的是,請發佈[SSCCE](http://sscce.org/)。 – unutbu
@unutbu給我一秒鐘,我有點修復它,但MinimaxPlayer只把芯片放在第一列 –