Вопрос №53605 от пользователя Филипп в испытании «Зеркалирование матрицы»

Филипп

https://ru.hexlet.io/code_reviews/386415 Код на остальных примерах работает, но самый первый тест с

def test_mirror_matrix_return_value():
    assert mirror_matrix([[42]]) is None, (
        "Function shouldn't return anything!"
    )

А то уже до смешного доходит -- алгоритм реализован, задача решена, но этот, по-моему личному мнению, глупый тест не проходит. Логично было бы возвращать этот элемент, т.к. никакого криминала в матрице из одного элемента нет. Это же нет число, а матрица размерности 1х1

P.S. Хочу поделиться находкой как налету без правки индексов на обратный у среза его реверсить на раз-два

l = [1, 2, 3, 4, 5, 6]
l[2:5] = [3, 4, 5]
l[5:2:-1] = [6, 5, 4]
l[4:1:-1] = [5, 4, 3]
l[2:5][::-1] = [5, 4, 3]

А можно просто, т.е. ревесить полученный прямым образом список после среза

9 0

Сергей Новожилов

Филипп, А как по мне тест очень даже логичный, т.к. нельзя отзеркалить матрицу шириной 1 ведь у нее нет середины. И вам в решение как раз это и можно добавить, условие на проверку есть середина у матрицы или нет.

0

Филипп

У пустых списков тоже нет середины, а они из коробки работают по этому алгоритму, т.е. портить симметрию вписывая что-то? Отзеркалить матрицу единичного размера можно, она просто будет совпадать сама с собой, так же и вариации пустых списков.

len([]) //2 == 0
len([[]]) //2 == 0
len([[()]]) // 2 == 0

Следовательно, None нужно отвечать на все списки, у которых нет середины. Если уж соблюдать хоть какую-то последовательность.

0

Филипп

Грубо говоря из соображений симметрии пустой список неразличим с списком [[42]], т.к. длина равна 1 и середины тоже нет. Другое дело написать вместо [[42]] 42

0

Сергей Новожилов

Да Филипп, прошу прощения я как то не сразу вьехал в задачку. Тут ваши рассуждения верны, и по результату для такой матрицы [[42]] , после применения функции вид матрицы не поменяется. Тут ваша ошибка в том что функция не должна ничего возвращать. (у неё не должно быть return).

0

Филипп

Дык, даже, если убрать return все равно не будет проходить, алгоритм от этого не станет возвращать None для [[42]]. Так что мимо. Тесты нужно лучше мотивировать вот и все. Как минимум выбрать между [[42]] как и все остальное или возвращать None на все списки длины 1 без разбора вариации пустого или матрица 1x1. Return был дописан только для удобства, функция то правит 'in place' матрицу/строку, а не создает новую. Вышел из ситуации таким образом, испортив подробное симметричное решение ворохом if.

def mirror_matrix(mat):
    if not mat or not mat[0] or type(mat[0][0]) == tuple:
        for line in mat:
            mirror_row(line)
        return mat
    elif len(mat[0]) == 1 and type(mat[0][0]) == int:
        return None
    else:
        for line in mat:
            mirror_row(line)
        return mat

Испытание интересное, но тест все испортил(

0

Сергей Новожилов

Филипп, Вы не поняли, алгоритм для любого условия должен возвращать None. Так задумано по условию, что функция меняет саму матрицу а не генерит новую и возвращает что-то. Вам в вашем первом решение нужно было просто удалить строку return mat

0

Филипп

Это что же получается, что она все таки [[42]] обрабатывает и просто ничего не делает? Т.к. с ней ничего не происходит? Что же тогда значит это?

def test_mirror_matrix_return_value():
    assert mirror_matrix([[42]]) is None, (
        "Function shouldn't return anything!"
    )
0

Сергей Новожилов

Филипп, то что написано текстом. Функция не должна ничего возращать. И тест это условие и проверяет. В этом тесте аргумент может быть любым.

0

Филипп

Воу, буду теперь знать. А то реально показалось, что на матрицы вида [[42]] она возвращает None( Спасибо за ваше терпение и выдержку)

2

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия

Фронтенд-разработчик

Разработка фронтенд-компонентов веб-приложений
23 июня 8 месяцев
Иконка программы Python-разработчик
Профессия

Python-разработчик

Разработка веб-приложений на Django
23 июня 8 месяцев
Иконка программы PHP-разработчик
Профессия

PHP-разработчик

Разработка веб-приложений на Laravel
23 июня 8 месяцев
Иконка программы Node.js-разработчик
Профессия

Node.js-разработчик

Разработка бэкенд-компонентов веб-приложений
в любое время 8 месяцев
Иконка программы Верстальщик
Профессия

Верстальщик

Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия

Java-разработчик

Разработка приложений на языке Java
23 июня 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
NEW

Разработчик на Ruby on Rails

Создает веб-приложения со скоростью света
22 июня 5 месяцев

Похожие вопросы

Evgeny Malafeev 04 мая 2021 →

Почему в испытаниях по python есть ссылка на вкладку web-доступ? Она ведь не используется.

Николай Уланов 14 февраля 2021 →

Добрый день, подскажите, не понимаю где тут у меня допущена ошибка. Вроде все работает как должно, даже есл...

Евгений Зарудний 14 мая 2020 →

jff решение которое можно посмотреть после выполнения задания, зеркалит матрицу относительно горизонтальной...

lidik 13 апреля 2020 →

Раз за разом слишком мудрю в заданиях. Получается, но длинным кодом и криво, косо... Немного расстраивает к...

Evgeny Zorin 27 марта 2020 →

Приветствую. Отправил на ревью два варианта решения. Оба варианта работают одинаково замечательно в сторонн...