Создание матрицы списков
Всем привет! Застрял на задачке по циклам. Не могу понять как заполнять строки матрицы числами, согласно представленного на скрине правила
Суть задачи: На вход программе подаются два натуральных числа ? и ?. Напишите программу, которая создает матрицу размером ?×?, заполнив её в соответствии с образцом. Вот что у меня пока получилось:
def create_matrix(n, m):
matrix = []
for i in range(n):
row = [m] * m
matrix.append(row)
return matrix
Образец ниже. Прошу извинить за корявый формат кода, на телефоне не работют кнопки оформления
Ответы (2 шт):
Для начала сделаем традиционное добавление элементов в список. Такой код проще отлаживать.
Каждый элемент зависит и от номера строки и от номера столбца. Использование остатка от деления %m
позволяет ограничить диапазон чисел и обеспечить цикличность.
def create_matrix(n, m):
matrix = []
for i in range(n):
row = []
for j in range(m):
row.append((j+i)%m+1)
matrix.append(row)
return matrix
Теперь используем вложенные списковые включения (list comprehension), которые делают то же самое:
def create_matrixx(n, m):
return [[(j+i)%m+1 for j in range(m)] for i in range(n)]
Если нужен форматированный вывод как в примере, то в первую функцию, которую для Вас написал MBo, добавьте следующий код:
for idx, el in enumerate(matrix):
el = map(str, el)
matrix[idx] = " ".join(el)
return "\n".join(matrix)