#python #matrix
#python #матрица
Вопрос:
Я новичок в Python. У меня такая задача:
Напишите программу, которая получает прямоугольную матрицу в виде последовательности строк в качестве входных данных. За последней строкой матрицы следует строка, содержащая только строку «end».
Программа должна выводить матрицу того же размера, в которой каждый элемент в позиции i, j равен сумме элементов первой матрицы в позициях (i-1, j), (i 1, j), (i, j-1), (i, j-1)., j 1). Для крайних символов соседний элемент находится на противоположной стороне матрицы.
В случае одной строки / столбца сам элемент является соседом в соответствующем направлении.
Например
Пример ввода 1:
9 5 3
0 7 -1
-5 2 9
end
Пример вывода 1:
3 21 22
10 6 19
20 16 -1
Я написал код, который работает для прямоугольных и квадратных матриц, но я не знаю, как заставить его работать с матрицами 1 x m и n x 1.
l2 = []
l3 = []
length = 0
width = 0
while True:
x = input()
if x == 'end':
break
else:
length = 0
for i in x:
if i.isdigit():
length =1
l2.append(x)
width =1
for i in l2:
l3.append(i.split(" "))
converted = [[int(i) for i in s] for s in l3]
for i in range(0,width):
for j in range(0,length):
if j==length-1:
j = -1
if i==width-1:
i = -1
print((converted[i-1][j] converted[i][j-1]) (converted[i][j 1] converted[i 1][j]), end = " ")
print(end = "n")
Также я не могу использовать какие-либо классы, функции или библиотеки.
Кто-нибудь знает, как я могу это исправить?
P.S. Если кто-нибудь предложит короткий код, я буду очень благодарен.
Ответ №1:
Да, вам нужно обработать оба ребра. Вы не совсем это делаете. В частности, когда ширина равна 1, вы устанавливаете j = -1, а затем пытаетесь использовать j-1, который находится вне диапазона.
l2 = []
while True:
x = input()
if x == 'end':
break
l2.append( [int(k) for k in x.split()] )
width = len(l2)
length = len(l2[0])
converted = l2
for i in range(width):
for j in range(length):
im1 = (i-1)%width
ip1 = (i 1)%width
jm1 = (j-1)%length
jp1 = (j 1)%length
print((converted[im1][j] converted[i][jm1]) (converted[i][jp1] converted[ip1][j]), end = " ")
print()
Комментарии:
1. В качестве дополнительного комментария вы устанавливаете «width» на количество строк, а «length» — на длину каждой строки. Это как бы наоборот. Для них вы можете использовать «высоту» и «ширину».