Наткнулся я тут на репозиторий algorithms с реализациями на python кучи алгоритмов. И, если честно, лучше бы не натыкался: хоть звёздочек много, но внутри просто ужасный код. Никогда так не пишите.
Некоторые проблемы этого кода:
- In place замены. Такое надо делать редко. Обычно - не надо.
- Функция должна возвращать реузльтат, а не print’ить его.
- Функция, которая ничего не возвращает, не тестируемая.
- Однобуквенные переменные.
- Какое-то адище в форматировании, как протест flake8.
- Выполнение каких-то действий (типа тесты) в корне модуля, а не как надо в нормальном коде.
- Отсутствие тестов, perfomance и прочего.
- Слабое использование collections и itertools.
Вообще, вот вам от меня базовый чеклист для проверки тестового задания (можете свой проект проверить):
- git
- тесты (если есть travis или tox - ещё плюс)
- perfomance
- комментарии
- docstrings
- документация (в самом простом случае README, но readthedocs - плюс сверху)
- requirements (setup и прочее - тоже плюс сверху)
- Pythonic-код. Тут субъективно, но если видите for i in range(len(x)), то можете сразу ставить минус.
- Ещё можно добавить за всякие штуки типа Dockerfile, если что-то такое есть в проекте.
Если кандидат не делает слишком много чего из перечисленного, он ещё не умеет писать хороший код. А если умеет, но не счёл нужным делать это для тестового задания — значит, не хочет писать хороший код, что ничуть не лучше.