如何替换网格中的对角线条目

时间:2018-08-31 23:39:01

标签: python loops

长时间尝试解决此难题但未成功后,我不得不寻求帮助。到目前为止,我设法使用python构建了网格,但是对角地插入了一个字符串,超出了我的语言理解范围。

请在下面查看我的代码:

board = []
for x in range(0,5):
    board.append(["O"] * 5)

print(board)

def print_board(board):
  for row in board:
    print(" ".join(row))

print_board(board)

O O O O O
O O O O O
O O O O O
O O O O O
O O O O O

我从这里尝试逐行并弹出每行的最后一行,并交替插入,例如x。但是,我失败了:

我需要得到以下结果:

x O O O O
O x O O O
O O x O O
O O O x O
O O O O x

5 个答案:

答案 0 :(得分:2)

如果确定板子是正方形,则对角线元素将是行号和列号相同的位置。您可以通过row = board [rowNum]逐行访问每一行,然后row [colNum]将为您提供单个元素。如果rowNum == colNum,则您在对角线上。您可以像下面一样将两者压在一起(board [i] [i])。

注意:如果您的电路板是一个列表(可变对象),在这样的函数中调用它,则即使不返回“ boardObject”,也会更改传递到boardObject的变量的内容,因此请直接转到该对象。

    def replace_diag(boardObject, replacement):
        for i in range(len(boardObject)):
             boardObject[i][i] = replacement

答案 1 :(得分:1)

为什么不只是

size = 5
board = []
for row in range(size):
    board.append(["O"]*row + ["X"] + ["O"]*(size-row-1))

答案 2 :(得分:0)

您是说要在i == j处写x吗?

board = []
for x in range(0,5):
    board.append(["O"] * 5)

print(board)

def print_board(board):
  for row in board:
    print(" ".join(row))


for i in range (0, 5):
  for j in range(0, 5):
    if i == j:
      board[i][j] = 'x'

print(board)

答案 3 :(得分:0)

Python中有一个非常方便的循环函数,称为 enumerate 。它不仅返回可迭代的元素,而且还返回其索引-看看:

def print_board(board):
  for i, row in enumerate(board):
    row[i] = 'x'
    print(" ".join(row))

请注意,这会更改您的主板2D阵列。如果您不想这样做,可以例如添加一个辅助变量。

答案 4 :(得分:0)

board = [] 对于x在范围(0,5)中:     board.append([“ O”] * 5)

打印(板)

def print_board(board):   对于我,请列举(板):       行[i] =“ X”

print_board(板)