なぜ私のpythonコードが特定の方法で動作するのかについて私の頭を包み込むことはできません。Pythonは反復ごとに異なる値を出力しますが、値は変更されません。
私は "current"を変更しないので、出力は各繰り返しで同じになるはずですか?これは問題です。なぜなら、各ノードが同じ開始値から生成されるように、「現在」が同じである必要があるからです。
次のコードを参照してください。
tester.py
class Node:
def __init__(self, board=None):
self.board = board
def getBoard(self):
return self.board
def swap(self, xPos, yPos): # swap with zero
for a in self.board:
if 0 in a:
self.board[self.board.index(a)][a.index(0)] = self.board[xPos][yPos]
self.board[xPos][yPos] = 0
open = []
def gen_nodes(current):
for i in [7, 15, 11]:
print(current) # <-- why does this print a different value each time?
new = Node(current)
for a in new.getBoard():
if i in a:
xPos = new.getBoard().index(a)
yPos = a.index(i)
new.swap(xPos, yPos)
open.append(new)
if __name__ == '__main__':
gen_nodes([[1, 2, 3, 4],
[8, 5, 6, 7],
[9, 10, 11, 0],
[12, 13, 14, 15]])
出力:
[[1, 2, 3, 4], [8, 5, 6, 7], [9, 10, 11, 0], [12, 13, 14, 15]]
[[1, 2, 3, 4], [8, 5, 6, 0], [9, 10, 11, 7], [12, 13, 14, 15]]
[[1, 2, 3, 4], [8, 5, 6, 15], [9, 10, 11, 7], [12, 13, 14, 0]]
私が作成したクイックデバッグセッションでは、問題は 'new.swap(xPos、yPos)'にあります。つまり、これは「現在の」変更箇所です。まだ正確に何が起こっているのか把握しようとしています。 – noamgot
'def getBoard(self):'これはJavaではありません。ゲッターやセッターを作ってはいけません。 –