О планах на 2024 год.

В 2023 году у нас было не так много постов и активностей. И у меня есть две новости: хорошая и плохая. Хорошая: постов будет больше; плохая: но не сразу. В 2024 году я планирую сделать группу более community-centered: у нас, вероятно, появится бот предложки, а может и еще пара ботов. То же самое касается и совместных активностей: если они и будут, то, вероятно, будут на чьих-то активных волонтерских началах. Ну, а пока это прекрасное время не наступило, у нас будет немножко постов по обработке данных и про хорошие книжки.
14👍5🍓1
Как начать учить python.

Начался новый год, и это неплохой повод начать программировать. Из нашего опыта, один из более простых онлайн-курсов по программированию: https://stepik.org/58852. Курс очень хорош для начинающих и проходится за 1-3 месяца.
Если же у вас уже есть опыт с другими языками программирования, то я могу посоветовать курсы от института биоинформатики:
https://stepik.org/course/67
https://stepik.org/course/512
В них нет разжевывания, но они позволяют быстро познакомиться с новым языком.

Вопросы, возникающие во время прохождения, можно задавать в нашем тг-чате: https://t.me/learnpythonforfun_chat
👍8🔥3👎1
Продолжаем про паттерны проектирования. На очереди Адаптер. Этот паттерн позволяет создать класс-оболочку с требуемым интерфейсом (соответственно, для некого класса с неподходящим интерфейсом).
https://refactoring.guru/ru/design-patterns/adapter

#python #patterns #паттерны #ООП
Следующий структурный паттерн - Мост. Предположим у вас есть класс, который содержит некоторую абстракцию и реализацию. Проблема возникает тогда, когда обе эти составляющие необходимо часто менять. Тут-то и приходит на помощь паттерн Мост. Он позволяет разделить абстракцию и реализацию. Описание паттерна:
https://refactoring.guru/ru/design-patterns/bridge

#python #patterns #паттерны #ООП
🔥1
А не начать ли нам книжный клуб? :D

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

И начнем мы с книги для начинающих:
Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих
План таков:
1. Заполучить книгу (купить, скачать из файлов ВК и т.д.)
2. Каждую неделю читать одну главу.

Итак, начинаем сегодня с главы "1. Знакомство с алгоритмами". Читаем её до следующих выходных. В конце следующей недели я сделаю небольшую выжимку по главе и подготовлю опрос.
Вопросы можно задавать в нашем чате в телеграмме: https://t.me/learnpythonforfun_chat.

#книжный_клуб #алгоритмы
👍14🙏1
Еще немного про книгу "Грокаем алгоритмы". Эта книга для начинающих и подойдет для ознакомления с темой алгоритмов. Один из плюсов - алгоритмы уже реализованы для нескольких языков и их можно посмотреть на гитхаб:
https://github.com/egonSchiele/grokking_algorithms

Начинаем читать с главы "1. Знакомство с алгоритмами". Читаем её до следующих выходных. Вопросы можно задавать в нашем чате в телеграмме: https://t.me/learnpythonforfun_chat.

#книжный_клуб #алгоритмы
👍21
Forwarded from Soul Catcher
Решил сделать небольшую задачу по книге "грокаем алгоритмы" на бинарный поиск главы 1

Решение предполагает программную реализацию и использование модуля urllib/requests/httpx/aiohttp.

Задача и её описание находятся тут:
http://176.119.156.68:8000/swagger/index.html

Это OpenAPI документация, она используется для документирования HTTP API. Сам эндпоинт, с которым надо работать из кода расположен тут:
http://176.119.156.68:8000/learnPerDay?minutesPerDay=12.5

Вижу тут два победителя:
Первый победитель должен написать в чат минимальное количество дней.
Второй победитель должен написать параметр, при котором достигается этот показатель.

Если вам зайдёт такой интерактив, то будут ещё задачи. Уже есть идеи для них)
👍42
Для тех, кто изучает data science.
Дан неупорядоченный массив из 32 элементов. Загадан случайный элемент массива. На каждом шаге бинарного поиска выдается ответ: больше или меньше загаданное число текущего варианта из поиска. За какое количество шагов бинарный поиск гарантированно завершит свою работу и выдаст нужный элемент?

#книжный_клуб #алгоритмы
За какое количество шагов бинарный поиск гарантированно найдет нужный элемент?
Anonymous Quiz
7%
4
30%
5
7%
6
16%
16
8%
32
10%
Не сработает
22%
Посмотреть ответы
👍2
Итак, продолжаем читать книгу
Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих.

В предыдущей главе мы узнали, что такое бинарный поиск. Бинарный поиск позволяет найти нужный элемент, отсекая на каждом шаге половину элементов. Чтобы достичь этого, бинарный поиск полагается на свойство упорядоченности элементов в коллекции. Иными словами, если мы берем случайный элемент в массиве и знаем, что наш элемент больше выбранного, то нам не зачем хранить элементы меньше (левее) выбранного. Мы отсекаем ненужные элементы и повторяем операцию на оставшихся элементах, пока не останется один элемент. Этот элемент либо будет искомым, либо будет отличным от искомого. Последнее будет означать, что искомый элемент не содержится в коллекции.

В следующей главе мы познакомимся ближе с понятиями списка, массива и сортировки. Все эти понятия крайне важны для программиста и постоянно используются. В следующую неделю мы читаем главу "2 Сортировка выбором". Опять же, читаем до следующей субботы, если есть вопросы, задаем их в чате тг (https://t.me/learnpythonforfun_chat). В конце следующей недели я сделаю небольшую выжимку по главе и подготовлю опрос.

Книжка несложная, успехов в прочтении :)

#книжный_клуб #алгоритмы
🔥6
Какова сложность чтения произвольного элемента массива (если мы знаем его позицию)?
Anonymous Quiz
64%
O(1)
7%
O(log n)
20%
O(n)
9%
Посмотреть ответы
Какова сложность удаления элемента из списка (если мы знаем его позицию)?
Anonymous Quiz
50%
O(1)
9%
O(log n)
34%
O(n)
7%
Посмотреть ответы
Учим Питон
Какова сложность удаления элемента из списка (если мы знаем его позицию)?
Пояснение: мы имеем указатель на элемент двусвязного списка. Нам не нужно искать этот элемент внутри списка.
Итак, продолжаем читать книгу
Бхаргава А. - Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих.

В предыдущей главе мы познакомились с такими структурами данных, как массив и связный список. Массив может быть охарактеризован, как непрерывная последовательность элементов одного типа в памяти. Он поддерживает быстрый доступ O(1) к элементам по индексу, но удаление и вставка занимают больше времени - O(n). Список же состоит из узлов, где каждый узел связан с последующим или предыдущим (в случае односвязного списка) или с последующим и предыдущим (в случае двусвязного списка). Операция вставки и удаления в связном списке довольно просты, если у нас есть ссылка на удаляемый элемент O(1), но чтения элемента по индекс занимает больше времени - O(n). Кроме того, в этой главе мы познакомились с сортировкой вставками, которая выполняется за квадратичное время.

В следующей главе "3. Рекурсия" мы познакомимся поближе с понятиями рекурсии и стека. Концепция рекурсивного вызова является одним из подходов к построению итеративных алгоритмов. Стек же является базовой концепцией выполнения программ в современных вычислительных системах. Оба понятия важны для понимания программистом.

Читаем до следующей субботы, если есть вопросы, задаем их в чате тг (https://t.me/learnpythonforfun_chat). В конце следующей недели я сделаю небольшую выжимку по главе и подготовлю опрос.

Книжка несложная, успехов в прочтении :)

#книжный_клуб #алгоритмы
2