Проблема с решением задачи "Шахматная доска"
Текст задачи:
Даны два числа 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 шт):
Как уже написали выше, лучше не стоит так налегать на "срочность" задания, нежели на сам код, который был представлен вместе с задачей. В противном же случае будут считать, что они должны срочно что-то сделать за Вас. На будущее могу предложить ознакомиться с 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)]
В своём решении вы учитываете чередование в строке, но не учитываете чередование самих строк. За номер строки в вашем коде отвечает переменная 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)]