Python 滑动二维列表中的列和行
我正在尝试实现一个简单的纸牌游戏,其中的目标是移动不同颜色的行和列,直到它们形成特定的图案。我试图使用2d列表表示我的游戏板配置:Python 滑动二维列表中的列和行,python,Python,我正在尝试实现一个简单的纸牌游戏,其中的目标是移动不同颜色的行和列,直到它们形成特定的图案。我试图使用2d列表表示我的游戏板配置: board = [['W', 'W', 'W', 'W'], ['W', 'W', 'W', 'W'], ['B', 'B', 'B', 'B'], ['B', 'B', 'B', 'B']] 假设我们有以下目标板: goal = [['W', 'B', 'B', 'W'], ['W', 'W'
board = [['W', 'W', 'W', 'W'],
['W', 'W', 'W', 'W'],
['B', 'B', 'B', 'B'],
['B', 'B', 'B', 'B']]
假设我们有以下目标板:
goal = [['W', 'B', 'B', 'W'],
['W', 'W', 'W', 'W'],
['W', 'W', 'B', 'B'],
['B', 'B', 'B', 'B']]
对于给定的移动,只能向上或向下移动一列的元素,或向右或向左移动一行的元素。从线路板末端脱落的元素将循环回要移位的列或行的另一侧。如何实现功能以实现此功能?对我来说,沿一行移动元素的实现似乎相当简单,例如:
def shift_left(board, row_num, num_tiles):
for i in range(0, num_tiles):
elem = board.pop(0)
board.append(elem)
我走对了吗?如何实现沿列移动元素的功能 您可以转换电路板,然后重用先前定义的例程。下面是您在
向下移动时的操作方法
def transpose(lst):
return list(map(list, zip(*lst)))
def shift_down(board, row_num, num_tiles):
board = transpose(board)
shift_left(board)
board = transpose(board)
对于shift\u right
和shift\u up
也有类似的过程,这里有一种方法可以实现这一点
from copy import deepcopy
def shift(board, ix, direction):
if direction is 'up':
return shift_col(board, ix, direction)
if direction is 'down':
return shift_col(board, ix, direction)
if direction is 'left':
return shift_row(board, ix, direction)
if direction is 'right':
return shift_row(board, ix, direction)
def shift_col(board, col_ix, direction):
temp = [row[col_ix] for row in board]
if direction is 'up':
temp = temp[1:len(temp)] + [temp[0]]
if direction is 'down':
temp = [temp[-1]] + temp[0:-1]
for ix, i in enumerate(board):
i[col_ix] = temp[ix]
return board
def shift_row(board, row_ix, direction):
if direction is 'right':
temp = [board[row_ix][-1]] + board[row_ix][0:-1]
if direction is 'left':
temp = board[row_ix][1:len(board[row_ix])] + [board[row_ix][0]]
board[row_ix] = temp
return board
然后我们可以用下面的方法使用它
board = [['W', 'W', 'W', 'W'],
['W', 'W', 'W', 'W'],
['B', 'B', 'B', 'B'],
['B', 'B', 'B', 'B']]
# Shifts the board for a row or column index
# in the specified direction.
# up/down: ix is for columns
# left/right: ix is for rows
board = shift(deepcopy(board), 2, 'down')
for i in board:
print(i)
哦,太好了,这是一个填鸭式输入代码而不让OP自己思考的答案。不再需要开发自己的代码,他们可以复制粘贴你的代码,一切都很好。你的代码实际上并没有解释它的功能。一个小例子可以帮助人们开始或了解做事情的新方法,否则他们将不会接触到这些新方法。两种不同的教学方法。从长远来看,你的方法可以说更好,但从短期来看,通过示例学习可以更快地向学习曲线上爬。两者的良好平衡可能是最好的。此外,根据OP对最佳答案(对他最有帮助的东西)的感知,将获得分数。因此,对于OP和我来说,这是一场双赢的游戏。不要恨玩家,要恨游戏。