Проблема с решением задачи "Шахматная доска"

Текст задачи:

Даны два числа n и m. Создайте двумерный массив размером n×m и заполните его символами 1 и 0 в шахматном порядке. В левом верхнем углу должна стоять единица.

Данную задачу необходимо решить с помощью генератора, который заполнит матрицу A. Вы должны отправить на проверку единственную строку вида:

A = [текст генератора]

Например:

3 4
1 0 1 0
0 1 0 1
1 0 1 0

Код:

n, m = map(int, input().split())

# Сюда надо вставить генератор

for i in range(n):
    for j in range(m):
        print(A[i][j], end = ' ')
    print()

Что я сделал::

A = [['10'[(j + 1) % 2] for j in range(m)] for i in range(n)]

Но выводит 0 1 0 1, 0 1 0 1, 0 1 0 1. Не могу понять в чём ошибка


Ответы (2 шт):

Автор решения: 4500zenja

Как уже написали выше, лучше не стоит так налегать на "срочность" задания, нежели на сам код, который был представлен вместе с задачей. В противном же случае будут считать, что они должны срочно что-то сделать за Вас. На будущее могу предложить ознакомиться с FAQ по хорошему написанию вопросов.

Если же говорить про сам код, то Вы просто вставили в выражение (j + 1) единицу вместо 1, из-за чего параметр i просто пропадает, в отличие от j.

n, m = map(int, input().split())

A = [['10'[(j + i) % 2] for j in range(m)] for i in range(n)]

for i in range(n):
    for j in range(m):
        print(A[i][j], end = ' ')
    print()
# 1 0 1 0 
# 0 1 0 1 
# 1 0 1 0 

UPD: если хочется покрасивее и без строки, то можно написать так:

A = [[(j + i + 1) % 2 for j in range(m)] for i in range(n)]
→ Ссылка
Автор решения: nomnoms12

В своём решении вы учитываете чередование в строке, но не учитываете чередование самих строк. За номер строки в вашем коде отвечает переменная i.

Вы можете использовать тот же подход, что и со столбцами:

  • i % 2 == 0 — строка чётная
  • i % 2 == 1 — строка нечётная

Сложите индекс столбца с индексом строки и только потом возьмите остаток от деления. Тогда ваше решение будет верным:

A = [['10'[(j + i) % 2] for j in range(m)] for i in range(n)]

Но его ещё можно упростить. Нет нужды в использовании строки:

A = [[(j + i + 1) % 2 for j in range(m)] for i in range(n)]
→ Ссылка