Как заменить записи диагонали в сетке - PullRequest
0 голосов
/ 01 сентября 2018

После долгих часов попыток решить эту головоломку безуспешно, я должен попросить помощи. До сих пор мне удавалось построить сетку, используя 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 голосов
/ 01 сентября 2018

доска = [] для х в диапазоне (0,5): board.append (["O"] * 5)

печать (доска)

def print_board (board): для i, строка в перечислении (доска): строка [I] = "X"

print_board (доска)

0 голосов
/ 01 сентября 2018

В Python есть очень удобная функция для циклов, которая называется enumerate . Он просто возвращает не только элемент итерируемого, но и его индекс - посмотрите:

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

Обратите внимание, что это меняет 2D-массив вашей платы. Если вы не хотите этого, вы можете, например, добавить вспомогательную переменную.

0 голосов
/ 01 сентября 2018

Почему не просто

size = 5
board = []
for row in range(size):
    board.append(["O"]*row + ["X"] + ["O"]*(size-row-1))
0 голосов
/ 01 сентября 2018

Если вы уверены, что ваша доска является квадратом, диагональные элементы будут там, где номер строки и номер столбца совпадают. Вы можете получить доступ к каждой строке по row = board [rowNum], и оттуда row [colNum] даст вам один элемент. Если rowNum == colNum, вы находитесь на диагонали. Вы можете сжать их вместе, как я сделал ниже (доска [i] [i]).

Примечание. Если ваша доска - это список (изменяемый объект), вызывающий ее в подобной функции, изменит содержимое переменной, которая была передана в boardObject, даже без возврата «boardObject», так что заголовок по этому вопросу.

    def replace_diag(boardObject, replacement):
        for i in range(len(boardObject)):
             boardObject[i][i] = replacement
0 голосов
/ 01 сентября 2018

Вы имеете в виду, что хотите написать х, где i == j?

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...