Нужно создать декоратор для проверки размера матриц (списка из списков)

Не получается реализовать декоратор 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
→ Ссылка