Напишите программу, на вход которой подаётся прямоугольная матрица в виде последовательности строк, заканчивающихся строкой, содержащей только строку «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()