Модификация и вывод двумерной матрицы в Python

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


Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: