【发布时间】:2019-02-20 23:04:05
【问题描述】:
我正在尝试解决熄灯谜题。我使用布尔值的二维列表(例如[[True, True, True], [True, True, True], [True, True, True]])来表示灯光的状况。
我想在给定位置(例如(1,1))反转布尔值,我编码为:
class LightsOutPuzzle(object):
def __init__(self, board):
self.board = board
def get_board(self):
return self.board
def perform_move(self, row, col):
self.board[row][col] = not self.board[row][col]
print(self.board)
return LightsOutPuzzle(self.board)
我调用 perform_move(1,1) on
[[False, False, False], [False, False, False], [False, False, False]]
但结果是:
[[False, True, False], [False, True, False], [False, True, False]]
这让我很困惑。你能告诉我它有什么问题吗?完成这项任务的正确方法是什么? 非常感谢您的帮助!
我正在使用这个函数来生成新的板:
def create_puzzle(rows, cols):
c = []
r = []
for x in range(cols):
c.append(False)
for y in range(rows):
r.append(c)
return LightsOutPuzzle(r)
它会导致问题吗?
非常感谢您的回复!!! QQ号
【问题讨论】:
-
您初始化板以具有与所有行相同的单个列表。可能类似于
board = [[] * 3]而不是board = [[], [], []] -
这可能是怎么回事:stackoverflow.com/questions/240178/…
-
预期的结果是什么?你知道 Python 从 0 开始吗?
-
换句话说,问题不在于您发布的代码,而在于您用于初始化原始板的代码。你应该用
LightsOutPuzzle([[True]*3 for _ in range(3)])初始化它。 -
非常感谢你们!现在问题解决了,我真的没想到原因!我从中吸取了教训!再次感谢!!!