Нужно создать декоратор для проверки размера матриц (списка из списков)
Не получается реализовать декоратор check_size проверки формы матриц (списков из списков из float). Необходимо, чтобы функция инициализации объекта матрицы (create_matrix) с декоратором возвращала False, если число элементов всех внутренних списков разное и True в противном случае.
def check_size(a):
# редактировать тут, ниже мои попытки
prov=True
for i in a:
if len(a[i])!=len(a[i+1]):
prov = False
break
return prov
@check_size
def create_matrix(a):
# здесь тоже надо что-то изменить
matrix = a
print(create_matrix(a))
Ответы (1 шт):
Автор решения: Xander
→ Ссылка
Ну, если вы уверены, что формулировка задания именно такая, то вот код, который делает именно то, что требуется:
def check_size(func):
def wrapper(a):
# Вычисляем множество длинн всех строк матрицы
# Если все строки одной длинны, то в множестве будет только один элемент
sizes = {len(row) for row in a}
func(a)
# Проверяем, что в множестве действительно только один элемент
return len(sizes) == 1
return wrapper
@check_size
def create_matrix(a):
# Здесь должно быть собственно создание/ инициализация матрицы
# Но из задания вообще не понятно, что под этим подразумевается
# Впрочем, для демонстрации работы декоратора это и не важно
# Поэтому оставляю так
matrix = a
# Проверяем
# Правильная матрица
good_matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(create_matrix(good_matrix)) # Напечатает True
# Неправильная матрица
bad_matrix = [[1, 2, 3], [4, 5, 6], [7, 8]]
print(create_matrix(bad_matrix)) # Напечатает False