Что вернуть при наличии или отсутствии оси симметрии?
Что проверяют
Умеете ли вы проектировать контракт функции, а не только алгоритм. Вопрос про возвращаемое значение: что отдавать, когда ответа нет, и как это переживёт жизнь внутри пайплайна, где результат пойдёт в фичу или в проверку данных.
Как отвечать
Сначала уточните постановку: ось симметрии ищем у набора точек, у массива значений или у распределения. Для набора точек кандидат ровно один, это x = (min + max) / 2, и дальше достаточно одного прохода с множеством: у каждой точки должна найтись зеркальная пара. Получается O(n) по времени и по памяти.
Теперь про сам ответ на вопрос:
- возвращать лучше саму ось, а не голый флаг, потому что координата несёт больше информации и её всё равно спросят следующим шагом;
- отсутствие оси кодируется
None, то есть тип результата этоOptional[float], и он один и тот же в обоих случаях; - магические значения вроде
-1илиNaNне годятся: отрицательная координата и ноль это законные ответы, аNaNломает любое сравнение; - исключение бросается только на невалидный вход (пустой набор, нечисловые значения), но не на «симметрии нет»: это нормальный результат, а не ошибка;
- сравнение вещественных чисел идёт с допуском, и допуск лучше принимать параметром, а не зашивать в код;
- для задач анализа данных полезнее вернуть не только факт, но и меру асимметрии, потому что модели нужен непрерывный признак, а не бинарный.
Отдельно проговорите крайние случаи: пустой вход и один элемент. Что бы вы ни выбрали, это должно быть описано в сигнатуре и в тестах.
Где спотыкаются
Возвращают -1 как признак отсутствия, а потом ось действительно оказывается в нуле или левее, и вызывающий код молча получает неверный ответ.
Сравнивают координаты на точное равенство. На вещественных данных проверка почти всегда провалится, и функция будет отвечать «симметрии нет» на симметричных данных.
Отдают разные типы в разных ветках: то число, то строку, то кортеж. Вызывающая сторона обрастает проверками типа, а в пайплайне такой признак ломает преобразование данных.