Сделала возможность регистрации в системе через тележку с помощью самого бота @monitoring_smi_bot
Если есть желание - можете потыкать и попробовать создать свои темы для мониторинга. #Работа
Если есть желание - можете потыкать и попробовать создать свои темы для мониторинга. #Работа
Внезапно начала проходить курс МФТИ и Яндекса по машинному обучению на курсере. Мало что понятно, но очень интересно. Дико не хватает практической части в их лекциях. Мне уже насоветовали альтернатив попроще для начала, но я пока держусь. Прошла вторую неделю первой части курса. Если честно, первое задание сделала сама (на анализ текста), хотя с трудом разобрала что вообще от меня хотят. Второе задание пошла смотреть как делали другие. Скачала чужое решение, добавила в него графики, переделала все на функции. Выглядит прикольно.
Зачем? Ну круто же! #Учеба, #ML, #Курсы
Зачем? Ну круто же! #Учеба, #ML, #Курсы
Так, математику в курсе на курсере не объясняют. Никак. Просто дают набор понятий и формул. Программирование, если что - тоже. Я не знаю зачем этот первый вводный курс, если только не показать, что надо знать вот это и вот это.
Я когда-то изучала математику, но это было давно и я уже не помню. Короче, нашла на ютубе канал “Математика без хуйни”, автор - красавчик. Начала вспоминать как это все работает - производные, исследования функций и тд. https://www.youtube.com/c/SergejKuts/videos
Сейчас пытаюсь найти максимально удобный набор инструментов для конспектирования. В итоге xmind + скрины из лекций + скрины своих рукописных заметок с ipad + jupyter. Как-то, но отложится, наверное.
Кстати! Впервые нормально использовала рекурсию. Я поняла ее! На мой взгляд, самое главное, чтобы понять рекурсию, мне нужно было забыть, что это рекурсия) Просто уже в голове интуитивно работает, что вызывая функцию b в функции a, в момент исполнения код выполняется последовательно и выполнит код внутри функции b, вернет результат внутри a и продолжит исполнение. В случае рекурсии просто a и b - одинаковый код, одна и та же функция. А все остальные нюансы уже можно взять из определения рекурсии.
Область применения - в моем случае чистая математика):
```def get_vector(x, p):
if p <= 0:
return [1]
else:
result = get_vector(x, p-1)
result.append(x ** p)
return result
```В моем случае нужно было сформировать вектор из степеней x типа x + x**2 + … + x **(p) для дальнейшего построения матрицы (система линейных уравнений для многочленов с заданием разной степени). Это в задаче на аппроксимацию функции.
И да, я сама пока с трудом понимаю то, что пишу в плане математики. #Учеба, #ML, #Курсы
Я когда-то изучала математику, но это было давно и я уже не помню. Короче, нашла на ютубе канал “Математика без хуйни”, автор - красавчик. Начала вспоминать как это все работает - производные, исследования функций и тд. https://www.youtube.com/c/SergejKuts/videos
Сейчас пытаюсь найти максимально удобный набор инструментов для конспектирования. В итоге xmind + скрины из лекций + скрины своих рукописных заметок с ipad + jupyter. Как-то, но отложится, наверное.
Кстати! Впервые нормально использовала рекурсию. Я поняла ее! На мой взгляд, самое главное, чтобы понять рекурсию, мне нужно было забыть, что это рекурсия) Просто уже в голове интуитивно работает, что вызывая функцию b в функции a, в момент исполнения код выполняется последовательно и выполнит код внутри функции b, вернет результат внутри a и продолжит исполнение. В случае рекурсии просто a и b - одинаковый код, одна и та же функция. А все остальные нюансы уже можно взять из определения рекурсии.
Область применения - в моем случае чистая математика):
```def get_vector(x, p):
if p <= 0:
return [1]
else:
result = get_vector(x, p-1)
result.append(x ** p)
return result
```В моем случае нужно было сформировать вектор из степеней x типа x + x**2 + … + x **(p) для дальнейшего построения матрицы (система линейных уравнений для многочленов с заданием разной степени). Это в задаче на аппроксимацию функции.
И да, я сама пока с трудом понимаю то, что пишу в плане математики. #Учеба, #ML, #Курсы
😁1
В курсе задачка на теорию Байеса для расчета условной вероятности того, что женщина болеет раком, если маммография оказалась положительной. Всего такая вероятность по моим подсчетам 7,8% (не удалось точно проверить ответ из-за первых двух неудачных попыток, но точно, что результат либо верный, либо близкий). Пока пыталась разобраться с тем как правильно применять эту формулу наткнулась на статью https://tass.ru/sci/6815287. Там высчитывается такая вероятность для теста на беременность, она выше, кстати, 50%.
Голова несколько опухла от этой задачки.
Я на последней неделе первого курса. Очень хочется добить ее завтра. Но что-то мне подсказывает, что не осилю. Еще и киберпанк выходит... #Учеба, #ML, #Курсы
Голова несколько опухла от этой задачки.
Я на последней неделе первого курса. Очень хочется добить ее завтра. Но что-то мне подсказывает, что не осилю. Еще и киберпанк выходит... #Учеба, #ML, #Курсы
Из этой первой лекции по теории вероятностей я запомнил только полузнакомый термин «математическое ожидание». Незнакомец употреблял этот термин неоднократно, и каждый раз я представлял себе большое помещение, вроде зала ожидания, с кафельным полом, где сидят люди с портфелями и бюварами и, подбрасывая время от времени к потолку монетки и бутерброды, сосредоточенно чего-то ожидают. До сих пор я часто вижу это во сне. Но тут незнакомец оглушил меня звонким термином «предельная теорема Муавра — Лапласа» и сказал, что всё это к делу не относится.
Аркадий и Борис Стругацкие. Стажёры #Учеба, #ML, #КурсыИзучая ML, пришла к выводу, что проще сначала разобрать приложенный конспект, сформировать из него свой, а потом уже смотреть видео. Так зачастую понятнее, чем пытаться угнаться за логикой лектора, а потом догонять ее в конспекте.
Забавный момент. Посмотрела одну лекцию cs50 с сабами https://www.youtube.com/watch?v=eey91kzfOZs&t=13s&ab_channel=CS50
Я думала, что на английском мне будет сложнее, чем на русском. Но оказалось, что cs50 на английском понятнее, чем курс от МФТИ и Яндекса на русском.
Однако, продолжаю все же курс от МФТИ. Не уверена, что это лучший путь, но не хочу с него сворачивать.
Картинка просто забавная, нашла в комментах к статье на Хабре про базовые принципы ml на примере линейной регрессии. #Учеба, #ML
Забавный момент. Посмотрела одну лекцию cs50 с сабами https://www.youtube.com/watch?v=eey91kzfOZs&t=13s&ab_channel=CS50
Я думала, что на английском мне будет сложнее, чем на русском. Но оказалось, что cs50 на английском понятнее, чем курс от МФТИ и Яндекса на русском.
Однако, продолжаю все же курс от МФТИ. Не уверена, что это лучший путь, но не хочу с него сворачивать.
Картинка просто забавная, нашла в комментах к статье на Хабре про базовые принципы ml на примере линейной регрессии. #Учеба, #ML
Коллинеарные признаки... коли-николи, коррелировали, коррелировали, да не выковыряли, блин)
По поводу ml накрывает разными мыслями. С одной стороны не rocket science, с другой стороны от названий, формул, всевозможных знаков и сокращений едет крыша. Просто надо привыкнуть к этому клингонскому.
Зато хочется, очень хочется разобраться в этом, продвинуться вперед, потому что есть предвкушение, что вот-вот и все это станет понятным.
Болею. Вторая неделя второго курса идет натужно. Надеюсь, что когда приду в себя, верну начальную скорость. #Учеба, #ML
По поводу ml накрывает разными мыслями. С одной стороны не rocket science, с другой стороны от названий, формул, всевозможных знаков и сокращений едет крыша. Просто надо привыкнуть к этому клингонскому.
Зато хочется, очень хочется разобраться в этом, продвинуться вперед, потому что есть предвкушение, что вот-вот и все это станет понятным.
Болею. Вторая неделя второго курса идет натужно. Надеюсь, что когда приду в себя, верну начальную скорость. #Учеба, #ML
image_2021-01-12_23-15-00.png
150.3 KB
log loss. Хех, может кому пригодится. Весь свой конспект как обычно выложу по завершению всего курса. #Учеба
Испытала сегодня на себе отчаяние двоечника.
Читаю условия задачи и не понимаю, даже не догадываюсь как ее решать. А это не то, чтобы большая задача, так, промежуточный тест. Пересмотрела конспекты, погуглила альтернативные статьи и видео на тему в интернете, но это не дало мне понимания как решать эту задачу.
Короче, с помощью гугла, везения и интуиции я нашла верные ответы в тесте. Потом сидела раскапывала почему именно они такие. А все просто! Задача связана с одной из тем из первого курса и базовыми знаниями о том, как работать с натуральными логарифмами. Скажем, первое было для меня не на поверхности из-за нехватки опыта применения, второе я тупо уже не помню, а в курсе логарифмы вот только недавно чуть-чуть незначительно промелькнули.
Так вот, к чему это я. От такого отчаяния хочется иногда сложить лапки, чувствуешь себя абсолютно бестолковым.
Что мотивирует? За время изучения программирования я поняла пару важных вещей для учебы:
- если сейчас что-то непонятно, чуть позже с практикой все встанет на свои места. Как итог, я не гонюсь за тем, чтобы вот сразу все-все охватить.
- то, что кажется изначально нерешаемым, невозможным, в итоге можно решить, просто надо копать в нужную сторону. Бесил js и непонятно было как с ним работать - курс по js помог решить проблему. Проблемы с AWS казались безнадежными? - ничего, все было так или иначе через какое-то время решено.
Вдох-выдох, тест сдан, я все поняла, поехала дальше смотреть видео. #Учеба
Читаю условия задачи и не понимаю, даже не догадываюсь как ее решать. А это не то, чтобы большая задача, так, промежуточный тест. Пересмотрела конспекты, погуглила альтернативные статьи и видео на тему в интернете, но это не дало мне понимания как решать эту задачу.
Короче, с помощью гугла, везения и интуиции я нашла верные ответы в тесте. Потом сидела раскапывала почему именно они такие. А все просто! Задача связана с одной из тем из первого курса и базовыми знаниями о том, как работать с натуральными логарифмами. Скажем, первое было для меня не на поверхности из-за нехватки опыта применения, второе я тупо уже не помню, а в курсе логарифмы вот только недавно чуть-чуть незначительно промелькнули.
Так вот, к чему это я. От такого отчаяния хочется иногда сложить лапки, чувствуешь себя абсолютно бестолковым.
Что мотивирует? За время изучения программирования я поняла пару важных вещей для учебы:
- если сейчас что-то непонятно, чуть позже с практикой все встанет на свои места. Как итог, я не гонюсь за тем, чтобы вот сразу все-все охватить.
- то, что кажется изначально нерешаемым, невозможным, в итоге можно решить, просто надо копать в нужную сторону. Бесил js и непонятно было как с ним работать - курс по js помог решить проблему. Проблемы с AWS казались безнадежными? - ничего, все было так или иначе через какое-то время решено.
Вдох-выдох, тест сдан, я все поняла, поехала дальше смотреть видео. #Учеба
вариант с переменной estimator - то, что было в тетрадке к курсу (это из "лекций"). Там, где побольше комментариев - то, что я сама пыталась разобрать. Сюда бы еще можно было бы добавить ссылки на документацию и краткое описание того, что делает каждая из функций. Но нет. Спасибо за курс, спасибо за дорогу к знаниям.
К сожалению, это не разовый пример, большая часть курса такая.
Может, кто-то и скажет, что тут все очевидно, но на мой взгляд, уж лучше проще, особенно для студентов, чем такое адовое нагромождение с бесконечными скобочками и lambda-функциями. Как вы это написали без ошибок то?)
JS повеяло) #Учеба
К сожалению, это не разовый пример, большая часть курса такая.
Может, кто-то и скажет, что тут все очевидно, но на мой взгляд, уж лучше проще, особенно для студентов, чем такое адовое нагромождение с бесконечными скобочками и lambda-функциями. Как вы это написали без ошибок то?)
JS повеяло) #Учеба
Хочу поделиться, мало ли кому-то будет полезно.
У vs code есть возможность совместной работы над кодом https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack
Эту штуку я пробовала сама и мне понравилось (спасибо Паша).
У JB тоже есть такое https://plugins.jetbrains.com/plugin/14896-code-with-me
Но в Pycharm я пока не пробовала.
Это как в гугл-доках совместная работа с текстом и табличками, только с кодом. #Tools
У vs code есть возможность совместной работы над кодом https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack
Эту штуку я пробовала сама и мне понравилось (спасибо Паша).
У JB тоже есть такое https://plugins.jetbrains.com/plugin/14896-code-with-me
Но в Pycharm я пока не пробовала.
Это как в гугл-доках совместная работа с текстом и табличками, только с кодом. #Tools
Последнее время никак не могу собраться и войти в стабильный ритм. Немного поделаю того, немного сего, в итоге топчусь на месте.
Зато помогая с задачкой другу, обнаружила, что я могу ориентироваться и понимать чужой код. Круто!
Попутно все размышляю как мне решить свой вопрос с большим объемом данных в таблицах, на которых идет нагрузка.
У меня есть следующие вводные:
1. модель, имеющая большую связность,
2. частое чтение данных, добавленных за последние 10 минут (несколько десятков запросов раз в минуту),
3. частая запись данных,
4. редкое чтение данных за все время (несколько раз в месяц),
5. объем данных 2,3 млн строк в одной таблице и 3,9 млн строк в другой таблице.
Основная проблема кроется в пункте 2, потому что оно создает основную нагрузку. Хочется какое-нибудь решение, чтобы данные за последние 10 минут лежали где-то в отдельном месте, откуда и считывались для скриптов из пункта 2. При этом получается, что они должны туда постоянно приходить и уходить. Но я не могу использовать не PostgreSQL, так как мне требуется полнотекстовый поиск и функцию similarity для триграмм.
Есть еще вариант с партиционированием. И даже есть инструменты для этого:
https://django-postgres-extra.readthedocs.io/en/master/index.html
https://architect.readthedocs.io/features/partition/postgresql.html
Надо заняться и разобраться с этим. Лунная призма дай мне силу!
Может, кто из подписчиков что-то интересное подскажет?
И да, приятно удивлена интересу к моему скромному дневничку.
PS.
- "это не нагрузка для бд" - нагрузка, в основном, как я поняла, проблема в оперативной памяти. Данные довольно объемные. Выводы основаны на практическом использовании и сравнении работы бд при разных ресурсах (оперативная память, процессор) и при разных объемах соответствующих таблиц.
- "есть ли индексы" - да, индексы есть, для поиска использую индекс GIN (https://docs.djangoproject.com/en/3.1/ref/contrib/postgres/indexes/#ginindex)
- Не ищу критики, ищу совета на счет варианта решения задачи. Критику на счет бд уже получала, ничего интересного не было.
В результате хочу снизить ресурсы для бд по оперативке, так как слишком дорого за нее выходит платить. #Django
Зато помогая с задачкой другу, обнаружила, что я могу ориентироваться и понимать чужой код. Круто!
Попутно все размышляю как мне решить свой вопрос с большим объемом данных в таблицах, на которых идет нагрузка.
У меня есть следующие вводные:
1. модель, имеющая большую связность,
2. частое чтение данных, добавленных за последние 10 минут (несколько десятков запросов раз в минуту),
3. частая запись данных,
4. редкое чтение данных за все время (несколько раз в месяц),
5. объем данных 2,3 млн строк в одной таблице и 3,9 млн строк в другой таблице.
Основная проблема кроется в пункте 2, потому что оно создает основную нагрузку. Хочется какое-нибудь решение, чтобы данные за последние 10 минут лежали где-то в отдельном месте, откуда и считывались для скриптов из пункта 2. При этом получается, что они должны туда постоянно приходить и уходить. Но я не могу использовать не PostgreSQL, так как мне требуется полнотекстовый поиск и функцию similarity для триграмм.
Есть еще вариант с партиционированием. И даже есть инструменты для этого:
https://django-postgres-extra.readthedocs.io/en/master/index.html
https://architect.readthedocs.io/features/partition/postgresql.html
Надо заняться и разобраться с этим. Лунная призма дай мне силу!
Может, кто из подписчиков что-то интересное подскажет?
И да, приятно удивлена интересу к моему скромному дневничку.
PS.
- "это не нагрузка для бд" - нагрузка, в основном, как я поняла, проблема в оперативной памяти. Данные довольно объемные. Выводы основаны на практическом использовании и сравнении работы бд при разных ресурсах (оперативная память, процессор) и при разных объемах соответствующих таблиц.
- "есть ли индексы" - да, индексы есть, для поиска использую индекс GIN (https://docs.djangoproject.com/en/3.1/ref/contrib/postgres/indexes/#ginindex)
- Не ищу критики, ищу совета на счет варианта решения задачи. Критику на счет бд уже получала, ничего интересного не было.
В результате хочу снизить ресурсы для бд по оперативке, так как слишком дорого за нее выходит платить. #Django
~xОчень редкий зверь - значок тильды в python. Не так просто найти о нем информацию.
Еще иногда встречается использование & и |, когда я впервые увидела их использование, меня это поставило в тупик: а что это и как это понимать.
Самый лучший список всех-всех вариантов разных операторов я нашла тут https://pythonworld.ru/osnovy/peregruzka-operatorov.html
Если стандартные операторы довольно часто используются и легко найти как их "перегружать", то вот с битовым операциями сложнее. И как гуглить такое непонятно. Поэтому сохраняю в закладки).
В некоторых библиотеках перегружают такие операторы для удобства работы.
Например, в Pandas для объединения условий внутри выражения используется как раз операторы & и |:
df.loc[(df.cnt < 1000) & (df.workingday == 0), 'hum']
В исходниках можно найти как они реализованы:
# -------------------------------------------------------------
# Logical Methods
def _logical_method(self, other, op):
return NotImplemented
@unpack_zerodim_and_defer("__and__")
def __and__(self, other):
return self._logical_method(other, operator.and_)
@unpack_zerodim_and_defer("__rand__")
def __rand__(self, other):
return self._logical_method(other, roperator.rand_)
@unpack_zerodim_and_defer("__or__")
def __or__(self, other):
return self._logical_method(other, operator.or_)
@unpack_zerodim_and_defer("__ror__")
def __ror__(self, other):
return self._logical_method(other, roperator.ror_)
Глубже не осилила.
Просто решила поделиться. #Python
Хочется написать про поиск работы.
Я иногда посматриваю вакансии и прохожу тестовые. Нет, не так, я ткнулась в пару вакансий и сделала их тестовые.
Первое тестовое было - 4 задачки на базовый синтаксис и алгоритмы. По функционалу я сделала полностью, но вот забыла про магию множеств python - функцию set.intersection() https://pythonz.net/references/named/sets.intersection/. Теперь буду пользоваться.
После меня позвали на интервью с 10 техническими вопросами. Воспроизведу то, что помню:
1. Какие СУБД знаете. Чем SQLite отличается от остальных.
2. Join и его виды, чем отличаются.
3. Сложность алгоритмов, бинарный поиск, его сложность.
4. Индексы в бд, что такое, какая сложность получения экзмепляра по индексу.
5. POST и GET запросы, в чем отличие и применение.
6. Зачем нужен GIT и его команды.
7. Базовые команды линукса. Как можно посмотреть файл, с какими редакторами работала. (не ответила, не помню).
8. Миграции джанги, зачем нужны, как создавать, как применять, какие команды соответствуют.
9. Students.objects.filter(age__gte=18).exclude(sex="F").values_list('name', flat=True) - попросили объяснить что тут происходит.
Десятый не помню) В целом я на все ответила, кроме линукса, потому что не применяю ничего, кроме cd и ls, ну, и установки пакетов, выполнения команд.
Вторая вакансия - наоброт, сначала вопросики, потом тестовое. Вопросики были на софт-скиллы.
https://meta-test-mandrianova.herokuapp.com/ - вот, что собрала для демо в итоге на тестовое. Надо было сделать загрузку данных по докторам через стороннее api и страничку доктора на vue. Чтобы сделать демку пришлось подставлять костыли, так как не хотелось ради тестового задания подключать aws s3 для загрузки media. Я еще бы с этим просидела денек.
Впервые что-то собирала на vue, впервые, кстати, выкачивала и сохраняла файлы по урлу. Мне кажется, что то, как я в итоге сделала сохранение файла в джанге - ну такое.
Решила не писать тесты, не обкладывать логами, не залипать на неделю над задачкой. В общем, сделала минимум, если честно.
Хочу еще поделиться менеджерским хаком проверки неизвестного работодателя:
- Ищем юр. лицо потенциального работодателя (на сайте, в гугле, еще может помочь сервис https://www.nic.ru/whois/)
- Идем смотреть по юр.лицу сюда https://www.list-org.com/ или на подобные ресурсы. Там видим доходы-расходы за прошлый год, фактическую инфу о компании, какие есть судебные тяжбы у работадетеля.
- Еще можно проверить соцсети, поискать нет ли знакомых, кто там работает и спросить у них как и что.
Жду ответа)
PS. Не поняла почему все так прутся от Vue (не распробовала, видимо). Надо будет еще Ангуляр потыкать палочкой. #Работа
Я иногда посматриваю вакансии и прохожу тестовые. Нет, не так, я ткнулась в пару вакансий и сделала их тестовые.
Первое тестовое было - 4 задачки на базовый синтаксис и алгоритмы. По функционалу я сделала полностью, но вот забыла про магию множеств python - функцию set.intersection() https://pythonz.net/references/named/sets.intersection/. Теперь буду пользоваться.
После меня позвали на интервью с 10 техническими вопросами. Воспроизведу то, что помню:
1. Какие СУБД знаете. Чем SQLite отличается от остальных.
2. Join и его виды, чем отличаются.
3. Сложность алгоритмов, бинарный поиск, его сложность.
4. Индексы в бд, что такое, какая сложность получения экзмепляра по индексу.
5. POST и GET запросы, в чем отличие и применение.
6. Зачем нужен GIT и его команды.
7. Базовые команды линукса. Как можно посмотреть файл, с какими редакторами работала. (не ответила, не помню).
8. Миграции джанги, зачем нужны, как создавать, как применять, какие команды соответствуют.
9. Students.objects.filter(age__gte=18).exclude(sex="F").values_list('name', flat=True) - попросили объяснить что тут происходит.
Десятый не помню) В целом я на все ответила, кроме линукса, потому что не применяю ничего, кроме cd и ls, ну, и установки пакетов, выполнения команд.
Вторая вакансия - наоброт, сначала вопросики, потом тестовое. Вопросики были на софт-скиллы.
https://meta-test-mandrianova.herokuapp.com/ - вот, что собрала для демо в итоге на тестовое. Надо было сделать загрузку данных по докторам через стороннее api и страничку доктора на vue. Чтобы сделать демку пришлось подставлять костыли, так как не хотелось ради тестового задания подключать aws s3 для загрузки media. Я еще бы с этим просидела денек.
Впервые что-то собирала на vue, впервые, кстати, выкачивала и сохраняла файлы по урлу. Мне кажется, что то, как я в итоге сделала сохранение файла в джанге - ну такое.
Решила не писать тесты, не обкладывать логами, не залипать на неделю над задачкой. В общем, сделала минимум, если честно.
Хочу еще поделиться менеджерским хаком проверки неизвестного работодателя:
- Ищем юр. лицо потенциального работодателя (на сайте, в гугле, еще может помочь сервис https://www.nic.ru/whois/)
- Идем смотреть по юр.лицу сюда https://www.list-org.com/ или на подобные ресурсы. Там видим доходы-расходы за прошлый год, фактическую инфу о компании, какие есть судебные тяжбы у работадетеля.
- Еще можно проверить соцсети, поискать нет ли знакомых, кто там работает и спросить у них как и что.
Жду ответа)
PS. Не поняла почему все так прутся от Vue (не распробовала, видимо). Надо будет еще Ангуляр потыкать палочкой. #Работа
Дотянулись ручки до Ангуляра, пока чисто ради интереса прохожу туториал. Столько всего замечательного!
Магия тегов!
Типизация!
Удобное создание компонентов и вообще все для людей.
А это я только начала...
Королева в восхищении!
Не претендую на умные мысли и споры на тему выбора технологий, просто захотелось поделиться, мне понравилось.) #JS
<li *ngFor="let hero of heroes"
[class.selected]="hero === selectedHero"
(click)="onSelect(hero)" >
<span class="badge">{{hero.id}}</span> {{hero.name}}
</li>
</ul>
Магия тегов!
id: number;
name: string;
}
Типизация!
ng generate service hero
Удобное создание компонентов и вообще все для людей.
А это я только начала...
Королева в восхищении!
Не претендую на умные мысли и споры на тему выбора технологий, просто захотелось поделиться, мне понравилось.) #JS
Пришел ко мне мой друг Никита и принес вот такое задание от своего знакомого:
И вроде слова все знакомые, но с ходу я даже не поняла, а что вообще требуется.
Мы начали обсуждать и Никита поделился своим вариантом решения, в котором он по сути реализовал дерево с помощью вложенных списков (на базе класса, конечно).
Тут уже у меня возник вопрос, а при чем тут ООП, кроме того, что структура задается с помощью класса. Где тут инкапсуляция, наследование, полиморфизм.
И зацепила меня мысль о том, а как вообще корректно сделать индексы в классе. И как индексы совместить со структурой дерева. Вроде вложенные списки это логично, но это же уже есть в Python, что-то не так.
В общем, пока размышляла, вспомнила, что есть замечательный магический метод getitem, который как раз обеспечивает доступ по индексу или ключу. В итоге, добавив к решению Никиты магические методы, как мне кажется, мы решили задачу.
Заодно поигрались с созданием новых нод в дереве через указание конкретных индексов и просто добавлением в конец списка. Заодно добавили инкапсуляцию)
Вроде задачка простая, все слова знакомые, но лично я раньше не прописывала методы getitem и setitem, поэтому решение пришло не сразу.
А закончили мы еще интересным обсуждением эффекта:
Так как экземпляры внутри списка того же класса, то обращения вида tree[0][0][2] двигаются по ступенькам, очень похоже на рекурсию, только это не вызов самого себя, а просто проход по разным экземплярам одного класса, где используются одни и те же методы для получения следующего. Как глубока кроличья нора!)
Интересная структура и интересная задачка, да. #Python
на собеседовании попросили от руки написать на листочке класс который бы реализовывал хранение данных с доступом по индексу в виде дерева
И чтобы можно было получить доступ по индексу в этом дереве
И вроде слова все знакомые, но с ходу я даже не поняла, а что вообще требуется.
Мы начали обсуждать и Никита поделился своим вариантом решения, в котором он по сути реализовал дерево с помощью вложенных списков (на базе класса, конечно).
Тут уже у меня возник вопрос, а при чем тут ООП, кроме того, что структура задается с помощью класса. Где тут инкапсуляция, наследование, полиморфизм.
И зацепила меня мысль о том, а как вообще корректно сделать индексы в классе. И как индексы совместить со структурой дерева. Вроде вложенные списки это логично, но это же уже есть в Python, что-то не так.
В общем, пока размышляла, вспомнила, что есть замечательный магический метод getitem, который как раз обеспечивает доступ по индексу или ключу. В итоге, добавив к решению Никиты магические методы, как мне кажется, мы решили задачу.
Заодно поигрались с созданием новых нод в дереве через указание конкретных индексов и просто добавлением в конец списка. Заодно добавили инкапсуляцию)
class Node:
def __init__(self, data=None):
self.nodes: List[Node] = []
self.data = data
def add(self, data):
self.nodes.append(Node(data))
def _create_empty_elements(self, key):
for n in range(len(self.nodes), key + 1):
self.nodes.append(Node())
def __setitem__(self, key, value):
if key > -1 and len(self.nodes) < key + 1:
self._create_empty_elements(key)
self.nodes[key].data = value
def __getitem__(self, item):
if item > -1 and len(self.nodes) < item + 1:
self._create_empty_elements(item)
return self.nodes[item]
Вроде задачка простая, все слова знакомые, но лично я раньше не прописывала методы getitem и setitem, поэтому решение пришло не сразу.
А закончили мы еще интересным обсуждением эффекта:
tree[0][0][2] = 'data'
tree[0][0][2].data # вернет 'data'
Так как экземпляры внутри списка того же класса, то обращения вида tree[0][0][2] двигаются по ступенькам, очень похоже на рекурсию, только это не вызов самого себя, а просто проход по разным экземплярам одного класса, где используются одни и те же методы для получения следующего. Как глубока кроличья нора!)
Интересная структура и интересная задачка, да. #Python