Напишите программу, на вход которой подаётся прямоугольная матрица в виде последовательности строк, заканчивающихся строкой, содержащей только строку «end» (без кавычек)
Программа должна вывести матрицу того же размера, у которой каждый элемент в позиции i, j равен сумме элементов первой матрицы на позициях (i-1, j), (i+1, j), (i, j-1), (i, j+1). У крайних символов соседний элемент находится с противоположной стороны матрицы.
В случае одной строки/столбца элемент сам себе является соседом по соответствующему направлению.
Ответ:
Сначала создается пустая матрица а. Далее в бесконечном цикле считываются строки чисел в переменную str, разделяются и в виде массива row добавляются в матрицу. Если строка равна значению ‘end‘, ввод завершается, запускается цикл for. При помощи вложенного цикла выводится на печать новая матрица, все вычисления происходят непосредственно в блоке print.
Чтобы не было выхода за пределы матрицы (в последней строке) используется конструкция i-len(a)+1, которая позволяет «зациклить» столбцы матрицы — последний элемент столбца при расчете суммирует предыдущий и первый (по условию).
Код Python:
a = [] while True: str = input() if str == 'end': break row = str.split() for i in range(len(row)): # преобразование элементов в число row[i] = int(row[i]) a.append(row) for i in range(len(a)): # старт вывода новой матрицы for j in range(len(a[i])): print(a[i-1][j] + a[i-len(a)+1][j] + a[i][j-1] + a[i][j-len(a[i])+1], end=' ') print()