Напишите программу на языке Python, которая принимает входные данные в виде прямоугольных матриц в виде

Напишите программу на языке Python, которая принимает входные данные в виде прямоугольных матриц в виде последовательности строк. После последней строки каждой матрицы следует строка, содержащая только слово "end". Программа должна вывести результат произведения указанных матриц или слово "Error", если произведение не существует.

Пример ввода 1:
3 2
1 4
end
2 2
end

Пример вывода 1:
10 10

Пример ввода 2:
1 2 3
end
3 3
end

Пример вывода 2:
Error
Alekseevich_6655

Alekseevich_6655

Хорошо, чтобы решить данную задачу, нужно разбить её на несколько шагов. Давайте приступим к их пошаговому решению:

Шаг 1: Получение входных данных
Сначала мы должны получить входные данные от пользователя в виде последовательности строк, представляющих прямоугольные матрицы. Мы можем считывать ввод с помощью функции `input()`, пока не встретим строку, содержащую только слово "end". Затем мы можем разбить введенные строки на строки матрицы и сохранить их в список.

python
matrices = []
matrix = []

while True:
line = input()
if line == "end":
matrices.append(matrix)
break
elif line:
matrix.append(list(map(int, line.split())))
else:
matrices.append(matrix)
matrix = []

# Выводим полученные матрицы для проверки
for matrix in matrices:
print(matrix)


Шаг 2: Проверка валидности матриц
Мы получили список матриц входных данных. Теперь необходимо проверить, является ли каждая матрица валидной, чтобы убедиться, что они могут быть перемножены. Для этого мы должны убедиться, что количество столбцов первой матрицы равно количеству строк второй матрицы.

python
valid_matrices = []
for matrix in matrices:
rows = len(matrix)
cols = len(matrix[0])
valid = True
for i in range(1, len(matrix)):
if len(matrix[i]) != cols:
valid = False
break
if valid:
valid_matrices.append(matrix)

# Выводим валидные матрицы для проверки
for matrix in valid_matrices:
print(matrix)


Шаг 3: Умножение матриц
Теперь, когда у нас есть только валидные матрицы, мы можем перейти к их умножению. Для этого мы можем использовать встроенную функцию `zip()` для итерации по столбцам второй матрицы и строкам первой матрицы. Затем мы можем перемножить соответствующие элементы и сохранить результаты в новую матрицу.

python
product = None
for matrix in valid_matrices:
if product is None:
product = matrix
else:
rowsA = len(product)
colsA = len(product[0])
rowsB = len(matrix)
colsB = len(matrix[0])
if colsA != rowsB:
product = None
break
else:
# Создаем новую матрицу для хранения результата умножения
result = []

# Вычисляем произведение
for i in range(rowsA):
row = []
for j in range(colsB):
total = 0
for k in range(colsA):
total += product[i][k] * matrix[k][j]
row.append(total)
result.append(row)

product = result

# Выводим результат произведения матриц или сообщение об ошибке
if product is None:
print("Error")
else:
for row in product:
print(*row)


Итак, вот полный код программы для решения данной задачи:

python
matrices = []
matrix = []

while True:
line = input()
if line == "end":
matrices.append(matrix)
break
elif line:
matrix.append(list(map(int, line.split())))
else:
matrices.append(matrix)
matrix = []

valid_matrices = []
for matrix in matrices:
rows = len(matrix)
cols = len(matrix[0])
valid = True
for i in range(1, len(matrix)):
if len(matrix[i]) != cols:
valid = False
break
if valid:
valid_matrices.append(matrix)

product = None
for matrix in valid_matrices:
if product is None:
product = matrix
else:
rowsA = len(product)
colsA = len(product[0])
rowsB = len(matrix)
colsB = len(matrix[0])
if colsA != rowsB:
product = None
break
else:
result = []
for i in range(rowsA):
row = []
for j in range(colsB):
total = 0
for k in range(colsA):
total += product[i][k] * matrix[k][j]
row.append(total)
result.append(row)

product = result

if product is None:
print("Error")
else:
for row in product:
print(*row)


Теперь у вас есть полная программа на языке Python, которая принимает входные данные в виде прямоугольных матриц и вычисляет их произведение или выводит сообщение об ошибке, если произведение не существует.
Знаешь ответ?
Задать вопрос
Привет!
hello