Форум сайта python.su
Добрый вечер. Выручайте, нужна ваша помощь.
Напишите программу, на вход которой подаётся прямоугольная матрица в виде последовательности строк, заканчивающиеся строкой, содержащей только строку ‘end’. Программа должна вывести матрицу того же размера, у которой каждый элемент в позиции I,j равен произведению элементов первой матрицы на позициях (I-1, j), (I+1, j), (I, j-1), (I, j+1).
У крайних символов соседний элемент находится с противоположной стороны матрицы.
В случае одной строки/столбца элемент сам себе является соседом по соответствующему направлению.
Должно получиться примерно так:
5 7 4 1
7 9 6 3
2 6 7 9
end
98 1080 168 540
270 1764 756 378
1890 882 1296 42
2
end
2
end
Офлайн
Сам что-нибудь сделал? Хотя бы ввод матрицы и вывод матрицы сделай, без преобразований.
Офлайн
py.user.nextДа, у меня есть код, но здесь элемент в позиции i,j равен СУММЕ ЭЛЕМЕНТОВ первой матрицы на позициях (I-1, j), (I+1, j), (I, j-1), (I, j+1)., а мне нужно, чтобы элемент в позиции i,j был равен ПРОИЗВЕДЕНИЮ элементов первой матрицы на позициях (I-1, j), (I+1, j), (I, j-1), (I, j+1). Прошу пожалуйста вас помочь.
Сам что-нибудь сделал? Хотя бы ввод матрицы и вывод матрицы сделай, без преобразований.
n = '' m = [] while True: n = str(input()) if n == 'end': break m.append([int(s) for s in n.split()]) li, lj = len(m), len(m[0]) new = [[sum([m[i-1][j], m[(i+1)%li][j], m[i][j-1], m[i][(j+1)%lj]]) for j in range(lj)] for i in range(li)] for i in range (li): for j in range (lj): print(new[i][j], end =' ') print()
Офлайн
Найти произведение элементов списка можно так
>>> import functools >>> import operator >>> >>> lst = [1, 2, 3, 4, 5] >>> >>> out = functools.reduce(operator.mul, lst) >>> out 120 >>>
Отредактировано py.user.next (Дек. 8, 2019 02:00:31)
Офлайн
Bull787Классный код, только вывод матрицы подкачал:
for lst in new: print(*lst)
n = '' # не нужная строка n = str(input()) # str - не нужен, там и так строка
Отредактировано Vladimirv (Дек. 8, 2019 13:24:30)
Офлайн
py.user.nextБольшое спасибо
Найти произведение элементов списка можно так
Офлайн
VladimirvБольшое спасибо
Офлайн
Bull787Держи)
new = [[m[i-1][j] * m[(i+1)%li][j] * m[i][j-1] * m[i][(j+1)%lj] for j in range(lj)] for i in range(li)]
Отредактировано Vladimirv (Дек. 8, 2019 15:48:03)
Офлайн
VladimirvБОЛЬШОЕ спасибо вам
Офлайн