Испытание «Копилка». Мои впечатления
18 января 2023 г.

Предисловие:
На момент первого подхода к испытанию "Копилка" я находился в конце второго месяца обучения по профессии "Python-разработчик", и мой опыт использования языка Python лишь немного выходил за пределы этих двух месяцев. На момент успешного завершения испытания "Копилка" я находился в конце четвертого месяца обучения по профессии "Python-разработчик", и на мой взгляд мой опыт и навыки значительно подросли.
Описание испытания:
Испытание "Копилка" относится к курсу "Python: Списки" (https://ru.hexlet.io/courses/python-lists?utm_source=hexlet&utm_medium=blog&utm_campaign=all-courses&utm_content=ispytanie-kopilka-moi-vpechatleniya&utm_term=post_180123). На сегодняшний день (25.10.2022г.) испытание проходило 310 студентов, из которых 64% самостоятельно с ним справилось. Суть испытания в том, чтобы написать функцию, которая выводит результат обработки списка чисел в виде гистограммы с числовыми подписями. В задании приведено графическое представление результата с минимальным его описанием в виде текста, а также подсказка о том, через какой функционал языка Python можно составить код.
Как я шел к результату:
Забегая вперёд, скажу сразу, что мой код не то чтобы не оптимален, он действительно "кривой", "косой" и "убогий", но код работает и выдаёт ожидаемый и приемлемый результат. Теперь, собственно, как я шел к результату:
-
В испытании рекомендуется использовать "встроенный инструмент — Counter". По началу было вообще не понятно, как его там использовать, так как ранее я не сталкивался с примерами его использования. В первом варианте кода (именно первый вариант кода и стал результирующим, но лишь потому, что его оказалось проще довести до ума) я решил обойтись без него. Сформировал как-то работающий код и отправил на проверку в систему. И не прошло… стал разбираться.
-
Результат тестов свёлся к тому, что выводимая мною строка не соответствовала (не была равна) ожидаемой строке. Без подробностей. Просто моя строка не такая же, как ожидаемая. На этот момент я ещё не очень разбирался в том, на что ругается система проверки кода. Из того, что я сразу понял, это то, что в результатах теста отсутствуют символы "# =>", которые я вставил в графический вывод результата.
-
Убрал лишние элементы графики, поставил в мой код тот же пример (тот же список), что и в тестах. Запустил. Внешне результат меня устраивал. Но тесты опять не прошел. Что-то в выводимой строке опять не было таким же, как в тестах. Решил отложить испытание до лучших времён.
-
В каком-то из уроков или в каком-то испытании познакомился с инструментом " Counter" (где-то уже в курсе про словари), вспомнил про "Копилку". Снова перечитал задание и написал весьма красивый и лаконичный код, который выдавал графически приемлемый результат. Но код опять не прошел проверку. Снова отложил до лучших времён.
-
Прошло еще некоторое время и перфекционист внутри меня не позволил мне просто оставить испытание "Копилка" не завершенным. Опять просмотрел обе версии кода и результаты проверки. Немного "поковырял" код и попытался "скормить" системе. Не получилось. Оба кода выводили практически одинаковый результат. Но дьявол кроется в деталях. При выполнении операции сравнения результатов двух моих программ я получил False. Это обстоятельство навело меня на мысль, что результат от проверяющей системы может быть не похожим ни на один из двух моих. Пошел копаться в тестах, благо это уже оказалось для меня не так сложно, как на втором месяце обучения. Вытащил из тестов строку, которой должен соответствовать вывод из программы. Сел разбираться.
-
Написал коротенький код, который построчно (по группам из 17 символов, последним из которых должен быть перенос строки) сравнивает вывод каждой из программ и строку из тестов. Вот тут-то и полезла конкретика. Оказалось, что в моих строках было больше пробелов в последних символах строк. Проще говоря, тестовая строка делилась на подстроки из 17 символов (кроме последней), последним символом был перенос строки, в мои строки могли содержать и 18 символов в подстроках, что зависело от того, что было в предпоследней не пробельной группе символов подстроки. Мелочь, но важная.
-
Проще всего оказалось поправить код самой первой программы, написанной почти два месяца назад. Просто "прикрутил костыли" для полного символьного соответствия ожидаемому результату.
Что я для себя понял после испытания:
- Исходные данные испытания не всегда будут подробными и исчерпывающими для написания кода.
- Внешне корректно работающий код не всегда по-настоящему корректен и соответствует ожиданиям.
- Если перед началом написания кода аккуратно описать выводимый этим кодом результат и граничные условия, будет гораздо проще оценивать результат на корректность.
- Даже ручное тестирование помогает довести работу кода до желаемого результата.
- То, что не решилось с первого раза, можно/нужно отложить на некоторое время и вернуться к решению с новыми знаниями и навыками.
- Не красивый, но правильно работающий код лучше, чем красивый и не работающий. Работающий код можно сделать красивым, красивый работающим не всегда.
- Добивается результата тот, кто не сдаётся и осмысленно повторяет попытки.
Мой код:
Антон Тюрин
4 года назад
2





