Поколение Python 🐍 @pygen_ru Channel on Telegram

Поколение Python 🐍

@pygen_ru


"Поколение Python" — серия курсов по языку Python, разработанная Тимуром и его командой (BEEGEEK 🐝).

Сайт: pygen.ru
Мерч: shop.pygen.ru
Чат: @pygen_ru_comments
Бот: @pygen_ru_bot
Поддержка: @pygen_ru_support
YouTube: youtube.com/@pygen_ru

Поколение Python 🐍 (Russian)

Поколение Python — это уникальная серия курсов, созданная специально для тех, кто хочет погрузиться в мир программирования на языке Python. Разработанная Тимуром и его командой (BEEGEEK 🐝), эта серия предлагает все необходимые знания и инструменты для освоения этого популярного языка программирования.

На сайте pygen.ru вы найдете множество полезных материалов, видеоуроков и заданий для самостоятельной работы. Помимо этого, в магазине shop.pygen.ru вы сможете купить эксклюзивный мерчандайз Python Generation и поддержать проект.

Если у вас возникнут вопросы или вы захотите поделиться своими впечатлениями, присоединяйтесь к чату @pygen_ru_comments. Там вы сможете обсудить все, что касается Python и получить ответы на свои вопросы.

Не забудьте также ознакомиться с ботом @pygen_ru_bot, который поможет вам с доступом к курсам и дополнительными материалами.

Для поддержки и обратной связи с командой Поколение Python обращайтесь к @pygen_ru_support. Они всегда рады помочь вам и ответить на все ваши вопросы.

Присоединяйтесь к сообществу Поколение Python и начните свой путь в мире программирования уже сегодня! YouTube: youtube.com/@pygen_ru

Поколение Python 🐍

15 Feb, 09:35


Друзья, а вот и разбор задачи про три числа Фибоначчи.

✔️ Из неравенства A < B < C мы знаем, что все числа разные и А — наименьшее из них. Равенство B^A = С^A будет верным, если B = C или A = 0. Первый вариант не подходит, значит, А = 0.

Остается подобрать числа B и C. Из равенства A + B + С = 2592 отбрасываем число А. Так как В < C, будем последовательно перебирать числа Фибоначчи и подставлять их вместо В в равенство В + С = 2592.

Рассмотрим числа Фибоначчи:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, ...

Числа 1, 2, 3 и 5 не подходят, так как при их подстановке число С не будет являться числом Фибоначчи:

🟢1 + С = 2592 —> С = 2591
🟢2 + С = 2592 —> С = 2590
🟢3 + С = 2592 —> С = 2589
🟢5 + С = 2592 —> С = 2587

✔️ Однако при В = 8 мы получим число С, которое является числом Фибоначчи:

🟢8 + С = 2592 —> С = 2584

Таким образом:

А = 0
В = 8
С = 2584

Ставьте реакцию:

🔥 — если решили задачу быстро
👀 — если пришлось поломать голову

#разборзадачи

Поколение Python 🐍

14 Feb, 12:36


Друзья, поздравляем вас с Днем всех влюбленных! ❤️

Мы считаем, что тексты на обычных валентинках слишком скучные и не подходят настоящим программистам. 😞

Давайте накидаем в комментариях свои версии поздравлений для настоящих pyladies и pygentlemen! 😁

Ставьте реакцию:

❤️ — если отмечаете День святого Валентина
👀 — если вам не близок этот праздник

#поколениеpython

Поколение Python 🐍

14 Feb, 06:36


Друзья, в одном из предыдущих постов мы говорили о кодах состояния HTTP. Сегодня рассмотрим наиболее популярные клиентские и серверные ошибки. 😨

❤️ Клиентские ошибки представлены кодами состояния 4**:

400 Bad Request
Означает неверный запрос и может возникнуть, например, если запрос не соответствует определенному формату или в нем допущена синтаксическая ошибка.

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

403 Forbidden
Означает, что доступ к запрашиваемому ресурсу запрещен. Эта ошибка возникает, когда клиент пытается получить доступ к контенту, но у него нет на это необходимых прав.

404 Not Found
Пожалуй, самая знаменитая ошибка в Интернете. Она означает, что сервер не может найти запрошенный ресурс. Наиболее частой причиной возникновения этой ошибки является указание неверного адреса веб-страницы.

❤️ Серверные ошибки представлены кодами состояния 5**:

500 Internal Server Error
Означает, что на сервере произошла ошибка, в результате которой он не может успешно обработать запрос. Причиной ошибки может быть избыточная нагрузка на сервер, сбой в работе серверного ПО, программная ошибка или проблема с базой данных.

503 Service Unavailable
Возникает, когда сервер не готов обработать запрос в данный момент. Распространенными причинами ошибки являются техническое обслуживание или перегрузка сервера.

Ставьте реакцию:

🙈 — если сталкивались с серверными ошибками на Stepik
😎 — если ни разу не встречали их на Stepik

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #http #кодсостояния

Поколение Python 🐍

13 Feb, 12:02


Друзья, разбираем вопрос с собеседований!

✔️Множественное наследование — это тип наследования, в котором класс наследуется одновременно от двух или более классов. В этом случае дочерний класс наследует все атрибуты и методы всех родительских классов.

✔️Python поддерживает множественное наследование. Его синтаксис отличается от одиночного наследования лишь тем, что при определении дочернего класса в скобках указывается не один родительский класс, а несколько через запятую:

class Parent1:  # первый родительский класс
pass

class Parent2: # второй родительский класс
pass

class Child(Parent1, Parent2): # дочерний класс
pass


🤩Множественное наследование является потенциальным источником ошибок, которые могут возникнуть из-за наличия одинаковых имен атрибутов и методов в родительских классах. В Python данная проблема решается с помощью MRO.

✔️MRO (Method Resolution Order) — это порядок, в котором просматриваются классы во время поиска метода в иерархии классов при наследовании. Он определяется для каждого класса индивидуально в зависимости от его иерархии.

Для получения MRO класса можно воспользоваться методом mro(). Его результатом является список родителей класса, включая сам класс и базовый класс object, расположенных в том порядке, в котором будет производиться поиск методов. Зная MRO класса, мы всегда можем определить, какой метод будет унаследован этим классом.

Приведенный ниже код:
class Parent1:
def method(self):
print('Метод класса Parent1')

class Parent2:
def method(self):
print('Метод класса Parent2')

class Child(Parent1, Parent2):
pass


print(*Child.mro(), sep='\n')

c = Child()
c.method()


выводит:
<class '__main__.Child'>
<class '__main__.Parent1'>
<class '__main__.Parent2'>
<class 'object'>
Метод класса Parent1

📌 Помните, умение проходить собеседование — это тоже навык, и ему можно научиться! 😉

Ставьте реакцию:

🔥 — если знали ответ на вопрос
👀 — если пришлось гуглить

#поколениеpython #собеседования

Поколение Python 🐍

13 Feb, 06:44


Друзья, самые внимательные уже заметили, что на нашем сайте pygen.ru появились анонсы новых курсов. 😉

Делимся подробностями! 😍

После выхода "Алгоритмов и структур данных для начинающих" запланированы три курса:

🔎 Алгоритмы и структуры данных для продвинутых — поскорее выпустим сиквел для тех, кому не хватит первой части. Темы:

😁быстрые сортировки
😘рекурсивные алгоритмы
😘жадные алгоритмы
😁динамическое программирование
😘деревья
😘и многое другое

🥷 Курс для самураев — долгожданное продолжение курса для профессионалов и ООП! Темы:

😁моржовый оператор
😘оператор match case
😘система импорта
😁модули и пакеты
😘логирование
😘и многое другое

🧮 Математика для программистов — давняя мечта создателя "Поколения" Тимура Гуева близка к воплощению. Темы:

😁математический анализ
😘теория вероятностей
😘статистика
😁алгебра
😘геометрия
😘и многое другое

😎 Продвинутые алгоритмы и курс для самураев будут разрабатываться параллельно, а после них мы приступим к математике для программистов.

🚨🚨⚠️🚨☝️ Уже сейчас можно подписаться на новости, чтобы первым узнать о выходе курсов.

😍 Пишите в комментариях вопросы по запланированным курсам, а мы постараемся удовлетворить ваше любопытство!

Ставьте реакцию:

👍 — если ждете курс для самураев
❤️ — если ждете алгоритмы для продвинутых
🔥 — если ждете математику для программистов

#поколениеpython

Поколение Python 🐍

12 Feb, 07:44


Друзья, сегодня поговорим о линейном поиске. 😄

📎 Линейный поиск — это алгоритм поиска заданного значения в наборе данных. Суть алгоритма заключается в последовательном переборе всех элементов набора данных до тех пор, пока не будет найден элемент, значение которого совпадает с искомым, или пока не останется ни одного элемента для дальнейшего поиска.

Шаги алгоритма линейного поиска:

🔠Выбираем первый элемент набора данных
🔠Сравниваем выбранный элемент с искомым значением
🔠Если они равны, завершаем поиск. В противном случае переходим к следующему элементу
🔠Повторяем второй и третий шаги до тех пор, пока не найдем элемент, значение которого совпадает с искомым
🔠Если после просмотра всех элементов искомое значение не найдено, завершаем поиск

🤩 На картинке приведены варианты классической реализации линейного поиска. 😉

📎 Алгоритм линейного поиска последовательно проверяет каждый элемент в наборе данных. Если искомый элемент находится в конце набора или отсутствует вовсе, алгоритму придется проверить все элементы.

Таким образом, временнáя сложность алгоритма линейного поиска равна O(n), где n — длина набора данных

🟢Преимущества линейного поиска:

🟢Простота: алгоритм легко понять и реализовать
🟢Универсальность: можно использовать независимо от того, отсортирован набор данных или нет
🟢Производительность: на небольших наборах данных (n≤10⁷) алгоритм работает достаточно быстро

🟢Недостатки линейного поиска:

🟢Производительность: на больших наборах данных (n>10⁷) алгоритм работает довольно медленно
🟢Игнорирование порядка: алгоритм не использует информацию об упорядоченности элементов набора данных и не становится быстрее, если, например, набор отсортирован по возрастанию

Выход курса по алгоритмам запланирован на 1 апреля. Вы можете купить его заранее со скидкой 20% и получить приятные бонусы. Подробности по ссылке!

Ставьте реакцию:

🔥 — если знали о линейном поиске
👀 — если слышите о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

11 Feb, 10:34


Друзья, принесли вам новый вопрос с собеседований!

Что такое множественное наследование? Поддерживает ли Python множественное наследование? Что такое MRO?

Делитесь в комментариях своими ответами на вопрос! 😍

Ставьте реакцию:

🔥 — если главное на собеседовании — знания
😎 — если важнее уметь общаться

#поколениеpython #собеседования

Поколение Python 🐍

10 Feb, 12:34


Друзья, сегодня решаем задачу и вспоминаем нашего старого знакомого — средневекового математика Фибоначчи. 🧮

🧠🧠🧠🧠

Даны три числа Фибоначчи A, B и С. Мы знаем о них следующее:

🔘A < B < C
🔘A + B + С = 2592
🔘B^A = С^A

Найдите числа A, B и C. 😉

Пишите ответы и свои рассуждения в комментариях, не забывая прятать их под скрытым текстом.

В этом посте рассказывали о том, чем знаменит Фибоначчи.

Ставьте реакцию:

🔥 — если помните, что такое числа Фибоначчи
👀 — если пришлось погуглить

#задача

Поколение Python 🐍

10 Feb, 06:26


Друзья, а вот и новое слово недели! Сегодня поговорим о профилировании кода. 😎

📎 Процесс профилирования включает в себя сбор и анализ данных о выполнении кода. Эти данные могут содержать множество характеристик, например:

🔵время выполнения функций
🔵количество вызовов функций
🔵объем используемой памяти
🔵частота и время выполнения системных вызовов
🔵частота возникновения исключений и их влияние на производительность

✔️ Цель профилирования — выявление проблемных участков кода, которые могут быть оптимизированы для улучшения общей производительности программы.

📌 Python предоставляет встроенные инструменты для профилирования кода: 😉

🔵модуль cProfile — написан на С, используется в большинстве случаев
🔵модуль profile — написан на Python, используется в случаях, когда необходимо расширить возможности профилирования

Почитать подробнее об этих модулях можно в документации по ссылке.

Ставьте реакцию:

🔥 — если знали, что такое профилирование кода
👀 — если слышите этот термин впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

09 Feb, 10:17


Друзья, а вот и итоги конкурса мемов про курсы "Поколения"! 😁

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

📖 книгу "Мемы. Научный взгляд на феномен поп-культуры, захвативший мир"
🦆 программистский мерч

Ставьте реакцию:

🔥 — если рады за победителя
😈 — если рады, но не от всего сердца

#поколениеpython #конкурс

Поколение Python 🐍

08 Feb, 12:18


Друзья, разбираем задачу на код! 😍

🩵 Эту задачу можно решить с помощью встроенной функции sorted(), создав два списка с отсортированными буквами строк s1 и s2 и проверив их на равенство:

def are_anagram(s1, s2):
return sorted(s1) == sorted(s2)


🩵 Однако в данном случае более эффективным решением будет использование сортировки подсчетом:

def are_anagram(s1, s2):
if len(s1) != len(s2):
return False

counts = [0] * 26

for char in s1:
counts[ord(char) - 97] += 1

for char in s2:
counts[ord(char) - 97] -= 1

for i in range(26):
if counts[i] != 0:
return False

return True


🩵Поскольку строки s1 и s2 содержат только строчные английские буквы, создадим вспомогательный список counts, состоящий из 26 нулей (по количеству букв в английском алфавите). Будем использовать его для подсчета количества появлений каждой буквы в строках.

🩵Индекс вспомогательного списка соответствует коду символа в таблице символов Unicode, уменьшенному на значение, соответствующее символу 'a' (ord('a') = 97). То есть i = 0 соответствует букве 'a', i = 1 соответствует букве 'b' и так далее.

🩵Проходим по строке s1 и увеличиваем в списке counts значение по индексу, соответствующему текущей букве. После этого проходим по строке s2 и уменьшаем в списке counts значение по индексу, соответствующему текущей букве.

🩵Проходим по списку counts и проверяем:

🩵если количество появлений очередного символа не равно нулю, значит, в какой-то из строк этого символа больше, возвращаем значение False
🩵если все элементы списка равны нулю, значит, строки являются анаграммами, возвращаем True

⬇️Как вы думаете, какова временнáя и пространственная сложность данного алгоритма? Пишите в комментариях. 😉

Ставьте реакцию:

😎 — если задача показалась вам легкой
👀 — если пришлось основательно подумать над решением

#поколениеpython #собеседования #разборзадачи

Поколение Python 🐍

08 Feb, 09:59


Друзья, разберем задачу про простое число из 9 цифр.

❤️ Напомним, что простое число — это число, у которого есть всего два делителя: единица и само число.

Чтобы найти ответ к задаче, мы можем перебрать все возможные варианты перестановок цифр и проверить количество делителей каждого полученного числа.

❤️Однако существует более эффективное решение: нам достаточно знать признаки делимости числа.

Составить простое девятизначное число из цифр от 1 до 9 не получится, поскольку любое такое число будет делиться на 3 и на 9 согласно следующим признакам делимости:

❤️число делится на 3 тогда и только тогда, когда сумма его цифр делится на 3
❤️число делится на 9 тогда и только тогда, когда сумма его цифр делится на 9

Действительно, сумма всех цифр от 1 до 9 равна 45, а число 45 делится на 3 и на 9.

🚨🚨⚠️🚨☝️ В нашем курсе по алгоритмам будут подробно рассмотрены признаки делимости. Выход курса запланирован на 1 апреля. Вы можете купить его заранее со скидкой 20% и получить приятные бонусы. Подробности по ссылке!

Ставьте реакцию:

❤️ — если знали о признаках делимости числа на 3 и на 9
👀 — если узнали о них впервые

#разборзадачи

Поколение Python 🐍

07 Feb, 13:04


Друзья, согласно исследованию Университета штата Иллинойс, музыка повышает продуктивность любого вида работы на 6,3%. 😮

Скидывайте в комментарии к этому посту музыку, под которую вы любите работать или учиться. 👇

Давайте все вместе соберем самый крутой плейлист для программистов! 😎

Ставьте реакцию:

🔥 — если любите работать или учиться под музыку
👀 — если музыка мешает сконцентрироваться

#поколениеpython

Поколение Python 🐍

07 Feb, 06:42


Друзья, сегодня поговорим о перечислениях в Python. 😉

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

📌 В Python для создания перечислений используется класс Enum из встроенного модуля enum. Чтобы создать собственное перечисление, необходимо создать подкласс Enum.

Например, приведенный ниже код:
from enum import Enum

class Weekday(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7

определяет перечисление Weekday, содержащее элементы MONDAY со значением 1, TUESDAY со значением 2 и другие.

😌 Поскольку перечисления используются для представления констант, имена элементов перечисления рекомендуется записывать в верхнем регистре.

✔️Основной операцией при работе с перечислениями является доступ к их элементам, которые представляют собой экземпляры класса перечисления. Они имеют атрибуты name и value, в которых содержатся их имена и значения:

from enum import Enum

class Weekday(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7

print(Weekday.MONDAY.name) # MONDAY
print(Weekday.MONDAY.value) # 1


✔️Перечисления являются итерируемыми объектами, поэтому их можно перебирать в цикле и преобразовывать в различные коллекции. Также перечисления поддерживают операции сравнивания, благодаря чему их можно использовать в условных конструкциях, делая их более наглядными.

🔥При разработке программ мы можем обойтись без перечислений, однако они часто упрощают процесс написания кода и улучшают его читаемость. 😎

Почитать подробнее про перечисления в Python можно в документации.

Ставьте реакцию:

🔥 — если знали о перечислениях
👀 — если узнали о них впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #enum

Поколение Python 🐍

06 Feb, 07:09


Друзья, маркетологи и наши половинки не дадут нам забыть, что День влюбленных все ближе. 😉

😍 Онлайн-магазин мерча "Поколения" запускает крутую акцию!

🤑🤑🤑🤑 В заказы на сумму от 3000 рублей, сделанные с 6 по 16 февраля, мы положим:

🐼 мягкую игрушку: багу или панду на выбор
🧦 две пары носков
📚 целых 5 блокнотов
🦆 резиновую уточку
❤️ значок в виде сердца

Не упустите шанс закупиться подарками к грядущим праздникам!

🛍 За покупками переходите по ссылке.

☝️☝️☝️☝️ Не забудьте указать в комментарии к заказу, какую игрушку вы хотите получить.

Ставьте реакцию:


🔥 — если выбираете багу
😎 — если вам по душе панда

#поколениеpython #мерч #акция

Поколение Python 🐍

05 Feb, 10:07


Друзья, сегодня поговорим о различных моделях баз данных. 🖥

🗂 В начале развития баз данных информация хранилась в обычных текстовых файлах в виде записей без какой-либо организации и структуры. Постепенно было разработано множество других моделей баз данных, которые обладают структурой и гибкостью.

Рассмотрим наиболее популярные в настоящее время модели баз данных. 😎

🟢Реляционная модель

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

Гибкость реляционной модели объясняется тем, что таблицы с данными в значительной степени независимы друг от друга. Можно добавлять данные в таблицу, удалять их из нее, вносить в них изменения, при этом не затрагивая данные из других таблиц.

🟢Модель ключ — значение

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

Такие базы данных обеспечивают быстрый доступ к данным и простую структуру хранения. Они часто используются в приложениях, где важна производительность.

🟢Документная модель

Документные базы данных используются для гибкой работы с неструктурированными данными. Основная идея этой модели заключается в хранении данных в виде документов, которые обычно представлены файлами в форматах вроде JSON или XML. Каждый документ представляет собой самодостаточную единицу данных, содержащую полную информацию о своей сущности. Документ может быть проиндексирован или иметь уникальный идентификатор для быстрого доступа к нему.

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

😉 Модели баз данных, которые не используют табличные схемы, обычно называют нереляционными.

Ставьте реакцию:

❤️ — если знали об этих моделях баз данных
👀 — если слышите о некоторых впервые

#поколениеpython #базыданных

Поколение Python 🐍

04 Feb, 11:44


Друзья, продолжаем рубрику "Задачи с собеседований"! 😎

Сегодня предлагаем вам подумать над следующей задачей:

🟠🟠🟠🟠🟠🟠
🟠🟠🟠🟠🟠🟠
Анаграмма — это слово, полученное путем перестановки букв другого слова. Например, слова "кот" и "ток" — анаграммы друг друга, так как состоят из одних и тех же букв, расположенных в разном порядке.

Реализуйте функцию are_anagram(), которая принимает два аргумента в следующем порядке:

🤩s1 — строка из строчных английских букв (2 ≤ len(s1) ≤ 10⁶)
🤩s2 — строка из строчных английских букв (2 ≤ len(s2) ≤ 10⁶)

Функция должна возвращать значение True, если строки s1 и s2 являются анаграммами друг друга, и False в противном случае.
🟠🟠🟠🟠🟠🟠

🟢Пишите свой ход рассуждений и решения в комментариях, не забывая прятать их под скрытым текстом. 😄

Ставьте реакцию:

❤️ — если считаете, что задачи на собесах показывают реальные навыки
👀 — если считаете, что это просто стресс-тест

#поколениеpython #собеседования #задачанакод

Поколение Python 🐍

04 Feb, 06:41


Друзья, вы наверняка слышали, что на шахматах тестируют искусственный интеллект: например, методики оптимизации подбора или распознавание образов.

Давайте окунемся в историю шахматных программ! 👨‍💻

⭐️ 1914 — автомат El Ajedrecista (“Шахматист”) испанского инженера Леонардо Торрес-и-Кеведо

Разыгрывал заключительную часть партии в простейшем варианте: на доске король черных, король и ладья белых. При попытке обманного хода автомат говорил: “Я тебя презираю и не желаю больше с тобой играть”.

⭐️ 1948 — программа Turochamp Алана Тьюринга

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

⭐️ 1958 — альфа-бета-отсечение

Разработан алгоритм уменьшения дерева поиска, на основе которого до сих пор работают некоторые шахматные программы.

⭐️ 1974 — победа советской программы “Каисса”

Названа в честь богини шахмат и разработана в СССР, в Институте теоретической и экспериментальной физики. В 1974 году "Каисса" победила на первом чемпионате мира по шахматам среди компьютерных программ.

⭐️ 1997 — победа шахматного суперкомпьютера DeepBlue

Эта программа от IBM впервые выиграла партию у чемпиона мира Гарри Каспарова в 1996 году, хотя по итогам матча счет составил 4:2 в пользу человека. Но уже год спустя DeepBlue обыграл Каспарова и в общем зачете.

⭐️ 2017 — AlphaZero и машинное обучение

Систему AlphaZero разработала структура Google под названием DeepMind. В отличие от прежних программ, ее не обучают на существующих партиях. ИИ дают только правила игры, а затем он начинает играть против себя и обучается в процессе.

😵‍💫 Современные шахматные ИИ способны обыграть любых профессионалов из мира шахмат.

Ставьте реакцию:

🔥 — если любите шахматные задачи
👀 — если хотите, чтобы за вас их решал ИИ

#япознаюмир #шахматы

Поколение Python 🐍

03 Feb, 12:57


Друзья, разминаем 🧠 и настраиваемся на рабочую неделю! 😉

🧠🧠🧠🧠

У вас есть цифры от 1 до 9. Как составить из них простое девятизначное число, если каждую цифру можно использовать только один раз? 😵‍💫

Ответ и ход своих размышлений пишите в комментариях, не забывая прятать их под скрытым текстом.

🚨🚨⚠️🚨☝️ Эта задача взята из нашего будущего курса по алгоритмам. Выход курса запланирован на 1 апреля. Вы можете купить его заранее со скидкой 20% и получить приятные бонусы. Подробности по ссылке! 😍

Ставьте реакцию:

🔥 — если решили задачу быстро
👀 — если пришлось поломать голову

#задача

Поколение Python 🐍

03 Feb, 06:57


Друзья, продолжаем рубрику "Слово недели"! Сегодня поговорим про интерполяцию строк. 😉

В Python существуют следующие способы интерполяции строк:

❤️Оператор % — первый инструмент интерполяции строк, который появился в Python. На данный момент он считается устаревшим. Для интерполяции с помощью оператора % необходимо слева от оператора указать строку с заполнителем %s, а справа — подставляемое в нее значение. Символ s в заполнителе обозначает преобразование подставляемого значения в формат строки.

Приведенный ниже код:
print('My name is %s' % 'James')

выводит My name is James.

❤️Строковый метод format() возвращает копию строки, в которой каждый заполнитель {} заменяется строковым представлением соответствующего переданного аргумента.

Приведенный ниже код:
name = 'James'
surname = 'Bond'

result = 'My name is {}, {} {}'.format(surname, name, surname)

print(result)

выводит My name is Bond, James Bond.

❤️В Python 3.6 появился новый способ интерполяции строк — f-строки. Они представляют собой строки с префиксом f или F, которые могут содержать заполнители {}. В них помещаются переменные или выражения, значения которых объединяются со строковой частью f-строки.

Приведенный ниже код:
name = 'James'
surname = 'Bond'

result = f'My name is {surname}, {name} {surname}'

print(result)

выводит My name is Bond, James Bond.

☝️☝️☝️☝️ Выбор способа интерполяции строк зависит от конкретной задачи и предпочтений программиста, однако f-строки являются наиболее удобным и современным способом.

😎 Почитать подробнее про форматирование и интерполяцию строк в Python можно в нашей статье на Хабре:

🔗 https://habr.com/ru/articles/828396/

Ставьте реакцию:

🔥 — если знали, что такое интерполяция строк
👀 — если слышите этот термин впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

02 Feb, 13:53


Друзья, а вот и дайджест постов “Поколения” за январь. Будет что почитать (и порешать)!

🤯 ЗАДАЧИ

😊Задача без вычислений для самых ленивых
😊Задача с собеседований на код
😊Разбор задачи с собеседований на код
😊Задача про три коробки с уточками

🛠 ПОЛЕЗНЫЕ МАТЕРИАЛЫ

😊Типы ошибок в Python
😊Слово недели. Асинхронность
😊Английский для программистов. Геометрия
😊Вопросы с собеседований 1. Функции высшего порядка и оператор yield
😊Ответы на вопросы с собеседований 1
😊Вопросы с собеседований 2. Приоритет выполнения логических операторов, поверхностное и глубокое копирование
😊Ответы на вопросы с собеседований 2
😊Временная сложность операций со строками в Python
😊Тип данных range
😊Временная сложность операций с объектами типа range
😊Оператор pass в Python
😊Слово недели. Многопроцессорность
😊Временная сложность операций со словарями и множествами
😊Интересный вариант использования встроенной в Python функции open()

🧠 ПОЗНАВАТЕЛЬНЫЕ ПОСТЫ

😊Интересные факты про 2025 год
😊Зарядка для программиста

😍 НОВОСТИ “ПОКОЛЕНИЯ”

😊Налоговый вычет за курсы “Поколения”
😊Акция “Подарок для ребенка” действует до 12 февраля
😊Курс для начинающих — победитель конкурса Edtek Award 2024

✍️ Ставьте ❤️ и сохраняйте пост в избранное, чтобы ничего не пропустить!

#поколениеpython #дайджест #январь

Поколение Python 🐍

02 Feb, 08:41


Друзья, мы решили провести небольшой, но забавный конкурс! 😁

В сообществе "Поколения" сложилось много понятных только своим шуточек: про шахматные задачи, про сурового Валеру, про модуль turtle 🐢 и про то, что мы сто раз переносили старт курса по алгоритмам (и наконец назначили выход на 1 апреля 😆).

Предлагаем вам запилить собственные мемы про курсы "Поколения"!

Автор лучшего мема по мнению нашей команды получит приз:

📖 книгу "Мемы. Научный взгляд на феномен поп-культуры, захвативший мир"
🦆 программистский мерч

Скидывайте мемы в комментарии, лайкайте самые классные картинки!

☝️☝️☝️☝️ Итоги конкурса подведем через неделю, 9 февраля.

Ставьте реакцию:

🔥 — если часто делаете собственные мемы
👀 — если и чужих хватает

#поколениеpython #конкурс

Поколение Python 🐍

01 Feb, 11:44


Друзья, разбираем вопросы с собеседований. 😄

✔️ Ответ на1️⃣вопрос:

К логическим операторам относятся not (логическое НЕ), and (логическое И) и or (логическое ИЛИ). Перечислим их в порядке увеличения приоритета выполнения:

or
—> and —> not (наименьший приоритет имеет оператор or, а наибольший — оператор not).

Для явного указания порядка выполнения логических операторов используются скобки.

✔️ Ответ на 2️⃣вопрос:

Различие между поверхностным и глубоким копированием проявляется во время работы с объектами, содержащими в качестве элементов изменяемые объекты, например, с вложенными списками.

🔘Поверхностное копирование создает поверхностную копию объекта, копируя вместо самих элементов ссылки на их адреса в памяти. Изменение поверхностной копии объекта приводит к тем же изменениям исходного объекта и наоборот.

В Python по умолчанию копирование поверхностное. Поверхностную копию вложенного списка можно создать с помощью метода copy(), среза [:] и функции copy() из встроенного модуля copy.

Приведенный ниже код:
lst = [[1, 2], [3, 4]]
lst_copy = lst.copy()

lst_copy[0][0] = 1000

print(lst)
print(lst_copy)

выводит:
[[1000, 2], [3, 4]]
[[1000, 2], [3, 4]]

🔘Глубокое копирование создает глубокую (полную) копию объекта, рекурсивно копируя сами элементы. В результате исходный объект и копия полностью независимы: любые изменения копии не будут отражаться в исходном объекте и наоборот.

Глубокую копию вложенного списка можно создать с помощью функции deepcopy() из встроенного модуля copy.

Приведенный ниже код:
from copy import deepcopy

lst = [[1, 2], [3, 4]]
lst_copy = deepcopy(lst)

lst_copy[0][0] = 1000

print(lst)
print(lst_copy)

выводит:
[[1, 2], [3, 4]]
[[1000, 2], [3, 4]]


📌 Помните, умение проходить собеседование — это тоже навык, и ему можно научиться! 😉

Ставьте реакцию:

😎 — если знали ответы на оба вопроса
👀 — если хотя бы один из вопросов поставил в тупик

#поколениеpython #собеседования

Поколение Python 🐍

01 Feb, 07:57


Друзья, а вот и разбор задачи про коробки с уточками! 🦆

Сперва определим расположение коробок относительно друг друга. Для этого ответим на вопрос: может ли красная коробка стоять рядом с зеленой?

По условию задачи коробок всего 3, а уточек — 35. При этом слева от зеленой коробки 22 уточки, а справа от красной — 23.

🤩если красная коробка стоит слева от зеленой, то общее количество уточек составляет 45
🤩если зеленая коробка стоит слева от красной, то количество коробок превышает 3

Оба варианта нам не подходят. Следовательно, коробки могут располагаться только следующим образом:

🟠красная — белая — зеленая

Тогда получаем следующую систему уравнений:

🟠белая + красная = 22 уточки
🟠белая + зеленая = 23 уточки
🟠белая + красная + зеленая = 35 уточек

Остается посчитать количество уточек в белой коробке:

🟢(22 + 23) - 35 = 10

Несложно найти количество уточек и в других коробках:

🤩красная: 22 - 10 = 12
🤩зеленая: 23 - 10 = 13

Ставьте реакцию:

🔥 — если решили задачу быстро
👀 — если пришлось поломать голову

#разборзадачи

Поколение Python 🐍

31 Jan, 14:54


Друзья, уже завтра начинается февраль — последний и самый тяжелый месяц зимы (спасибо, что такой короткий 😅).

Чтобы его преодолеть, предлагаем оторвать листик с тем, что вам сейчас очень нужно. 🎁

Пишите в комментариях, что взяли или какой бумажки не хватило! ⬇️

Ставьте реакцию:

👀 — если очень ждете весну
😎 — если вы чилловый парень/чилловая девушка и на время года вам плевать

#поколениеpython

Поколение Python 🐍

31 Jan, 06:39


Друзья, сегодня разберем интересный вариант использования встроенной в Python функции open().

🟪Функция open() используется для открытия файлов. Она возвращает специальный файловый объект, который имеет различные методы для работы с открытым файлом. В качестве обязательного аргумента функция open() принимает путь к файлу или файловый дескриптор.

🟪Файловый дескриптор — это целое неотрицательное число, которое является уникальным идентификатором файла и используется операционной системой для управления файлами и другими объектами ввода-вывода.

Первые три файловых дескриптора (0, 1 и 2) зарезервированы под стандартные потоки ввода-вывода:

стандартный ввод STDIN0
стандартный вывод STDOUT1
стандартный вывод ошибок STDERR2

Использование функции open() с данными файловыми дескрипторами является альтернативой работы с объектами stdin (поток ввода), stdout (поток вывода) и stderr (поток вывода ошибок) встроенного модуля sys.

Например, для чтения данных из стандартного ввода вместо импорта объекта sys.stdin можно воспользоваться функцией open(), передав ей в качестве аргумента дескриптор 0, как показано на картинке.

Почитать подробнее про функцию open() можно по ссылке, про объекты стандартных потоков ввода-вывода из модуля sys — по ссылке, про файловые дескрипторы — по ссылке.

Ставьте реакцию:

🔥 — если знали, что такое файловые дескрипторы
👀 — если узнали о них впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал

Поколение Python 🐍

30 Jan, 06:46


Друзья, хотим напомнить про скидку 2000 рублей на платные курсы "Поколения", которая действует еще два дня! 😉

👨‍💻 Стоимость любого вышедшего курса (профи, ООП, SQL) при покупке через официальный сайт со скидкой составит 4900 рублей вместо 6900.

😎 Чтобы воспользоваться акцией, используйте промокод ЛУЧШИЙКУРС. Промокод действителен до конца 31 января.

Ставьте реакцию:

🔥 — если планируете покупку одного из наших курсов
😎 — если все уже купили и ждете выхода алгосов

#поколениеpython #скидки

Поколение Python 🐍

29 Jan, 07:28


Друзья, cегодня рассмотрим временну́ю сложность операций со словарями (тип dict) и множествами (тип set) в Python.

📌 В основе словарей лежит структура данных под названием хеш-таблица. При добавлении в словарь новой пары Python вычисляет хеш-значение ее ключа и на основе полученного результата помещает эту пару в соответствующую ячейку хеш-таблицы. Во время поиска пары по ключу Python аналогичным образом вычисляет хеш-значение ключа, попадает в соответствующую ячейку и путем сравнения ключей ищет в ней искомую пару.

В Python используется грамотно реализованная хеш-функция, которая генерирует хеш-значения из довольно широкого диапазона. Благодаря этому пары словаря распределяются по ячейкам хеш-таблицы равномерно. Более того, Python всегда контролирует заполнение хеш-таблицы: если количество свободных ячеек уменьшается, Python увеличивает их число автоматически.

✔️Таким образом, все операции, связанные с поиском ключа в словаре, не требуют проверки всего словаря целиком, поэтому выполняются очень быстро и имеют константную временну́ю сложность:

🟢Получение значения пары по ключу — O(1)⚡️
🟢Обновление значения пары по ключу — O(1)⚡️
🟢Удаление пары по ключу — O(1)⚡️
🟢Проверка на принадлежность ключа словарю — O(1)⚡️

📌 Устройство множеств похоже на устройство словарей: в их основе также лежит хеш-таблица. Отличие лишь в том, что в множествах хранятся не пары, а одиночные элементы.

✔️Следовательно, все операции, связанные с поиском элемента в множестве, также выполняются быстро и имеют константную временну́ю сложность:

🟢Добавление элемента — O(1)⚡️
🟢Удаление элемента — O(1)⚡️
🟢Проверка на принадлежность — O(1)⚡️

Типы данных dict и set — пример компромисса, когда жертвуют памятью ради скорости. Словари и множества занимают большое количество памяти, но зато обеспечивают быстрый доступ к своим элементам.

Выход курса по алгоритмам запланирован на 1 апреля. Вы можете купить его заранее со скидкой 20% и получить приятные бонусы. Подробности по ссылке!

Ставьте реакцию:

🔥 — если знали временну́ю сложность операций со словарями и множествами
👀 — если узнали о ней впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

28 Jan, 11:08


Друзья, продолжаем рубрику "Вопросы с собеседований"!

Сегодня предлагаем поразмышлять над следующими вопросами по Python: 😉

1️⃣ Перечислите логические операторы в порядке увеличения их приоритета выполнения.

2️⃣ Чем отличаются поверхностное и глубокое копирование? Как создать поверхностную и глубокую копии объектов?

⤵️ Делитесь в комментариях своими ответами на вопросы! 😍

Ставьте реакцию:

🧑‍💻 — если считаете, что к собесам всегда нужно готовиться
👀 — если считаете, что к собесам подготовиться невозможно

#поколениеpython #собеседования

Поколение Python 🐍

28 Jan, 06:21


Друзья, все мы знаем, как легко увлечься написанием кода и забыть, что полезно шевелить не только мозгами, но и телом. 😁

🔋 Поэтому мы собрали простую зарядку для программиста. Она займет всего несколько минут и легко выполняется прямо за компьютером. 🧑‍💻

👀 Для глаз 👀

😊 Используйте правило 20-20-20: каждые 20 минут смотрите на предмет в 20 шагах от вас в течение 20 секунд
😊 Медленно переводите взгляд в разных направлениях: сверху вниз, слева направо, по диагонали и по кругу
😊 Быстро моргайте в течение 15 секунд

🦒 Для шеи и плеч 🦒

😊Медленно поворачивайте голову вправо и влево, затем наклоняйте вперед и назад
😊Сделайте легкий самомассаж
😊Сядьте ровно, опустите руки вдоль тела. Поднимайте плечи вверх, немного задерживайте их в таком положении, а затем опускайте вниз

🦵Для ног и таза🦵

😊Положите одну ногу на другую параллельно полу и вращайте стопой по кругу: по часовой стрелке и против
😊Поставьте обе ноги на пол так, чтобы колени были под прямым углом к телу. Высоко поднимайте и опускайте пятки, не отрывая носков от пола
😊Всем известный "велосипед" прямо на офисном стуле. Имитируйте вращение педалей ногами. Можно добавить повороты корпусом так, чтобы локоть левой руки тянулся к поднятому правому колену и наоборот

☝️☝️☝️☝️ Зарядка — это не повод отвлечься от работы, а ключ к успеху. Регулярные перерывы и легкие упражнения помогают повысить концентрацию и дольше оставаться продуктивным. 📈

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

Ставьте реакцию:

😎 — если делаете перерывы на зарядку
👀 — если только сейчас заметили, что шея затекла

#япознаюмир

Поколение Python 🐍

27 Jan, 11:13


Друзья, сегодня решаем задачу про лучших друзей программистов — уточек! 🦆

В магазине стоят три коробки с резиновыми уточками: белая, зеленая и красная. Слева от зеленой коробки 22 уточки, справа от красной коробки — 23 уточки. Всего в коробках 35 уточек. Сколько уточек лежит в белой коробке? 📦

Ответы и свои рассуждения пишите в комментариях, не забывая прятать их под скрытым текстом.

Ставьте реакцию:

❤️ — если любите резиновых уточек
👀 — если не понимаете, почему они всем нравятся

#задача

Поколение Python 🐍

27 Jan, 06:24


Друзья, принесли вам новое слово недели! Сегодня поговорим о многопроцессорности. 😄

В зависимости от контекста многопроцессорность может иметь различные определения. В общем смысле:

❤️устройство называется многопроцессорным, если имеет два процессора или больше

❤️операционная система или программа называется многопроцессорной, если способна распределять задачи между процессорами многопроцессорного устройства

В рамках программирования на Python многопроцессорность обычно рассматривают как вариант реализации вычислений, когда для решения некоторой задачи запускается несколько параллельных независимых процессов.

❤️В отличие от многопоточности, многопроцессорность не ограничена GIL, поскольку использует отдельные процессы. Каждый процесс имеет собственную память и интерпретатор Python, а значит, не конкурирует с другими процессами за программные ресурсы.

❤️Многопроцессорность применяется для решения задач, которые требуют значительных вычислительных ресурсов и могут быть выполнены независимо друг от друга. Например, многопроцессорность часто используется в различных научных вычислениях и анализе больших объемов данных.

Для реализации многопроцессорности Python предоставляет встроенный модуль multiprocessing. Подробнее почитать о нем можно в документации по ссылке.

Ставьте реакцию:

😎 — если знали, что такое многопроцессорность
👀 — если слышите этот термин впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

24 Jan, 14:41


Друзья, пришло время выяснить, к какой школе программирования вы принадлежите! 😌🥋

Где вы будете искать ответы, столкнувшись с проблемой в коде или нестандартной задачей? 🤔

Ставьте реакцию:

❤️ — старый добрый Stack Overflow
🔥 — стильный молодежный ChatGPT
😎 — олдскульная документация
👀 — гуглить все еще модно
👍 — все сразу

Пишите в комментариях, почему вы используете тот или иной источник, в чем его преимущества по сравнению с другими вариантами. 🤩

#поколениеpython #опрос

Поколение Python 🐍

24 Jan, 06:52


Друзья, сегодня поговорим об операторе pass в Python. 😄

📍 В Python существуют конструкции, операторы которых требуют обязательной реализации блока кода. К таким конструкциям относятся:

условные операторы — if/elif/else
циклы — for и while
функции — def
классы — class
контекстные менеджеры — with
операторы обработки исключений — try/except/finally

Если в программе определить любую из этих конструкций с пустым блоком кода, то будет возбуждено исключение IndentationError.

Например, приведенный ниже код:
def func():
# пустой блок кода

выводит IndentationError: expected an indented block after function definition.

📍 Иногда может возникнуть ситуация, когда необходимо определить конструкцию с обязательным блоком кода, но мы хотим реализовать его позже или просто оставить пустым.

📍 В таких случаях можно заменить блок кода конструкции оператором pass, который используется в качестве заглушки и не выполняет никаких действий. Это позволит нам сохранить синтаксическую корректность кода.

Приведенный ниже код:
def func():
pass

завершается без ошибок.

📍 Помимо оператора pass в качестве заглушки можно использовать встроенную в Python константу Ellipsis или соответствующий ей литерал ....

Приведенный ниже код:
def func():
...

также завершается без ошибок.

📌 Почитать подробнее про константу Ellipsis можно в нашей статье по ссылке. 😉

Ставьте реакцию:

🔥 — если знали про оператор pass
👀 — если узнали о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #pass #Ellipsis

Поколение Python 🐍

23 Jan, 15:03


Друзья, разбираем задачу с собеседований! 😄

✔️ Приведем один из наиболее эффективных алгоритмов решения данной задачи:

def sum_of_digits(number):
number = abs(number)
total_sum = 0
while number:
total_sum += number % 10
number //= 10
return total_sum

def max_digits_sum(nums):
result = nums[0]
max_sum = sum_of_digits(nums[0])

for num in nums:
cur_sum = sum_of_digits(num)
if (cur_sum, num) > (max_sum, result):
max_sum = cur_sum
result = num

return result


Рассмотрим алгоритм подробно: 😵‍💫

▫️Для подсчета суммы цифр чисел будем использовать отдельную функцию sum_of_digits()

▫️Установим начальные значения искомого числа (result) и максимальной суммы цифр (max_sum), равные первому числу списка и сумме его цифр соответственно

▫️В цикле проходим по всем элементам списка nums

▫️С помощью вспомогательной функции sum_of_digits() вычисляем сумму цифр текущего числа

▫️Если полученное значение больше max_sum, обновляем result и max_sum

▫️Если полученное значение равно max_sum, а текущее число больше result, обновляем result

▫️По завершении цикла возвращаем result

Ставьте реакцию:


😎 — если задача показалась вам легкой
👀 — если пришлось основательно подумать

#поколениеpython #собеседования #разборзадачи

Поколение Python 🐍

23 Jan, 08:32


Друзья, запускаем акцию в магазине мерча "Поколения" — подарок для ребенка! 👶

Под Новый год вы делали много заказов в подарок не только взрослым, но и детям. А мы, как всегда, клали в посылки небольшие бесплатные сюрпризы — и судя по отзывам, попадали в точку. 😎

Мы решили пойти дальше: будем подбирать индивидуальные подарки для ваших детей от 3 до 18 лет! 🎁

😊😀😊 🤣😀😊😀🤣😀😘🤓
😌😉😆😀😍😉😊

1⃣оформите заказ от 2000 рублей на shop.pygen.ru
2⃣ в комментарии к заказу укажите возраст и пол ребенка, расскажите о его интересах и хобби
3⃣ ждите подарок, который подберет команда "Поколения"

☝️☝️☝️☝️ Акция ограничена по времени, действует до 12 февраля включительно.

Мы решили сделать подарок тому, кто совершит 1024-й заказ в нашем онлайн-магазине! Делайте любую покупку в нашем онлайн-магазине. В заказ, который окажется 1024-м, мы положим сюрприз для программиста. 🎰

Ставьте реакцию:

🔥 — если любите сами выбирать подарки
👀 — если рады, когда это делают за вас

#поколениеpython #мерч #подарокдляребенка

Поколение Python 🐍

22 Jan, 09:47


Друзья, в одном из предыдущих постов мы говорили о типе данных range. Сегодня рассмотрим временну́ю сложность операций с объектами данного типа.

🟪Объект типа range является более производительным по сравнению с другими последовательностями. Это связано с тем, что при его создании в память записываются только его параметры: 😎

начальное значение start
конечное значение stop
шаг step

Сами элементы объекта range не хранятся в памяти, а вычисляются по мере необходимости.

🟪Часть операций с объектом типа range выполняется лишь с использованием его параметров и различных математических формул. Элементы объекта в таких операциях не участвуют, поэтому операции выполняются очень быстро. 😉

🟪Рассмотрим временну́ю сложность операций с объектом типа range длины n:

Итерации по элементамO(n)
Обращение по индексуO(1)
Функция len()O(1)
Оператор inO(1)⚡️
Методы index() и count()O(1)⚡️
Функции min()и max()O(n)
Функция sum()O(n)

Выход курса по алгоритмам запланирован на 1 апреля. Вы можете купить его заранее со скидкой 20% и получить приятные бонусы. Подробности по ссылке!

Ставьте реакцию:

🔥 — если знали временну́ю сложность операций с объектами типа range
👀 — если узнали о ней впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#поколениеpython #курспоалгоритмам #range

Поколение Python 🐍

21 Jan, 11:12


Друзья, вы наверняка знаете, что собеседования в IT обычно включают не только теоретическую часть, но и практическую. Она часто содержит логические и алгоритмические задачи.

Хорошие новости! Мы собрали популярные задачи на код с реальных IT-собеседований и запускаем новую рубрику — "Задачи с собеседований". Сегодня предлагаем вам решить одну из них. 😉

🟢🟢🟢🟢🟢🟢
🟢🟢🟢🟢🟢🟢
Реализуйте функцию max_digits_sum(), которая принимает один аргумент:

🤩nums — список целых чисел (1 ≤ len(nums) ≤ 10⁶)

Функция должна возвращать число из списка nums, имеющее наибольшую сумму цифр (без учета знака числа). Если в списке nums несколько подходящих чисел, функция должна вернуть наибольшее из них.
🟢🟢🟢🟢🟢🟢

⬇️Пишите свой ход рассуждений и решения в комментариях, не забывая прятать их под скрытым текстом. 😄

Ставьте реакцию:

🔥 — если считаете, что практическая часть собесов важна
👀 — если теоретической части достаточно

#поколениеpython #собеседования #задачанакод

Поколение Python 🐍

21 Jan, 06:36


Друзья, к нам обратилась российская ИТ-компания Aston. Они предлагают стажировку с последующим трудоустройством студентам наших курсов! 😎

Чтобы подать свою кандидатуру на рассмотрение, оставьте заявку по ссылке.

🚨🚨⚠️🚨☝️ Все подробности о стажировке в Aston смотрите по ссылке.

Ставьте реакцию:

🔥 — если ищете стажировку и работу
👀 — если пока учитесь

#поколениеpython #стажировка

Поколение Python 🐍

20 Jan, 08:38


Друзья, хотим поделиться с вами радостной новостью! 😍

🖥 "Поколение Python": курс для начинающих стал победителем Международного конкурса открытых онлайн-курсов "Edtek Award OOC 2024"!

🦸‍♂️ Наш курс занял первое место в номинации "Лучшие онлайн-курсы для обучения программированию".

Мы очень рады, что спустя пять лет после выхода курса он все еще остается актуальным и востребованным. 👍

➡️ Подробнее почитать про конкурс можно на сайте Edtek.

🤑🤑🤑🤑 В честь победы в конкурсе дарим скидку 2000 рублей на все курсы (профи, ООП, SQL) при покупке через официальный сайт "Поколения". Стоимость любого курса со скидкой составит 4900 рублей вместо 6900. Чтобы воспользоваться акцией, используйте промокод ЛУЧШИЙКУРС (действует до 31.01.2025). 😎

Ставьте реакцию:

🔥 — если познакомились с "Поколением" с курса для начинающих
😎 — если сразу начали с более сложных курсов

#поколениеpython

Поколение Python 🐍

18 Jan, 10:06


Друзья, разбираем задачу про выражение с самым большим результатом.

Конечно, можно просто посчитать все значения, как показано на картинке.⬆️

🟢 Однако мы можем ответить на задачу, не совершая вычислений. Для этого нужно просто сравнить составляющие выражений, отбросив одинаковые множители.

🔠Выражения😊и😊имеют одинаковый множитель 365. Отбросив его, получаем:

😊— 24
😊— 10

Выражение😊больше выражения😊, поскольку 24 > 10.

🔠Выражения😊и😊имеют одинаковый множитель 60 * 24. Отбросив его, получаем:

😊— 60
😊— 7

Выражение😊больше выражения😊, поскольку 60 > 7.

🔠Остается сравнить выражения😊и😊. Они также имеют одинаковый множитель 24. Отбросив его, получаем:

😊— 365
😊— 60 * 60

Очевидно, что 365 < 60 * 60. Значит, среди всех приведенных выражений наибольший результат имеет выражение 😊.

Ставьте реакцию:

😎 — если решили задачу без вычислений
👀 — если пришлось произвести расчеты

#разборзадачи

Поколение Python 🐍

17 Jan, 14:35


Друзья, во всех профессиях есть свои словечки, приметы и, конечно, свои поговорки! 😁

Предлагаем поразвлекаться и придумать свои пословицы для программистов, тестировщиков и других айтишников.

Мы начнем! 😆

🔘Баг фиче не товарищ
🔘Не стыдно не знать, стыдно не гуглить
🔘Хороший код рефакторингом не испортишь

Пишите свои варианты пословиц в комментариях! ⬇️

Ставьте реакцию:

🔥 — если часто используете поговорки
👀 — если это кринж

#поколениеpython

Поколение Python 🐍

17 Jan, 06:41


Друзья, а вы знали, что функция range() возвращает особый объект типа range? 👀

📍 Функция range() используется для генерации последовательности целых чисел с заданным шагом. Она может принимать три аргумента:

🔘start — начало последовательности (включительно)
🔘stop — конец последовательности (не включительно)
🔘step — шаг последовательности

Приведенный ниже код:
print(*range(10))
print(*range(1, 10))
print(*range(2, 10, 2))

выводит:
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
2 4 6 8

📍 На самом деле функция range() является классом, который представляет собой отдельный неизменяемый тип данных. Объекты данного класса называют диапазонами.

🔘 Диапазоны похожи на последовательности в Python (строки, списки, кортежи). Они поддерживают:

🔘итерацию по элементам
🔘индексацию
🔘срезы (возвращается новый объект типа range)
🔘нахождение длины с помощью функции len()
🔘операторы ==, != и in
🔘методы index() и count()

📎 Однако объект типа range не поддерживает конкатенацию и умножение на число, поскольку диапазоны являются последовательностями, которые следуют строгому шаблону арифметической прогрессии, а повторение и конкатенация могут нарушить этот шаблон.

🔥 Главное преимущество типа range над строками, списками и кортежами заключается в том, что объект типа range всегда занимает небольшое фиксированное количество памяти, независимо от размера представляемого им диапазона чисел. Он хранит в памяти только значения start, stop и step, а элементы диапазона вычисляются по мере необходимости.

Ставьте реакцию:

🔥 — если знали про тип данных range
👀 — если слышите о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #range

Поколение Python 🐍

16 Jan, 12:31


Друзья, разберем вопросы с собеседований.

✔️ Ответ на❤️вопрос

Функции высшего порядка — это функции, которые принимают и/или возвращают другие функции.

Например, встроенные в Python функции sorted(), min() и max() — функции высшего порядка, поскольку принимают в качестве необязательного аргумента key функцию сравнения элементов. Другим важным примером встроенных функций высшего порядка являются функции map() и filter(). Они принимают обязательный аргумент func, представляющий собой функцию преобразования либо фильтрации элементов. Также к функциям высшего порядка относятся декораторы.

✔️ Ответ на ❤️вопрос

В Python оператор yield используется для создания функции-генератора. Это особая функция, которая возвращает объект-генератор.

Генератор — это итератор, который c помощью оператора yield "выдает" значения по одному за раз. С каждым новым обращением к элементам генератора выполнение генератора продолжается с того места, где оно было приостановлено.

В приведенном ниже коде:

def generate_ints(n):
for num in range(n):
yield num

generator = generate_ints(3)

print(type(generator)) # <class 'generator'>
print(next(generator)) # 0
print(next(generator)) # 1
print(next(generator)) # 2


функция generate_ints() возвращает генератор, который порождает c помощью оператора yield последовательность целых чисел от 0 до n (не включительно). С каждым новым вызовом функции next() переданный ей генератор "выдает" следующее число из последовательности и "запоминает" элемент, на котором остановилось выполнение. Когда числа в последовательности заканчиваются, генератор возбуждает исключение StopIteration в соответствии с протоколом итератора.

📌 Помните, умение проходить собеседование — это тоже навык, и ему можно научиться! 😉

Ставьте реакцию:

❤️ — если знали ответы на оба вопроса
👀 — если хотя бы один из вопросов поставил в тупик 😵‍💫

#поколениеpython #собеседования

Поколение Python 🐍

16 Jan, 06:39


Друзья, а вы знали, что за покупку курсов "Поколения Python" можно получить налоговый вычет? 😮

⚠️ Налоговый вычет — это возвращение государством части ваших налогов, когда вы потратили деньги на покупку жилья, лечение или образование.

Есть два варианта получения налогового вычета по расходам на обучение:

💫 через налоговую
💫 через вашего работодателя

☝️☝️☝️☝️ Памятка с алгоритмом получения налогового вычета по обоим вариантам доступна по ссылке.

⚡️ Налоговый вычет можно получить, только если вы купили курс после 22 марта 2024 года. ⚡️

Ставьте реакцию:

🔥 — если уже получали налоговый вычет
👀 — если впервые узнали о такой возможности

#поколениеpython #налоговыйвычет

Поколение Python 🐍

15 Jan, 09:47


Друзья, сегодня поговорим о временно́й сложности операций со строками (тип str) в Python.

📎 Тип данных str представляет собой неизменяемую последовательность символов. Большинство операций со строками требует просмотра каждого символа строки, поэтому временнáя сложность практически всех строковых операций равна O(n), где n — длина строки. Исключением является операция обращения к символу строки по индексу, временнáя сложность которой равна O(1).

📎 Особого внимания заслуживают операции конкатенации и поиска подстроки в строке. Рассмотрим их подробно.

🟪 Конкатенация двух строк, выполняемая в виде операции s1 + s2 или s1 += s2, имеет временну́ю сложность O(n+m), где n — длина строки s1, а m — длина строки s2. Как видно, эта операция является ресурсоемкой, поэтому использовать ее нужно аккуратно.

Например, приведенный ниже алгоритм:
def algorithm(n):
result = ''
for _ in range(n):
result += 'A'
return result

выполняет конкатенацию двух строк в цикле, что приводит к постоянному созданию промежуточных строковых значений и увеличению временно́й сложности алгоритма до O(n²).

Более эффективную конкатенацию можно выполнить с помощью строкового метода join(). Преимущество такого способа в том, что метод join() во время объединения строк не создает промежуточных значений.

Например, в приведенном ниже алгоритме:
def algorithm(n):
result = []
for _ in range(n):
result.append('A')
return ''.join(result)

метод join() единожды создает строку нужной длины, поэтому временнáя сложность операции равна всего O(n).

🟪 Поиск подстроки в строке осуществляется с помощью оператора in и методов find(), rfind(), index(), rindex(), count(), replace(). Каждый из этих инструментов с версии Python 3.10 для поиска подстроки в строке использует алгоритм, который является комбинацией из трех алгоритмов:

алгоритма Бойера – Мура
алгоритма Бойера – Мура – Хорспула
алгоритма Сандея

В худшем случае этот алгоритм имеет временну́ю сложность O(n+m), а в среднем — O(n), где n — длина строки, а m — длина подстроки. На практике худший случай достигается редко, поэтому временну́ю сложность операции поиска подстроки в строке с помощью перечисленных выше инструментов принято считать равной O(n).

Выход нашего нового курса по алгоритмам запланирован на 1 апреля. Вы можете купить его до официального старта со скидкой 20% и получить приятные бонусы. Подробности по ссылке!

Ставьте реакцию:

🔥 — если знали временну́ю сложность операций со строками
👀 — если узнали о ней впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

14 Jan, 11:39


Друзья, а вот и новые вопросы с собеседований! 😉

Сегодня предлагаем подумать над следующими вопросами по Python:

❤️Что такое функции высшего порядка? Приведите примеры встроенных в Python функций высшего порядка.

❤️ Для чего используется оператор yield?

🟢Делитесь в комментариях своими ответами на вопросы! 😍

Ставьте реакцию:

😎 — если были на собеседованиях в прошлом году
🫡 — если включили это в план на 2025-й год

#поколениеpython #собеседования

Поколение Python 🐍

14 Jan, 06:25


Друзья, продолжаем разбирать полезную лексику английского языка для программистов! 🇬🇧

Сегодня на повестке дня геометрия. 😍 📐

Point – точка
Line segment – отрезок прямой линии
Ray – луч
Straight line – прямая линия
Plain shape – простая форма / геометрическая фигура
Solid shape – геометрическое тело
Right angle – прямой угол
Obtuse angle – тупой угол
Acute angle – острый угол
Vertical line – вертикальная линия
Horizontal line – горизонтальная линия
Parallel lines – параллельные линии
Perpendicular lines – перпендикулярные линии
Diameter – диаметр
Radius – радиус
Vertex – вершина
Edge – грань
Base – основа

Ставьте реакцию:

🔥 — если знали все слова
👀 — если узнали что-то новое

#английскийдляпрограммистов

Поколение Python 🐍

13 Jan, 12:12


Друзья, вы наверняка слышали, что лень — важное качество программиста. Так вот, сегодня решаем задачку для ленивых! 🦥

У нас есть 4 выражения, которые обозначают следующее:

🗜— количество часов в году
🎭— количество секунд в дне
🔧— количество дней в десятилетии
🚿— количество минут в неделе

Сможете ли определить, какое из выражений даст самый большой результат, не совершая сами вычисления? 😳

Свои ответы и ход рассуждений пишите в комментариях, не забывая прятать их под скрытым текстом.

Ставьте реакцию:

🔥 — если легко справились с задачей
👀 — если пришлось поломать голову

#задача

Поколение Python 🐍

13 Jan, 06:46


Друзья, возвращаемся к вам с новым словом недели! Сегодня поговорим об асинхронности. 😵‍💫

📌 Асинхронное программирование позволяет выполнять операции, не блокируя выполнение основной программы. Это полезно в сценариях, где необходимо ожидать завершения длительных операций, таких как сетевые запросы и операции ввода-вывода. Вместо того чтобы ожидать завершения этих операций, программа может продолжать выполнять другие задачи.

📎 Python для реализации асинхронности предоставляет встроенный модуль asyncio. Он используется в качестве основы для множества асинхронных фреймворков Python.

📌 Основным инструментом создания асинхронного кода в Python являются асинхронные функции, называемые также сопрограммами или корутинами.

📎 Для создания сопрограмм используется ключевое слово async, которое указывается в определении функции перед ключевым словом def. Для управления сопрограммами используется ключевое слово await, которое указывается в блоке кода сопрограммы перед вызовом другой сопрограммы. Выполнение текущей сопрограммы приостанавливается в ожидании результата сопрограммы, указанной после await.

Приведем базовый пример асинхронного кода:
async def process():
result = await func()
return result


📌 Несмотря на пользу асинхронного программирования, у него есть и недостатки. Основной из них — сложность кода: асинхронный код может быть сложнее для понимания и отладки из-за его нелинейной природы.

Почитать подробнее об асинхронном программировании в Python можно по ссылке.

Ставьте реакцию:

🔥 — если знали, что такое асинхронность
👀 — если слышите этот термин впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

12 Jan, 09:29


Друзья, раскрываем карты и подводим итоги конкурса "Угадай по эмодзи"! 😝

Мы предложили подписчикам угадать по эмодзи, чем занимались участники команды "Поколения Python" до того, как попали в команду.

🤩 🤩🤩🤩 🤩
🤩🤩🤩🤩🤩🤩🤩🤩🤩🤩🤩

🎁 Точнее и быстрее всех ответила @bellagro. Она получает 6 месяцев подписки на Telegram-премиум.

😉 А вы кем работаете или работали до того, как вошли в ИТ? Расскажите в комментариях! 🤩

Ставьте реакцию:

😎 — если работаете по специальности
😭 — если диплом пока не пригодился

#конкурс #поколениеpython

Поколение Python 🐍

10 Jan, 14:23


Друзья, всем нам нелегко втягиваться в будни после долгих праздников. 😌

Расскажите, как проходят ваши первые рабочие дни, с помощью мемов.

😄 Мы начнем!

Пишите в комментариях, где вы находитесь по шкале от котика-хинкаля до Роберта Паттинсона? 😁

Ставьте реакцию:

🔥 — если хорошо отдохнули и набрались сил
👀 — если после таких выходных нужны еще выходные

#поколениеpython

Поколение Python 🐍

10 Jan, 06:17


Друзья, сегодня поговорим о типах ошибок, с которыми сталкиваются программисты при написании программ. 😳

❤️ При разработке программ на любом языке программирования практически всегда возникают различные ошибки. В Python выделяют следующие их типы:

Синтаксические ошибки возникают из-за несоблюдения общепринятого синтаксиса языка.

В приведенном ниже коде:

def square(num)
return num ** 2


пропущено двоеточие в определении функции. При попытке запуска данного кода мы получим синтаксическую ошибку: SyntaxError: expected ':'

Логические ошибки выявлять сложнее, поскольку их не отлавливает интерпретатор. Обычно они вызваны недостатком в логике программы, из-за чего результат ее работы отличается от желаемого.

В приведенном ниже коде:

def avg(a, b):
return a + b / 2

print(avg(6, 14)) # 13.0 - неверный результат


описана функция avg(), возвращающая среднее значение переданных в нее аргументов. В теле функции допущена логическая ошибка — пропущены скобки, на два необходимо делить сумму чисел a и b.

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

Ошибки времени выполнения (исключения) возникают в процессе выполнения программы и связаны с некорректными действиями пользователя или системы.

Приведенный ниже код:

num1 = 10
num2 = 0

print(num1 / num2)


выводит: ZeroDivisionError: division by zero

Деление на ноль приводит к аварийному завершению работы программы и выводу ошибки. ZeroDivisionError — это название исключения, а division by zero — его краткое описание.

Ставьте реакцию:

😎 — если редко допускаете ошибки
🫡 — если ошибки — наше всё! 😄

❤️Делитесь в комментариях, с каким типом ошибок при написании программ вы сталкиваетесь чаще всего?

#python #полезныйматериал

Поколение Python 🐍

09 Jan, 09:47


Друзья, мы к вам с хорошими новостями и с подарком! 😎

🦸‍♂️ Недавно мы получили 1000-й заказ в онлайн-магазине мерча "Поколения". Мы очень благодарны за то, что вы поддержали это наше начинание и активно покупаете мерч!

🙊 Но ведь известно, что по-настоящему круглое число для программистов — это 1024 = 2¹⁰. Как это вышло?

🤔 Приставка "кило" означает 10 в третьей степени: 1 килограмм = 1000 граммов. Но 1 килобайт = 1024 байта. Нелогично? А вот и нет!

💡 В информатике используется двоичная система счисления, состоящая из нулей и единиц. Минимальная единица хранения информации — это бит, который имеет 2 возможных значения. Так намного проще для машины: есть сигнал — 1, нет сигнала — 0.

🌱 Чтобы обозначить большое количество информации, к слову "байт" добавили традиционные приставки системы СИ: кило-, мега- и так далее. Но с учетом особенностей двоичной системы счисления значения этих единиц информации взяли за ближайшие степени двойки. Самая близкая к 1000 степень числа 2 — десятая, она равняется 1024. Поэтому 1 килобайт = 1024 байт, примерно в 1000 раз больше, чем байт.

😉 Кстати, именно поэтому у флешек и карт памяти такие некруглые объемы: 2, 4, 8, 16, 32, 64 гигабайта и так далее. Это тоже степени двойки.

🚨🚨⚠️🚨☝️ Мы решили сделать подарок тому, кто совершит 1024-й заказ в нашем онлайн-магазине! Делайте любую покупку в нашем онлайн-магазине. В заказ, который окажется 1024-м, мы положим большой сюрприз для программиста. 🎰

Ставьте реакцию:

🔥 — если знали, почему килобайт равен 1024 байтам
👀 — если узнали об этом впервые

#мерч #поколениеpython

Поколение Python 🐍

08 Jan, 10:14


Друзья, пока все отдыхают, мы принесли вам конкурс-угадайку! 😎

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

В посте загаданы профессии Тимура, Светы, Валеры, Насти и Артура старшего.

😊☎️📞👮🏻‍♂️😩🧟🫡🚓🧟🙌🏿⛓️#️⃣🗝🕺🏻

😊📝😡✍️😌

😊😷🥼💊📝📦🚚💰💰💰😱

😊🏢🙎‍♂️➡️👷‍♂️🔧🔨🗜🔩🔩🔩⚙️⚙️⚙️📝👷‍♂️➡️🙎‍♂️🏠

😊🤓🔢💻➡️👧🧒📈

⤵️ Пишите ваши догадки в комментариях, не забывая прятать их под скрытым текстом!

☝️☝️☝️☝️ Нужно не просто угадать профессии, но и сопоставить их с участниками команды.

😌 Учитывается только первое сообщение
😡 Редактировать сообщения нельзя

Автор самого быстрого и самого правильного ответа получит приз — 6 месяцев подписки на телеграм-премиум! 🎁

Ставьте реакцию:

😎 — если считаете себя удачливым
😭 — если вам обычно не везет в конкурсах

#конкурс #поколениеpython

Поколение Python 🐍

06 Jan, 11:56


Друзья, вот и наступил 2025 год! 🎉 Что мы знаем о нем?

🌲 2025 год — это 5-й год 3-го десятилетия XXI века 3-го тысячелетия и 6-й год 2020-х годов 😵‍💫

🌲 2025 год — невисокосный. В григорианском и юлианском календарях невисокосный год из 365 дней имеет 52 недели и один день, поэтому каждый невисокосный год начинается и заканчивается в один и тот же день недели. В невисокосный год в феврале ровно четыре недели, поэтому март и ноябрь начинаются в тот же день недели

🌲 2025 год — год Зеленой Деревянной Змеи по восточному календарю 🐍

А еще в 2025 году 14 октября должна прекратиться поддержка Windows 10 — последней версии операционной системы Windows, поддерживающей 32-разрядные процессоры. На смену ей 5 октября 2021 года пришла Windows 11, которой требуется 64-разрядный процессор в любой поддерживаемой архитектуре. 😎

⤵️⤵️⤵️ А какие важные для вас события принесет 2025 год? Делитесь в комментариях! 😍

Ставьте реакцию:

🔥 — если уже выходили из дома после НГ
👀 — если доставка работает, зачем до конца праздников выбираться 😄

#поколениеpython

Поколение Python 🐍

02 Jan, 11:17


Друзья, собрали для вас дайджест публикаций “Поколения” за декабрь. Будет что почитать (и порешать), доедая прошлогодние салаты!

🤯 ЗАДАЧИ

🔴Адвент-челлендж для программистов. 25 задач на логику, математику и код
🔴Вопросы с собеседований 1. PEP 8, отрицательные индексы списка и анонимные функции
🔴Ответы на вопросы с собеседований 1
⚪️Вопросы с собеседований 2. Интернирование объектов, docstring, магические методы
🔴Ответы на вопросы с собеседований 2
🔴Вопросы с собеседований 3. Пространства имен, блок else в конструкции try/except/else, атрибут slots
🔴Ответы на вопросы с собеседований 3

🛠 ПОЛЕЗНЫЕ МАТЕРИАЛЫ

🔴Слово недели. Композиция
🔴Асимптотическая временная сложность некоторых встроенных в Python функций
🔴Аннотации типов в Python
⚪️Слово недели. Конкатенация
🔴Временная сложность функций min(), max() и pow()
🔴Слово недели. Массив
⚪️Пять способов обмена переменных в Python
🔴Слово недели. Многопоточность
🔴Временная сложность операций со списками (тип list) в Python

🧠 ПОЗНАВАТЕЛЬНЫЕ ПОСТЫ

🔴Английский для программистов. Геометрические тела
🔴Подходы к программированию. Lean Software Development

🙂 НОВОСТИ “ПОКОЛЕНИЯ”

🔴Итоги года от “Поколения Python”
🔴Запустили контент за “звезды”
🔴Новогодние дизайны мерча для программистов
⚪️Стрим Тимура Гуева про курс по алгоритмам
🔴Началась предпродажа курса по алгоритмам 🔥
🔴Мерч “Поколения” на Озон
🔴Обновление курса “Поколение Python: SQL и базы данных”
⚪️Итоги адвент-челленджа

Ставьте ❤️ и сохраняйте пост в избранное, чтобы ничего не пропустить!

#дайджест #декабрь

Поколение Python 🐍

30 Dec, 12:05


Друзья, важные новости: скоро станет недоступна регистрация и авторизация на Stepik с помощью аккаунтов Google, GitHub и других зарубежных сервисов*. 😶

☝️☝️☝️☝️ Это касается только входа через иностранные платформы. Вашу почту на Gmail по-прежнему можно использовать для входа на сайт в качестве логина.

⚠️ Как не потерять доступ к Stepik:

1️⃣ Проверьте, что в вашем аккаунте на Stepik указан действующий почтовый адрес и что он подтвержден

2️⃣ При необходимости добавьте новый адрес и сделайте его основным

3️⃣ Отключите авторизацию через иностранный сервис во вкладке "Вход через социальные сети"

*️⃣Подробнее читайте в статье на Stepik.

Ставьте реакцию:

🔥 — если везде регистрируетесь с логином и паролем
👀 — если часто пользуетесь авторизацией через Google

#stepik #поколениеpython

Поколение Python 🐍

30 Dec, 08:43


Друзья, мы решили подвести итоги проделанной за этот год работы и поделиться ими с вами! 😘

💫💫💫💫💫

🔘набрали 1 000 000 студентов 😮
🔘получили 30 000 отзывов к курсам
🔘сделали большую часть курса по алгоритмам и запустили предпродажу
🔘улучшили курсы по ООП и SQL, курс для начинающих: добавили уроки и задачи, улучшили теорию

💫💫💫💫

🔘вышли на Озон
🔘добавили одежду и другие позиции в онлайн-магазин
🔘набрали более 1000 заказов через наш официальный сайт

💫💫💫💫💫💫💫💫

🔘сделали более 700 постов
🔘приблизились к цифре 40 000 подписчиков
🔘получили поддержку более 300 бустеров
🔘собрали больше 4000 "звезд"

💫💫💫💫💫💫💫💫💫💫

🔘Квест на миллион
🔘Адвент-челлендж

Спасибо за ваше стремление к знаниям, любопытство, упорство и за то, что остаетесь вместе с нами! Давайте достигать новых результатов в новом году. ❤️

Ставьте реакцию:

🔥 — если уже подвели личные итоги года
👀 — если пока руки не дошли

#поколениеpython #дайджестгода

Поколение Python 🐍

29 Dec, 10:14


Друзья, мы наконец подводим итоги адвент-челленджа для программистов! 😍

🔠🔠🔠 🔠🔠🔠 🔠🔠🔠🔠

▶️ 25 задач
▶️ 27 дней
▶️ более 1100 участников
▶️ и только три победителя!

Победителями адвент-челленджа для программистов стали:

Александра Никитина — самый быстрый решатель
Stepan Guevorkian — самый удачливый решатель
Дмитрий Андреевич Новиков — самый безошибочный решатель

📸 Все победители получат новогодний подарочный набор мерча от "Поколения Python".

☝️☝️☝️☝️ Для получения призов напишите нам на почту [email protected] или в телеграм техподдержки.

🔥🔥🔥🔥 Друзья, мы вложили много ресурсов в создание адвента и очень рады видеть обратную связь в комментариях к задачам! А чтобы еще больше людей узнали о курсе с марафонами и конкурсами, оставьте отзыв по ссылке.

🚨🚨⚠️🚨☝️ Разборы задач адвент-челленджа можно посмотреть по ссылке.

Ставьте реакцию:

🔥 — если хочется поскорее новый челлендж или марафон
😎 — если нужно передохнуть после адвента

#поколениеpython #итадвент2024

Поколение Python 🐍

28 Dec, 09:04


Друзья! Мы подводим итоги года и хотим рассказать вам, как обстоят дела у нашего последнего вышедшего на данный момент курса — "Поколение Python: SQL и базы данных". 😎

Курс вышел год назад, в декабре 2023 года. Он до сих пор остается самым большим курсом по SQL на Stepik и содержит почти 500 задач на написание запросов. 😮

За год курс набрал более 2600 студентов и получил среднюю оценку ⭐️⭐️⭐️⭐️⭐️ на основании 244 отзывов! 😵‍💫

Что добавилось в курсе за год:

🔘модуль по оконным функциям
🔘модуль по регулярным выражениям
🔘урок по индексам
🔘устное собеседование
🔘дополнены и расширены уроки по представлениям и триггерам
🔘улучшено множество небольших, но очень важных моментов

Спасибо нашим студентам, которые писали в комментариях о необходимости освещения дополнительных тем! 😍

В связи с этим у нас есть три новости:

🦆 Интересная новость

Курс по SQL больше не называется курсом для начинающих. Благодаря расширению курса и вашим отзывам мы пришли к выводу, что наш курс уже охватывает большинство основных возможностей SQL.

🦆 Грустная новость

Курса по SQL для продвинутых не будет. Это связано не только с объемом материала в уже выпущенном курсе, но и с тем, что возможности платформы Stepik ограничены.

🦆 Хорошая новость

В дальней перспективе мы размышляем над курсом по SQL в связке с Python. Если вам это интересно, дайте знать в комментариях!

До конца года на курсы для профессионалов, ООП и SQL действует скидка 🚩🚩🚩 при покупке через официальный сайт "Поколения". Успевайте ей воспользоваться и сделать полезный новогодний подарок себе или близким!

Ставьте реакцию:


❤️ — если уже прошли курс по SQL
🔥 — если проходите курс по SQL
😎 — если еще размышляете, стоит ли его проходить

#курспоsql

Поколение Python 🐍

27 Dec, 14:26


Друзья, до Нового года остались считанные дни! Продолжаем создавать праздничную атмосферу. 😍

❤️Делитесь в комментариях фотографиями своих наряженных елочек. 🎄 Посмотрим, у кого елка самая крутая! 😆

Ставьте реакцию:

❤️— если полностью готовы к Новому году 😎
👀 — если еще в процессе подготовки

#поколениеpython

Поколение Python 🐍

27 Dec, 06:56


Друзья, разбираем вопросы с собеседований! 😄

✔️ Ответ на 1⃣вопрос:

Пространство имен — это набор объявленных в программе переменных. В Python существуют 4 пространства имен:

встроенное — Built-In
глобальное — Global
нелокальное (объемлющее) — Enclosing
локальное — Local

Python создает пространства имен по мере необходимости и удаляет их, когда они больше не нужны. При этом в любой момент времени в программе может существовать множество пространств имен.

✔️ Ответ на 2⃣вопрос:

В конструкции try/except/else, предназначенной для обработки исключений, блок else является необязательным. Он выполняется только в том случае, если в блоке try не было возбуждено исключений.

Приведенный ниже код:

try:
result = 10 / 2
except ZeroDivisionError:
print('Ошибка! На 0 делить нельзя.')
else:
print('Ошибки не произошло!')


выводит Ошибки не произошло!

✔️ Ответ на 3⃣ вопрос:

По умолчанию Python использует словарь для управления атрибутами экземпляра класса. Словарь позволяет добавлять экземпляру дополнительные атрибуты, однако это влечет расход памяти, если экземпляров класса оказывается много. Если экземпляры некоторого класса содержат фиксированный (определенный заранее) набор атрибутов, то для оптимизации потребления памяти можно использовать слоты.

Слоты — это компактная структура данных (на практике обычно используют кортеж), содержащая имена атрибутов, которыми может обладать экземпляр класса. Для создания слотов используется атрибут класса __slots__.

Например, если экземпляры класса Point, описывающего точку на плоскости, всегда содержат только два атрибута — координаты точки по осям x и y, то мы можем указать данные атрибуты в слотах следующим образом:

class Point:
__slots__ = ('x', 'y')

def __init__(self, x, y):
self.x = x
self.y = y


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

📌 Помните, умение проходить собеседование — это тоже навык, и ему можно научиться! 😉

Ставьте реакцию:

😎 — если знали ответы на все вопросы
👀 — если знали ответы лишь на некоторые из них

⤵️Пишите в комментариях, какой из вопросов показался вам наиболее сложным? 😵‍💫

#поколениеpython #собеседования

Поколение Python 🐍

26 Dec, 07:48


Друзья, вот и он — старт предпродаж нового курса по алгоритмам! 🤩

Курс по алгоритмам и структурам данных для начинающих выйдет на платформе Stepik 1 апреля 2025 года. 🚀

☝️☝️☝️☝️ Уже сейчас самые преданные студенты "Поколения" могут купить курс по алгоритмам на нашем официальном сайте и получить ряд приятных и полезных бонусов!

Бонусы при покупке курса на предпродаже:

🤑 Скидка 20%
♥️ Благодарность за поддержку от команды "Поколения"
🎦 Доступ к закрытой онлайн-презентации курса
📖 Методичка с конспектами теоретических материалов курса
📚 Библиотека книг и ресурсов по алгоритмам
🎁 Доступ к крутому квесту с возможностью выиграть ценные призы

🐾🐾🐾🐾🐾🐾🐾 Купить курс можно на нашем официальном сайте по ссылке.

🚨🚨⚠️🚨☝️ Скидка 20% и другие бонусы доступны только на этапе предпродажи. После запуска курса получить их будет нельзя.

Ставьте реакцию:

❤️ — если сразу побежали оформлять покупку
😎 — если еще проходите старые курсы

#курспоалгоритмам #поколениеpython

Поколение Python 🐍

25 Dec, 12:14


Друзья, сегодня поговорим о временно́й сложности операций со списками (тип list) в Python. 😄

📍 Рассмотрим временну́ю сложность наиболее часто используемых операций со списком длины n. ⬇️

🔘Обращение и запись по индексу: O(1)

При обращении или записи по индексу не требуется смещение элементов списка.

🔘Проверка на принадлежность: O(n)

При выполнении проверки на принадлежность с помощью оператора in в худшем случае необходимо просмотреть все элементы списка.

🔘Копирование: O(n)

При копировании списка необходимо создать новый список и перенести в него все элементы исходного списка.

🔘Вставка элемента в список: O(n)

При вставке элемента на i-ю позицию списка с помощью метода insert() необходимо сместить вправо все элементы, следующие за новым. В худшем случае (вставка в начало списка) потребуется смещение всех элементов.

🔘Добавление элемента в конец: O(1)

Метод append() добавляет новый элемент в конец списка. Данная операция не требует смещения элементов, однако некоторые вызовы метода append() могут иметь бо́льшую временну́ю сложность. Дело в том, что в Python в основе списков лежит массив фиксированной длины с определенным количеством дополнительных ячеек для новых элементов списка. Если при очередном добавлении нового элемента в список в соответствующем ему массиве нет места, Python создает для списка массив бóльшей длины и копирует в него все элементы из переполненного массива. Именно эти дополнительные операции увеличивают временну́ю сложность некоторых вызовов метода append().

🔘Расширение списка: O(k)

Метод extend() расширяет список элементами переданного итерируемого объекта длины k, добавляя их в конец списка. При этом смещение элементов списка не требуется.

🔘Удаление последнего элемента: O(1)

При удалении последнего элемента списка нет необходимости в смещении оставшихся элементов.

🔘Удаление не последнего элемента: O(n)

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

🔘Сортировка списка: O(nlogn)

В основе сортировки списка с помощью метода sort() и встроенной функции sorted() лежит гибридный алгоритм сортировки Timsort, имеющий линейно-логарифмическую временну́ю сложность.

Скоро выйдет наш новый курс по алгоритмам. Если курс вам интересен, оставьте заявку по ссылке, и вы первыми узнаете о его выходе!

Ставьте реакцию:

🔥 — если знали временну́ю сложность операций со списками
👀 — если узнали о ней впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

25 Dec, 06:18


Друзья, принесли вам новые вопросы с собеседований! 😎

Сегодня предлагаем порассуждать над следующими вопросами по Python:

1⃣Какие пространства имен существуют в Python?

2⃣В каком случае выполняется блок else в конструкции try/except/else?

3⃣Для чего в классе используется атрибут __slots__?

Делитесь в комментариях своими ответами на вопросы! 😍

Ставьте реакцию:


🧑‍💻 — если собеседования в IT сложные и страшные
🙈 — если проходили собеседования в других сферах, и там тоже жуть 😆

#поколениеpython #собеседования

Поколение Python 🐍

24 Dec, 07:54


Друзья, а вот и она — последняя распродажа уходящего года! 😍

🎁 Чтобы вам было легче врываться в новый год с новыми планами, даем скидку 🚩🚩🚩 на курсы для профессионалов, ООП и SQL.

Напоминаем важные подробности:

❄️ можно купить курс сейчас, а пройти — когда появится время
❄️ курсы можно дарить, это быстро и удобно
❄️ вложения в саморазвитие всегда окупаются 🔥

Спасибо за то, что учитесь и растете над собой вместе с нами! Мы будем рады вашим успехам в программировании в новом году! 🏆

💵💵💵💵 действует по промокоду НОВЫЙГОД при покупке курсов через наш официальный сайт. Промокод активен до конца года. 😉

Ставьте реакцию:

❤️ — если ждали последнюю распродажу
😎 — если уже купили все курсы

#распродажа #скидка #поколение #профи #ооп #sql

Поколение Python 🐍

23 Dec, 10:41


Друзья, а вот и новое слово недели! Сегодня поговорим о многопоточности. 😉

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

📌 Python по умолчанию использует один основной поток для выполнения программ, но позволяет создавать и несколько потоков. Для этого используется встроенный модуль threading.

Однако в Python многопоточная программа часто может выполняться дольше, чем аналогичная однопоточная. Дело в том, что Python для управления памятью использует механизм подсчета ссылок. В многопоточной программе сразу несколько потоков могут изменить значение счетчика ссылок одного объекта. Это может привести к неправильному освобождению памяти. Такая ситуация называется состоянием гонки.

Чтобы избежать состояния гонки, в Python был внедрен GIL — глобальная блокировка интерпретатора, гарантирующая выполнение одного потока в один момент времени. Из-за этих ограничений многопоточность в Python может оказаться неэффективной. 😭

Почитать подробнее о многопоточности можно по ссылке, о модуле threading — по ссылке.

Ставьте реакцию:

🔥 — если знали, что такое многопоточность
👀 — если слышите этот термин впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

23 Dec, 06:30


Обратный отсчет адвент-челленджа запущен! Осталось всего три задачи.

Решения задач адвента будут приниматься до 27 декабря включительно. 29 декабря опеределим победителей.

🔠🔠🔠🔠🔠🔠 2⃣🔠

Дед Мороз рассказывает Снегурочке:

— Поручил я снеговику Леше летом сосчитать, сколько волшебных деревьев растет в моем заповедном лесу. Но у него из-за теплой погоды мозги немного подтаяли (особенно та часть, что отвечает за систему счисления).

Снеговик Леша записал, что в заповедном лесу растет 88ₙ волшебных деревьев. Из них:

32ₙ ели
22ₙ сосны
16ₙ пихт
17ₙ кипарисов

В какой системе счисления снеговик Леша подсчитал деревья?

🦸‍♂️ Адвент-челлендж проходит на платформе Stepik в нашем специальном курсе с конкурсами и марафонами. Писать ответы в комментариях здесь или на Stepik нельзя. 😉

Ставьте реакцию:

🔥 — если решаете все задачи сразу
👀 — если сложное оставляете на потом

#итадвент2024

Поколение Python 🐍

22 Dec, 10:10


Друзья, подводим результаты розыгрыша для донов! 👏

🤩 Великий рандом выбрал победителем Ярослава!

Он получает:

🟢 суперполезную книжку "Карьера программиста" Гэйла Макдауэлла
🔘 набор мерча от "Лаборатории Касперского"

😘 Благодарим всех, кто задонатил к посту-розыгрышу:
Алексей, Сан Саныч, Николай, Александр, Николай Комяков, Максим, Максим Сергеевич, Денис, Игорь Ведревский, Алексей, Тимур, Evgen, Василина, Konstantin Zavarov, Ronis, Виктор, Ярослав, Петр, Павел Хошев, Владислав, Дмитрий, Иван, Марат, Андрей, Глеб, Степан. Мы видим и ценим каждую отправленную вами "звездочку"! ⭐️

☝️☝️☝️☝️ "Звездочки" не просто позволяют вам получить доступ к большему количеству контента. Они помогают "Поколению Python" делать рекламу в Telegram и привлекать еще больше студентов.

Ставьте реакцию:

😎 — если уже используете "звездочки"
👀 — если пока не пробовали эту функцию

#розыгрыш #поколениеpython #звездныйконтент

Поколение Python 🐍

21 Dec, 09:07


Друзья, мы на финишной прямой: осталось всего пять задач до конца адвент-челленджа! 😍

На всякий случай напоминаем правила адвента:

❄️ нельзя писать в комментариях ответы и решения задач (ни в Telegram, ни на Stepik)
❄️ можно обсуждать подходы к решению и ход ваших мыслей
❄️ решения задач принимаются до 27 декабря включительно

🔤🔤🔤🔤🔤🔤 2️⃣1️⃣

На конфетной фабрике Деда Мороза работают зайчики. Деду Морозу необходимо выяснить, в какое время все они одновременно отдыхают.

Информация о рабочем времени каждого зайчика хранится в виде отсортированного по возрастанию списка двухэлементных кортежей. Данные о рабочем времени всех зайчиков хранятся в списке plan.

Реализуйте функцию common_free_time(), которая принимает один аргумент:

*️⃣ plan – список, состоящий из отсортированных по возрастанию списков двухэлементных кортежей
(1 ≤ len(plan) ≤ 10⁴)

Функция должна возвращать список со всеми ненулевыми временными промежутками, в которые все зайчики на конфетной фабрике Деда Мороза отдыхают.

🦸‍♂️ Адвент-челлендж проходит на платформе Stepik в нашем специальном курсе с конкурсами и марафонами. Он ждет ваших ответов! А трех победителей адвента ждут призы от "Поколения". 😉

Ставьте реакцию:

🔥 если решение задач держит вас в тонусе
👀 если устали и просто ждете выходных

#итадвент2024

Поколение Python 🐍

20 Dec, 14:27


Друзья, скоро Новый год! 🎄 Давайте создадим праздничную атмосферу! 😍

❤️ Расскажите в комментариях, какой самый необычный подарок вы дарили на Новый год? 🎁

Ставьте реакцию:

❤️ — если уже купили подарки к Новому году
👀 — если будете бегать по ТЦ в панике 31 декабря 😃

P.S. Напоминаем, что лучший подарок программисту — это красивый и уютный мерч от "Поколения Python", который можно купить в нашем онлайн-магазине. 😏

#поколениеpython

Поколение Python 🐍

20 Dec, 06:47


Друзья, сегодня поговорим о пяти способах обмена значений переменных в Python. 😄

1⃣Третья переменная

Самый наивный способ поменять местами значения двух переменных — использовать третью переменную в качестве временного хранилища. Данный метод подходит для работы с любыми типами данных. Основной недостаток способа заключается в том, что для него требуется вспомогательная переменная, для которой выделяется дополнительная память.

2⃣Позиционное присваивание

В Python осуществить обмен значений переменных можно с помощью позиционного присваивания, которое является синтаксическим сахаром и позволяет избежать явного создания третьей переменной. Данный способ также подходит для любых типов данных.

3⃣Операторы + и -

Произвести обмен числовых значений переменных можно с помощью операций сложения и вычитания. Для этого нужно найти сумму значений и записать ее в одну из переменных. После этого переменным присваиваются новые значения, полученные путем последовательного вычитания из найденной суммы исходного и нового значения второй переменной.

4⃣Операторы * и /

Следующий способ обмена числовых значений переменных (кроме 0) заключается в нахождении произведения значений, которое записывается в одну из переменных. После этого переменным присваиваются новые значения, полученные путем последовательного деления найденного произведения на исходное и новое значение второй переменной. При этом важно помнить, что оператор деления / всегда возвращает вещественное число.

5⃣Побитовый оператор ^

Для обмена целочисленных значений переменных можно использовать побитовый оператор ^ (побитовое исключающее ИЛИ). Он оперирует битами чисел, сравнивая их двоичные представления и переворачивая отличающиеся биты в соответствии со своей таблицей истинности. Данный способ является эффективным, однако он может быть не совсем очевидным и сложным для чтения.

Ставьте реакцию:

🔥 — если знали все 5 способов
👀 — если слышите о некоторых впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал

Поколение Python 🐍

19 Dec, 12:13


Друзья, разберем вопросы с собеседований. 🙂

✔️ Ответ на 1️⃣вопрос:

Интернирование объектов — это процесс хранения в памяти определенных неизменяемых объектов в единственном экземпляре. Это означает, что при интернировании все переменные с одинаковым значением ссылаются на один и тот же объект в памяти. Данная оптимизация позволяет экономить память и ускорять операции сравнения, поскольку вместо сравнения содержимого объектов можно просто сравнивать их идентификаторы.

В Python объектами, поддерживающими интернирование, являются:

🟢целые числа от -5 до 256 включительно
🟢строки, содержащие не более 4096 символов и состоящие только из ASCII-букв, цифр и знаков подчеркивания (до Python 3.8 ограничение длины строки составляло 20 символов)

Приведенный ниже код:
s1 = 'a' * 4096
s2 = 'a' * 4096

s3 = 'a' * 5000
s4 = 'a' * 5000

print(s1 is s2, s3 is s4)

в Python 3.8 выводит True False.

✔️ Ответ на 2️⃣вопрос:

Docstring — это строка документации, представляющая собой строковый литерал, который расположен в теле функции сразу за ее объявлением. Для описания docstring обычно используют тройные кавычки (''' или """), в которых размещается соответствующая информация. Хранится строка документации в специальном атрибуте функций __doc__:

Приведенный ниже код:
def square(n):
'''Принимает число и возвращает его куб'''
return n**3

print(square.__doc__)

выводит Принимает число и возвращает его куб.

✔️ Ответ на 3️⃣ вопрос:

Магические методы — это специальные методы в классах Python, которые начинаются и заканчиваются двойными подчеркиваниями, например, __init__().

Магические методы определяют поведение экземпляров класса в ответ на какие-либо действия. При этом магические методы не предназначены для прямого вызова, их вызов происходит автоматически. Например, метод __init__() вызывается за кулисами при создании нового экземпляра класса. Все, что нам нужно сделать, это реализовать данный метод внутри класса должным образом.

Поскольку магические методы обрамляются двойными подчеркиваниями, их часто называют dunders, что означает Double Underscore.

📌 Помните, умение проходить собеседование — это тоже навык, и ему можно научиться! 😉

Ставьте реакцию:

😎 — если знали ответы на все вопросы
👀 — если знали ответы лишь на некоторые из них

⬇️Пишите в комментариях, какой из вопросов показался вам наиболее сложным? 😵‍💫

#поколениеpython #собеседования

Поколение Python 🐍

19 Dec, 07:19


Друзья, а вы знали, что мерч "Поколения" можно купить на Ozon? 😍

Главное преимущество покупок через маркетплейс — быстрая бесплатная доставка. Поэтому если вы хотите успеть получить подарки к Новому году, оформляйте заказы через Ozon!

Какой мерч "Поколения" доступен на Ozon:

⭐️ брелоки
⭐️ пины
⭐️ коврики для мыши
⭐️ обложки на паспорт
⭐️ картхолдеры

Также в наличии осталось несколько блокнотов и тетрадей. Успевайте их купить, в дальнейшем эти виды товаров будут доступны только на сайте магазина "Поколения". 😉

🛍 Успевайте влететь в последний вагон предновогоднего шопинга и заказать мерч на Ozon!

При покупке мерча через наш сайт на сумму от 3 тысяч рублей до 20 декабря положим в подарок: носочки, блокнот, ежедневник, коврик для мышки, обложку на паспорт, картхолдер, стикеры, пин. 👩‍❤️‍👨

Ставьте реакцию:

🔥 — если вы за маркетплейсы и бесплатную доставку
❤️ — если предпочитаете онлайн-магазин и подарочки в посылках

#мерч #поколениеpython

Поколение Python 🐍

18 Dec, 07:37


Друзья, кратко пересказываем содержание вчерашнего стрима! 😎

📆 Старт курса — 1 апреля 2025 года

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

🍩 Плюшки при покупке на предпродаже:

🔘 скидка 20%
🔘 закрытая онлайн-презентация курса
🔘 методичка с текстовыми конспектами курса
🔘 библиотека книг и ресурсов по алгоритмам
🔘 доступ к крутому квесту с возможностью выиграть ценные призы

🤯 В курсе будет 1500+ тестов и 1000+ задач на написание кода.

📚 Темы курса:

🔘 Функции, многочлены, ФСУ и логарифмы
🔘 Понятие и анализ алгоритмов
🔘 Алгоритмы поиска
🔘 Алгоритмы сортировки
🔘 Методы оптимизации решения задач
🔘 Задачи на обработку матриц
🔘 Системы счисления
🔘 Математические алгоритмы
🔘 Структуры данных
🔘 Алгоритмические собеседования (x3)

💸 На этапе предпродаж действует только скидка 20%. Остальные скидки (для студентов, для учителей и так далее) будут действовать после старта курса 1 апреля 2025 года.

☝️☝️☝️☝️ Пишите в комментариях, остались ли у вас вопросы после стрима и этого поста!

Ставьте реакцию:

🔥 — если shut up and take my money
🤔 если пока не уверены, нужны ли вам алгоритмы

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

17 Dec, 15:59


Live stream scheduled for

Поколение Python 🐍

17 Dec, 09:28


Друзья, продолжаем рубрику "Вопросы с собеседований"! 😎

Сегодня предлагаем поразмышлять над следующими вопросами по Python:

1️⃣ Что такое интернирование объектов?

2️⃣ Что такое docstring?

3️⃣ Что такое магические методы?

Ставьте реакцию:

🔥 — если уверенно чувствуете себя на собесах
👀 — если только учитесь их проходить

⤵️ Делитесь в комментариях своими ответами на вопросы! 😍

#поколениеpython #собеседования

Поколение Python 🐍

16 Dec, 11:40


Друзья, продолжаем рубрику "Слово недели". Сегодня поговорим о массивах.

🟪 Массивы являются фундаментальной структурой данных в информатике. Они представляют собой последовательность ячеек памяти, расположенных друг за другом и содержащих элементы одного типа данных. При этом последовательность имеет фиксированную длину, а ячейки в ней пронумерованы индексами (начиная с 0), по которым осуществляется доступ к элементам массива.

📎 Среди встроенных в Python объектов массивов нет, однако Python предоставляет модуль array для работы с ними. Он включает одноименный тип array, представляющий собой массивы языка С.

🟪 Массивы (тип array) похожи на списки (тип list), однако они имеют структурные отличия. Списки за кулисами представлены массивами ссылок на элементы, которые могут быть расположены в разных областях памяти. Массивы, напротив, хранят непосредственно значения объектов, располагаясь в памяти непрерывным блоком. Такое строение позволяет легко и быстро обращаться к элементам массива.

Таким образом, массивы можно рассматривать как более эффективную замену спискам.

📎Почитать подробнее о типе array в Python можно по ссылке.

Ставьте реакцию:

🔥 — если знали, что такое массив
👀 — если слышите этот термин впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

16 Dec, 06:45


Ого, половина декабря позади! 😮 Пришло время рассказать, как будут подводиться итоги адвент-челленджа.

Решения задач адвента будут приниматься до 27 декабря включительно.

29 декабря определим трех победителей:

❄️ самый быстрый решатель — тот, кто первым отправит правильное решение последней задачи
❄️ самый удачливый решатель — выберем рандомом из тех, кто решил все задачи адвента
❄️ самый безошибочный решатель — с наименьшим количеством попыток решения

🚀 А теперь время решать задачу! 🚀

🔤🔤🔤🔤🔤🔤 1️⃣6️⃣

Снегурочка чертит цепочку из правильных пятиугольников на рулоне серебристой бумаги, как показано на картинке. Периметр каждого пятиугольника — 5 сантиметров. Снегурочке поручили нарисовать 2024 пятиугольника.

Каким будет периметр получившейся фигуры, представляющей собой цепочку пятиугольников? 😵‍💫

🦸‍♂️ Адвент-челлендж проходит на платформе Stepik в нашем специальном курсе с конкурсами и марафонами. Писать ответы в комментариях здесь или на Stepik нельзя. 😉

Ставьте реакцию:

🔥 если решение задач держит вас в тонусе
👀 если устали и просто ждете праздничных выходных

#итадвент2024

Поколение Python 🐍

14 Dec, 08:55


Друзья, сегодня в нашем адвент-челлендже для программистов задача на код! 😍

Напоминаем правила адвента:

❄️ нельзя писать в комментариях ответы и решения задач
❄️ можно обсуждать подходы к решению и ход ваших мыслей

🔤🔤🔤🔤🔤🔤 1️⃣4️⃣

Эльза попросила Снегурочку помочь ей с домашкой по информатике. Как хорошая подруга, Снегурочка, конечно, согласилась.

Реализуйте функцию optimal_value(), которая принимает один аргумент:

nums – список положительных целых чисел (1 ≤ len(nums) ≤ 10⁵)

Функция должна находить такое число x, чтобы сумма квадратов разности каждого элемента списка nums и числа x:

(nums[0] - x)**2 + (nums[1] - x)**2 + (nums[2] - x)**2 + (nums[3] - x)**2 + ...


была минимально возможной.

Возвращаемое значение функции – найденное число x.

😎 Адвент-челлендж проходит на платформе Stepik в нашем специальном курсе с конкурсами и марафонами. Он ждет ваших ответов.

Ставьте реакцию:

🔥 если хочется больше задач на код
👀 если предпочитаете логические задачи

#итадвент2024

Поколение Python 🐍

13 Dec, 14:56


Друзья, сегодня пятница, 13 декабря! 😨 Ходят слухи, что в такие дни стоит ждать подвохов и неприятностей. 😈

В разных странах считают, что в пятницу тринадцатого нельзя отправляться в дальнюю дорогу, устраиваться на работу, заключать сделки, заниматься садоводством, играть свадьбы и так далее — список можно продолжать бесконечно. 🐈‍⬛

Напишите в комментариях, какие приметы в вашей жизни сбывались! Будем обсуждать, лайкать и пугаться потусторонних сил, влияющих на нашу жизнь. 👻

Ставьте реакцию:

🔥 — если верите в приметы
👀 — если относитесь к приметам скептически

#поколениеpython #пятница13

Поколение Python 🐍

09 Dec, 11:09


Друзья, возвращаемся к вам с новым словом недели! Сегодня поговорим о конкатенации. 😄

📌 Конкатенация строк является фундаментальной операцией в программировании, которая позволяет создавать новые строки из существующих.

🟪 В Python конкатенацию строк можно выполнить двумя способами:

1️⃣ С помощью оператора +

Приведенный ниже код:
print('bee' + 'geek')

выводит beegeek.

2️⃣ С помощью строкового метода join()

Приведенный ниже код:
print(''.join(['bee', 'geek']))

выводит beegeek.

‼️‼️‼️❗️ При выборе способа конкатенации необходимо учитывать их производительность.

Использование оператора + для конкатенации строк является простым и интуитивно понятным способом. Однако он может быть неэффективным при большом количестве объединяемых строк, поскольку для каждой промежуточной строки выделяется новая память.

Метод join() проходит по списку строк только один раз и вместо создания множества промежуточных строк выделяет память только для финальной строки. Таким образом, метод join() является более эффективным способом конкатенации строк, и в большинстве случаев рекомендуется использовать именно его.

Ставьте реакцию:

😎 — если знали, что такое конкатенация
👀 — если слышите этот термин впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

09 Dec, 06:32


Друзья, мы не успели обернуться, а первая неделя адвент-челленджа для программистов уже завершилась. 😁

Принесли вам очередную задачку. Но сначала напоминаем правила адвента:

❄️ нельзя писать в комментариях ответы и решения задач
❄️ можно обсуждать подходы к решению и ход ваших мыслей

🔠🔠🔠🔠🔠🔠 9⃣

В доме Деда Мороза переполох: Баба Яга перехватила поставку елочных игрушек для городских елок! Говорит, что не отдаст, пока не получит решение своей загадки. Вот она:

"Я шрпнрпк фб щрю, я нъьъщж фб пнр, л я Эщрояьъгцф ф эщроънфцл — ыъ ъпщъх. Ъ грш ьргз? Ъюнрюз ъпщфш эфшнъчъш".

Ну и  что тут решать, если даже текст не понять? Помогите Снегурочке разобраться и напишите ответ на загадку!

😎 Адвент-челлендж проходит на платформе Stepik в нашем специальном курсе с конкурсами и марафонами. Он ждет ваших ответов.

Ставьте реакцию:

🔥 если решили все задачи первой недели
👀 если не успеваете решать каждый день

#итадвент2024

Поколение Python 🐍

08 Dec, 08:55


Друзья, число подписчиков нашего канала подбирается к 40 000. 😮 Поэтому мы решили объявить конкурс!

Как принять участие

1️⃣убедиться, что вы подписаны на канал "Поколения"
2️⃣ написать в комментарии к этому посту день и время, когда канал наберет 40к подписчиков
3️⃣ убедиться, что вы поставили лайк этому посту

Когда канал достигнет отметки в 40к, мы отыщем человека, чье предсказание было самым точным. Победитель получит приз от команды "Поколения". 🎁

😎 Ответы принимаются до конца этого года
😌 Учитывается только первое сообщение
😡 Редактировать сообщения нельзя

Ставьте реакцию:

🔥 — если считаете себя удачливым
👀 — если вам обычно не везет в розыгрышах

#поколениеpython

Поколение Python 🐍

07 Dec, 12:03


Друзья, в рубрике про айтишный английский продолжаем разбираться с терминами из геометрии. Сегодня нас ждут геометрические тела! 📐

🟢 a cylinder — цилиндр
🟢 a cone — конус
🟢 a sphere — шар, сфера
🟢 a cube — куб
🟢 a tetrahedron — тетраэдр
🟢 a cuboid — параллелепипед
🟢 a triangular prism — треугольная призма
🟢 a pyramid — пирамида

Сохраняйте пост себе в избранное, чтобы все выучить. 😎

Cтавь реакцию:

🔥 — если все слова знакомы
👀 — если узнал что-то новое

#английскийдляпрограммистов

Поколение Python 🐍

06 Dec, 14:34


Друзья, давайте потренируемся общаться на нашем, айтишном языке. 😉

Расскажите в комментариях, как у вас дела на личном фронте, но так, чтобы поняли только настоящие программисты! 👨‍💻

Мы начнем: 404 Not Found. 😁

Ставьте реакцию:

🔥 — если часто используете профессиональный сленг
👀 — если не любите сложные слова

#поколениеpython

Поколение Python 🐍

06 Dec, 06:36


Друзья, сегодня поговорим об аннотациях типов в Python.

Python является языком программирования с динамической типизацией. Это означает, что в разных участках программы одна и та же переменная может принимать значения разных типов. При этом ошибки, связанные с неверными типами объектов, выявляются‌ во время‌ ‌выполнения кода. Поэтому такие ошибки важно обнаружить как можно раньше.

❤️Аннотации типов (Type Hints) — это специальный синтаксис для объявления типов различных структур в программе. Эта функциональность появилась в Python 3.5 и совершенствуется с каждой новой версией языка.

❤️Например, аннотации типов позволяют объявлять типы параметров функций и их возвращаемых значений.

В приведенном ниже коде:

def greet(name: str) -> str:
return f'Hello {name}!'


❤️запись name: str означает, что параметр name в определении функции принимает в качестве значения строку (тип str)
❤️запись -> str обозначает тип возвращаемого функцией значения

❤️Для аннотирования более сложных конструкций в Python используются инструменты из встроенного модуля typing.

❤️Аннотации типов игнорируются интерпретатором и никак не влияют на выполнение программы. Они используются для улучшения читаемости кода, а также для поиска ошибок типов до выполнения программы с помощью статических анализаторов (например, mypy).

❤️ Отметим, что аннотации типов не являются обязательными. Программист сам выбирает, аннотировать свой код или нет.

Почитать подробнее про аннотации типов можно в PEP 484 и PEP 526. Документация модуля typing доступна по ссылке.

Ставьте реакцию:

😎 — если знали, что такое аннотации типов
👀 — если слышите о них впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал #аннотациитипов #typehints

Поколение Python 🐍

04 Dec, 10:47


Друзья, на прошлой неделе мы говорили об асимптотической сложности алгоритмов. Сегодня рассмотрим асимптотическую временну́ю сложность некоторых встроенных в Python функций. 🙂

📍 Функция len() используется для вычисления длины коллекций — списка, строки, множества и других.

Временнáя сложность функции: O(1)

В Python длина коллекции хранится в отдельном атрибуте-счетчике. Он обновляется всякий раз, когда в коллекцию добавляется новый элемент или из коллекции удаляется имеющийся. При определении длины коллекции с помощью функции len() вместо прямого подсчета элементов происходит обращение к этому атрибуту. Именно поэтому временнáя сложность функции len() для встроенных коллекций является константной, а не линейной.

📍 Функция sum() используется для суммирования. Она принимает два аргумента:

iterable — итерируемый объект
start — начальное значение суммы, по умолчанию равняется 0

Функция возвращает сумму всех элементов объекта iterable с учетом начального значения start.

Временнáя сложность функции: O(n), где n — длина объекта iterable

📍 Функция sorted() используется для сортировки. Она принимает три аргумента:

iterable — итерируемый объект
key — ключевая функция, является необязательной, передается только по имени
reverse — булево значение, определяющее порядок сортировки: если равняется False — сортировка выполняется по возрастанию, если True — по убыванию; по умолчанию равняется False, передается только по имени

Функция возвращает список с отсортированными элементами объекта iterable. Если указана ключевая функция key, то элементы iterable сравниваются между собой не напрямую, а на основе значений, возвращаемых этой функцией.

Временнáя сложность функции: O(nlogn), где n — длина объекта iterable

🔔🔔🔔🔔🔔🔔 Скоро выйдет наш новый курс по алгоритмам, в котором подробно будет рассмотрена временная сложность встроенных в Python функций. Если курс вам интересен, оставьте заявку по ссылке, и вы первыми узнаете о выходе курса!

Ставьте реакцию:

🔥 — если знали временну́ю сложность этих функций
👀 — если узнали о ней впервые

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

04 Dec, 06:29


Друзья, принесли очередную задачу из адвент-челленджа для программистов! 🎅

☝️☝️☝️☝️ Просим соблюдать правила адвента:

❄️ нельзя писать в комментариях ответы и решения задач
❄️ можно обсуждать подходы к решению и ход ваших мыслей

🔠🔠🔠🔠🔠🔠 4⃣

Снегурочка спросила у Деда Мороза:
— Слушай, Дедушка, а сколько тебе лет?

Дед Мороз усмехнулся в бороду:
— Сосчитай сама. Смотри, всего у меня было шесть детей. Каждый следующий ребенок рождался ровно через 4 века после предыдущего. Старшенький мой, Петр Морозович, родился, когда мне было 19 веков. А младшенькой, маме твоей, Зинаиде Морозовне, самой 19 веков недавно стукнуло. Так сколько же мне веков?

😎 Адвент-челлендж проходит на платформе Stepik в нашем специальном курсе с конкурсами и марафонами. Он ждет ваших ответов.

Ставьте реакцию:

🔥 — если решаете такие задачи в уме
👀 — если нужны листик и ручка

#итадвент2024

Поколение Python 🐍

03 Dec, 13:39


Друзья, хотим поделиться с вами новостями телеграм-канала "Поколения". 😄

Ведение и развитие телеграм-канала — это большая и сложная задача, в которой тем или иным способом задействована вся команда "Поколения". Мы пишем посты и сторис, делаем картинки, отвечаем на вопросы в комментариях и следим за порядком в чате. 😉

‼️‼️‼️❗️ Чтобы сделать нашу работу еще эффективнее, мы решили публиковать эксклюзивные посты с оплатой через Telegram Stars (или просто "звезды"). Это внутренняя валюта мессенджера Telegram. ⭐️

Для подписчиков канала ничего не изменится! Все прежние рубрики и любимые вами активности продолжат выходить в привычном режиме. 👌

🆕🆕🆕Несколько раз в месяц мы будем публиковать дополнительный контент для тех, кто хочет поддержать команду "Поколения". К ним можно будет получить доступ, заплатив определенное количество "звезд".

💡 Что будем публиковать:

🔘полезные материалы по изучению программирования
🔘полезные материалы по изучению алгоритмов
🔘конкурсы и розыгрыши
🔘викторины
🔘и многое другое

Полученные "звезды" мы потратим на продвижение нашего канала в Telegram, чтобы студентов "Поколения" стало еще больше! 😍

P.S. Отдельная благодарность нашим бустерам. Благодаря вашей поддержке на канале выходят сторис! 😘

🐾🐾🐾🐾🐾🐾🐾 В это воскресенье мы проведем розыгрыш мерча от Лаборатории Касперского и суперкрутой книги "Карьера программиста". Доступ к розыгрышу можно будет получить, закинув "звездочек" на развитие канала. ⭐️

Ставьте реакцию:

🔥 — если хотите больше контента от "Поколения"
👀 — если и так не успеваете все читать

#поколениеpyton

Поколение Python 🐍

03 Dec, 07:05


Друзья, принесли вам новое слово недели! Сегодня поговорим о композиции.

📍Композиция описывает ситуацию, когда экземпляр одного класса включает в себя экземпляр другого класса. При этом класс, экземпляр которого содержит экземпляр другого класса, называют составным, а класс, экземпляр которого содержится в экземпляре другого класса — компонентным.

Например, в приведенном ниже примере композиции:
class Salary:
def __init__(self, pay, bonus):
self.pay = pay
self.bonus = bonus

class Employee:
def __init__(self, name, pay, bonus):
self.name = name
self.salary = Salary(pay, bonus)

составным классом является класс Employee, а компонентным — класс Salary.

🔘Композиция позволяет составному классу использовать функционал компонентного класса, не наследуясь от него.

🔥 В отличие от наследования, композиция не выстраивает строгие иерархические отношения между классами. Это означает, что изменения в компонентном классе редко влияют на составной класс, а изменения в составном классе никогда не влияют на компонентный класс.

При рассмотрении программ, одна из которых основана на наследовании, а другая — на композиции, композиционное решение обычно является наиболее гибким.

Ставьте реакцию:

😎 — если знали, что такое композиция
👀 — если слышите о ней впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

02 Dec, 12:58


Друзья, собрали для вас дайджест публикаций “Поколения” за ноябрь! Заваривайте чаек и читайте, если что-то пропустили. 😘

🤯 ЗАДАЧИ

🔘Задача про Кемаля и сломанный лифт
🔘Задача про принцип формирования строк из чисел
🔘Задача от Wild mathing: где построить мост?
🔘Задача от Фибоначчи про размножение кроликов
🔘Задача про количество комнат в круглом здании

🛠 ПОЛЕЗНЫЕ МАТЕРИАЛЫ

🔘Как понять знаки Σ и П с помощью программирования
🔘Принцип абстракции в ООП
🔘Принцип инкапсуляции в ООП
🔘Полиморфизм в ООП
🔘Принцип наследования в ООП
🔘Экспериментальный способ оценки сложности алгоритмов
🔘Теоретический способ оценки сложности алгоритмов
🔘Ошибка SyntaxError: unterminated string literal
🔘Конструкции с оператором else в Python
🔘Английский для программистов: it’s not rocket science
🔘Нотация О-большое
🔘Встроенные функции str() и repr() в Python
🔘Классификация асимптотической сложности алгоритмов
🔘Неизменяемый объект и хешируемый объект: в чем разница?

🧠 ПОЗНАВАТЕЛЬНЫЕ ПОСТЫ

🔘Таблица для оценки наблюдательности
🔘Что такое задача коммивояжера
🔘Нужна ли вышка программисту? Ответ на вопрос студента
🔘Ключевые моменты ежегодного доклада GitHub
🔘Принципы разработки кода SOLID
🔘Чем знаменит Фибоначчи
🔘Как возник Международный день защиты информации

😍 НОВОСТИ “ПОКОЛЕНИЯ”

🔘Стартовал адвент-челлендж для программистов
🔘Скидки на мерч и курсы до 10 декабря
🔘Обновление курса “Базы данных и SQL для начинающих”
🔘Курсы “Поколения Python” собрали 30 000 отзывов

🔝🔝🔝Ставьте ❤️ и сохраняйте пост в избранном, чтобы ничего не пропустить!

#дайджест #ноябрь

Поколение Python 🐍

02 Dec, 06:28


Друзья, напоминаем, что вчера стартовал адвент-челлендж для программистов! 🤩 Будем время от времени приносить задачи в канал.

🌚🌚🌚🌚Просим соблюдать правила адвента:

❄️ нельзя писать в комментариях ответы и решения задач
❄️ можно обсуждать подходы к решению и ход ваших мыслей

🔠🔠🔠🔠🔠🔠 2⃣

В утренней почте обнаружилась подарочная коробка, вся обсыпанная снегом. В ней Дед Мороз нашел девять ледяных цифр: от 1 до 9. К ним была приложена записка: 

"Уважаемый мистер Дедушка Мороз! Вы уже наверняка знаете, что я пригласила Снегурочку отмечать Новый год у нас в замке. В благодарность за то, что вы дали ей разрешение, отправляю вам небольшой подарок. Из девяти цифр нужно составить дробь, которая будет равняться в точности 1/3. Вот пример (хоть и неподходящий): 7192/38456 = 0.187.  Решить головоломку нужно быстро, пока цифры не растаяли. Счастливого вам Рождества и Нового года. Эльза". 

😎 Адвент-челлендж проходит на платформе Stepik в нашем специальном курсе с конкурсами и марафонами. Он ждет ваших ответов.

🎄 После правильного решения задачи вы получите некоторое число. Сохраняйте эти числа, желательно в списке. В конце челленджа вам предстоит решить последнюю задачу, основанную на обработке полученных чисел. Всем удачи!

Ставьте реакцию:

🔥 — если уже приступили к решению задач адвента
👀 — если еще думаете, решать или не решать

#итадвент2024

Поколение Python 🐍

01 Dec, 12:24


Друзья, наступила зима, а это значит, что сегодня стартовал адвент-челлендж для программистов от "Поколения Pyhon"! 🎄

🎇 Каждый день с 1 по 25 декабря мы будем публиковать по одной задаче:

🔘на логику
🔘на код
🔘на алгоритмы
🔘 и многое другое!

Решайте задачи каждый день, чтобы создать праздничное настроение, прокачать свои навыки и, конечно, получить призы! 🎁

😍 Первая задача уже ждет вас на платформе Stepik в нашем специальном курсе с конкурсами и марафонами.

⭐️ После Рождества мы подведем итоги челленджа. Три победителя получат новогодние подарки от команды "Поколения Python". 😎

Ставьте реакцию:

🔥 — если планируете решать задачи каждый день
👀 — если вряд ли получится решать ежедневно

#поколениеpython #итадвент2024 #конкурс

Поколение Python 🐍

01 Dec, 08:19


Друзья, подводим итоги книжного розыгрыша! 🥳

Победителями стали:

1️⃣ Илья, он получит книгу "Современные операционные системы"

2️⃣ Ира, она получит книгу "Достаточно ли вы умны, чтобы работать в Google?"

3️⃣ Максим, он получит книгу "Хакинг на примерах. Уязвимости, взлом, защита"

Проверить результат розыгрыша можно по ссылке. 🎲

Поздравляем победителей! 🎁 А остальных участников розыгрыша просим не расстраиваться и верить в свою удачу: впереди много новых розыгрышей и активностей! 😎

Ставьте реакцию:

❤️ — если очень рады за победителей
💔 — если рады, но не от всего сердца 🤣

#розыгрыш #итоги

Поколение Python 🐍

30 Nov, 11:31


Друзья, 30 ноября отмечают Международный день защиты информации! 🛡 Разберемся, откуда взялся и зачем нужен этот праздник.

В ноябре 1988 года произошло знаковое событие: вирус под названием “червь Морриса” парализовал несколько тысяч узлов сети ARPANET 😰 (это прототип интернета, созданный министерством обороны США).

🦠 Вирус написал и внедрил аспирант Корнеллского университета Роберт Моррис.

Происшествие имело значительные последствия:

1️⃣ ущерб от червя Морриса составил почти 100 млн долларов
2️⃣ Роберт Моррис стал первым человеком, осужденным по новому закону о мошенничестве с применением компьютера
3️⃣ была создана Компьютерная группа реагирования на чрезвычайные ситуации (Computer emergency response team или просто CERT)
4️⃣ был учрежден Международный день защиты информации

Исходный код червя Морриса можно посмотреть здесь.

Как отметить день компьютерной безопасности:

🔘 завести менеджер паролей
🔘 сделать резервные копии важных файлов
🔘 обновить антивирусы
🔘 провести проверку своих устройств

Ставьте реакцию:

🔥 — если следите за безопасностью информации
👀 — если да ладно, и так сойдет!

#япознаюмир

Поколение Python 🐍

30 Nov, 07:34


Друзья, разберем задачу про комнаты в круглом здании. 😌

Стажер включает свет в комнате, которую назовем начальной. Далее стажер идет по круглому зданию в заранее выбранном направлении (например, по часовой стрелке) и считает количество пройденных комнат. Как только ему встречается комната с включенным светом, он выключает в ней свет и возвращается к начальной комнате. Горящий в ней свет будет означать, что здание еще не пройдено по кругу. 💡

Стажер повторяет действия: идет по часовой стрелке до первой комнаты с включенным светом, выключает свет, идет назад. Если в начальной комнате после возвращения свет выключен, то стажер обошел здание по кругу. Искомое количество комнат будет равно подсчитанному количеству комнат на последнем шаге.

Ставьте ❤️ к посту, если справились с задачей. 😎

📌 Если у вас тоже есть интересные задачи, отправляйте их в наш телеграм-бот @pygen_ru_bot. 👌

#разборзадачи

Поколение Python 🐍

29 Nov, 15:02


Друзья, у нас предложение: давайте оживим учебную атмосферу вашими фотографиями! 📸

Где вы сейчас? Как проводите вечер пятницы? Кидайте снимки в комментарии! Будем лайкать и общаться. 😍

Ставьте реакцию:

🔥 — если планируете активные выходные
👀 — если лучший отдых — это полежать дома

#поколениеpython

Поколение Python 🐍

29 Nov, 10:12


Друзья, сегодня расскажем, в чем разница между понятиями "неизменяемый объект" и "хешируемый объект".

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

▫️Неизменяемый объект — это объект, состояние которого не может быть изменено после создания.

▫️Хешируемый объект — это объект, который имеет хеш-значение.

В Python хеш-значение (хеш) — это фиксированное целое число, идентифицирующее объект. Оно используется при поиске объектов в словаре и множестве, которые за кулисами являются хеш-таблицами. Следовательно, ключом словаря или элементом множества может быть только хешируемый объект.

Проверить, является ли объект хешируемым, можно с помощью встроенной функции hash(), которая возвращает хеш-значение переданного объекта. Если переданный объект нехешируемый, функция возбуждает исключение TypeError.

📌 Как правило, неизменяемые объекты являются хешируемыми, а изменяемые — нехешируемыми. Однако есть исключение: кортежи являются неизменяемыми, но могут быть хешируемыми и нехешируемыми в зависимости от своего содержимого:

▫️кортеж является хешируемым, если все его элементы хешируемые
▫️кортеж является нехешируемым, если хотя бы один из его элементов нехешируемый

Поскольку словари и множества допускают в качестве ключей и элементов только хешируемые объекты, нехешируемый кортеж не может быть ключом словаря или элементом множества.

Например, кортеж (1, [2, 3]) содержит в качестве элемента нехешируемый список [2, 3], а значит, и сам кортеж не имеет хеш-значения. Поэтому при попытке добавить этот кортеж в множество будет возбуждено исключение TypeError: unhashable type: 'list'.

Ставьте реакцию:

😎 — если знали, что кортежи могут быть хешируемыми и нехешируемыми
👀 — если слышите об этом впервые

🔝🔝🔝Сохраняй пост в избранное, точно пригодится! ✍🏻

#python #полезныйматериал

Поколение Python 🐍

28 Nov, 09:30


Друзья, а вы знали, что термин "Черная пятница" придумали американские полицейские? 👮🏻‍♂️

🧐 Распродажи после Дня благодарения в США устраивали аж с XIX века. С распространением личных автомобилей период масштабных скидок осложнился огромными пробками.

🚔 В 1960-е годы дорожные полицейские Филадельфии прозвали это напряженное время "черной пятницей". А продавцы быстро превратили прозвище в звучный бренд. С помощью СМИ они создали имидж черной пятницы как самого красивого и удобного времени для семейных покупок. 🛒

😮😮😮Черная-черная уточка Бэтмен принесла вам скидки на черную-черную пятницу! 👻

😍 Покупайте мерч со скидками до 60% в онлайн-магазине "Поколения"

😝 Покупайте доступ к платным курсам со скидкой 40% на нашем официальном сайте.

🎁 При покупке мерча на сумму от 3 тысяч рублей положим в подарок:

❤️блокнот
❤️ежедневник
❤️коврик
❤️обложку на паспорт
❤️картхолдер
❤️стикеры
❤️пин-значок
❤️носочки

Скидки действуют до 10 декабря! Успевайте закупиться курсами и подарками для себя и для близких. 🎁

P.S. Кстати, на днях мы добавили новый урок про миксины в курс по ООП. Если вы размышляли о его покупке — считайте, что это знак! 🍀

Ставьте реакцию:

🔥 — если ждали черную пятницу
👀 — если она всегда приходит неожиданно

#поколениеpython #чернаяпятница #скидки #мерч

Поколение Python 🐍

27 Nov, 09:22


Друзья, сегодня поговорим об асимптотической сложности алгоритмов и ее классификации. 😎

📎 В одном из предыдущих постов мы выяснили, что временну́ю сложность алгоритма можно описать с помощью функции, которая размеру входных данных сопоставляет максимальное количество простейших операций, выполняемых внутри алгоритма. Также мы узнали, что для более простого описания можно использовать не саму функцию, а ее верхнюю границу, обозначенную с помощью нотации O-большое.

Такое упрощенное описание временнóй сложности алгоритма с помощью нотации O-большое называется асимптотической временнóй сложностью алгоритма.

🔘 В теории алгоритмов временнáя сложность алгоритма практически всегда описывается с помощью нотации O-большое. Поэтому временнáя сложность и асимптотическая временнáя сложность — это часто одно и то же.

Существуют 8 основных классов асимптотической временнóй сложности алгоритмов:

1⃣Константная O(1) — время выполнения алгоритма не изменяется по мере роста размера входных данных

2⃣Логарифмическая O(logn) — время выполнения алгоритма изменяется пропорционально логарифму от размера входных данных

3⃣Линейная O(n) — время выполнения алгоритма изменяется прямо пропорционально размеру входных данных

4⃣Линейно-логарифмическая O(nlogn) — время выполнения алгоритма изменяется пропорционально произведению размера входных данных и логарифма от размера входных данных

5⃣Квадратичная O(n²) — время выполнения алгоритма изменяется пропорционально квадрату размера входных данных

6⃣Кубическая O(n³) — время выполнения алгоритма изменяется пропорционально кубу размера входных данных

7⃣Экспоненциальная O(2ⁿ) — время выполнения алгоритма увеличивается экспоненциально с ростом размера входных данных

8⃣Факториальная O(n!) — время выполнения алгоритма изменяется пропорционально факториалу размера входных данных

📈 График, представленный на картинке, наглядно показывает изменение времени выполнения алгоритма T по мере увеличения размера входных данных n, если его временнáя сложность равна O(1), O(logn), O(n), O(nlogn), O(n²), O(n³), O(2ⁿ) или O(n!).

🔔🔔🔔🔔🔔🔔 Скоро выйдет наш новый курс по алгоритмам. Если курс вам интересен, оставьте заявку по ссылке, и вы первыми узнаете о его выходе!

Ставьте реакцию:

❤️ — если знали о классах временнóй сложности алгоритмов
👀 — если слышите о них впервые

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

26 Nov, 09:21


Друзья, рады сообщить, что приближается новый адвент-челлендж для программистов от "Поколения Pyhon"! 🗓

😮 Что такое адвент?

Есть такая европейская традиция: в декабре отсчитывать дни до прихода Рождества, открывая окошечки в специальных адвент-календарях, за которыми обычно скрываются сладости или небольшие игрушки.

А мы запускаем адвент-календарь для настоящих программистов! 😍 С 1 по 25 декабря ежедневно будет открываться одна новогодняя задача. Решайте их каждый день, чтобы прокачать 🧠 и поддержать праздничное настроение! 🎄

⚠️⚠️⚠️⚠️⚠️Адвент-челлендж будет публиковаться на платформе Stepik. Подпишитесь на наш курс с конкурсами и марафонами, чтобы не пропускать задачи!

⭐️ После Рождества мы подведем итоги челленджа. Три победителя получат новогодние подарки от команды "Поколения Python". 😎

Ставьте ❤️, если будете участвовать в адвенте!

#поколениеpython #итадвент2024 #конкурс

Поколение Python 🐍

25 Nov, 11:30


Друзья, продолжаем рубрику "Слово недели"! Сегодня поговорим о принципе наследования в ООП.

📌 Основная идея наследования состоит в том, что дочерний класс заимствует атрибуты и методы родительского класса, а также добавляет собственные.

Наследование позволяет:

✔️избежать дублирования кода, поскольку общие свойства и методы могут быть определены в родительском классе и использоваться в дочерних классах
✔️использовать полиморфизм, что достигается за счет переопределения методов родительского класса в дочерних классах
✔️создавать иерархии классов, что помогает организовать код

‼️‼️‼️❗️ Несмотря на то, что наследование является мощным инструментом организации кода, использовать его нужно с умом, чтобы избежать чрезмерной сложности кода и проблем с его поддержкой.

Ставьте реакцию:

🔥 — если знали, что такое наследование
👀 — если узнали об этом принципе впервые

🔝🔝🔝Сохраняй пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

25 Nov, 06:34


Друзья, сегодня решаем очередную логическую задачку. 🧐

Стажеру дали задание: посчитать количество комнат в одноэтажном круглом здании IT-компании. Из каждой комнаты можно попасть в две соседние. В них можно только включать или выключать свет. 💡 Изначально свет в комнатах горит произвольным образом.

Как стажеру выполнить задание и получить оффер? 🤔

Пишите свои варианты решения в комментариях, не забывая прятать их под скрытым текстом.

Ставьте реакцию:

🔥 — если отказались бы от такого дурацкого задания
👀 — если в роли стажера и не такое приходилось делать

#задача

Поколение Python 🐍

24 Nov, 12:35


Друзья, объявляем новый розыгрыш! 😎

На этот раз разыгрываем среди подписчиков нашего канала сразу три полезные книги! 🔥

1️⃣"Современные операционные системы" — всемирный бестселлер, включающий всю необходимую информацию для понимания функционирования современных операционных систем. Книга построена на примерах и содержит множество важных подробностей, которых нет ни в одном другом издании.

2️⃣ "Достаточно ли вы умны, чтобы работать в Google?" — это книга, в которой подробно описываются методы, вопросы и задачи, используемые в компании Google для поиска новых сотрудников и проведения собеседований. Книга полезна для всех, кто хочет успешно пройти интервью или просто порешать интересные задачи.

3️⃣ "Хакинг на примерах. Уязвимости, взлом, защита" — книга, посвященная различным вопросам информационной безопасности. В ней рассматриваются основы анонимности в интернете, принципы взлома сайтов и паролей, методы поиска уязвимостей, а также основные инструменты хакеров, такие как Kali Linux. Книга будет полезна всем, кто интересуется вопросами кибербезопасности и хочет изучить методы борьбы с различными киберпреступлениями.

Правила розыгрыша:

поставить ❤️ этому посту
написать в комментариях "Я в деле"

Победителей розыгрыша выберем случайным образом в следующее воскресенье, 1 декабря! 😉

#поколениеpython #розыгрыш

Поколение Python 🐍

24 Nov, 08:32


Друзья, разберем задачу про мост. 😉

Длина моста является постоянной, значит, можно ее не учитывать и представить, что моста на картинке нет.

Кратчайшее расстояние между двумя точками — это отрезок. Значит, для построения кратчайшего пути между городами А и Б необходимо соединить точки А и Б отрезком.

✔️ Точка на пересечении реки с полученным отрезком будет местом, где следует построить мост.

Ставьте ❤️ к посту, если справились с задачей.

#разборзадачи

Поколение Python 🐍

23 Nov, 09:12


Друзья, разбираем задачу от Фибоначчи про кроликов! 🐰

📍 В первый месяц появляется первая пара кроликов — самец и самка. Со второго месяца кролики начинают ежемесячно производить новую пару — самца и самку. Новая пара также со второго месяца начинает ежемесячно производить пару кроликов и так далее.

Рассмотрим подробно, как растет количество кроликов в первые полгода:

🟢Месяц 1: одна пара молодых кроликов

🟢Месяц 2: по‑прежнему одна пара, поскольку кролики еще не достигли детородного возраста

🟢Месяц 3: две пары — исходная, достигшая детородного возраста + одна пара молодых кроликов, которую произвела исходная пара

🟢Месяц 4: три пары — исходная пара + одна пара кроликов, которую произвела исходная в начале месяца + одна пара кроликов, которые появились на свет в третьем месяце, но еще не достигли детородного возраста

🟢Месяц 5: пять пар — исходная пара + пара, родившаяся в третьем месяце и достигшая детородного возраста + две новые пары, которых произвели две предыдущие + одна пара, которая появилась на свет в четвертом месяце, не достигшая детородного возраста

🟢Месяц 6: восемь пар — пять пар, живших в прошлом месяце + три новорожденные пары

Несложно заметить, что в размножении кроликов существует закономерность, которую можно описать формулой:

🔘Fn = Fn‑1 + Fn‑2, где Fn — общее количество пар кроликов в n‑й месяц, Fn‑1 — общее количество пар кроликов в предыдущий месяц, а Fn‑2 — общее количество пар кроликов два месяца назад

Подсчитаем по данной формуле количество пар кроликов в оставшиеся месяцы и получим последовательность, которая называется числами Фибоначчи:

🔘1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233

📌 Таким образом, в конце года будет 233 пары кроликов. При этом из них 144 пары будут взрослыми, а 89 — молодыми.

Ставьте реакции:

🔥 — если решили задачу быстро
👀 — если пришлось поломать голову

#разборзадачи

Поколение Python 🐍

22 Nov, 14:18


Друзья, мы знаем, что среди подписчиков нашего канала есть школьники и студенты, есть те, кто работает в самых разных сферах, а также те, кто успевает совмещать работу и учебу. 🫡

⤵️ Расскажите в комментариях с помощью эмодзи, чем вы занимаетесь на работе или учебе. 🤪

Ставьте реакцию:

😎 — если уже работаете в IT
❤️ — если еще на пути к этой цели

#поколениеpython

Поколение Python 🐍

22 Nov, 06:33


Друзья, сегодня поговорим о встроенных в Python функциях str() и repr().

📌 Функции str() и repr() предназначены для получения строкового представления объекта:

функция str() возвращает неформальное (понятное для человека) строковое представление объекта, вызывая за кулисами магический метод __str__()

функция repr() возвращает формальное (понятное для интерпретатора Python) строковое представление объекта, вызывая за кулисами магический метод __repr__()

Функция str() используется для создания удобных для пользователя выходных данных и отображения объекта в виде строки, а функция repr() — для получения информации об объекте во время отладки кода.

📌 Функции str() и repr() вызывают магические методы __str__() и __repr__() согласно следующим правилам:

если в классе методы __str__() и __repr__() не определены, то функции str() и repr() используют их базовые реализации из класса object, которые возвращают одно и то же значение

если в классе реализован метод __repr__(), но не реализован метод __str__(), то при передаче объекта данного класса в функцию str() вызывается реализованный метод __repr__()

если в классе реализован метод __str__(), но не реализован метод __repr__(), то при передаче объекта данного класса в функцию repr() вызывается базовая реализация метода __repr__()

‼️‼️‼️❗️ Методы __str__() и __repr__() всегда должны возвращать объект типа str, в противном случае будет возбуждено исключение TypeError.

Ставьте реакцию:

🔥 — если знали, чем отличаются функции str() и repr()
👀 — если узнали об этом впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#поколениеpython #полезныйматериал #str #repr

Поколение Python 🐍

21 Nov, 06:44


Друзья, сегодня предлагаем вам решить задачу от самого Фибоначчи — знаменитого ученого-математика. 😄

🔠🔠🔠🔠🔠🔠

Возьмем пару новорожденных кроликов: самца и самку. На втором месяце жизни они способны произвести на свет еще одну пару кроликов. Сколько пар кроликов мы получим через год? 🤔

Пишите ответы и ход своих рассуждений в комментариях, не забывая прятать их под скрытым текстом.

Ставьте реакцию:

🔥 — если слышали эту задачу раньше
👀 — если столкнулись с ней впервые

#задача

Поколение Python 🐍

20 Nov, 09:02


Друзья, ранее мы рассмотрели теоретический способ оценки временнóй эффективности алгоритмов. Сегодня поговорим о нотации О-большое. 🫡

📌 Напомним, что временнáя эффективность алгоритма описывает то, как изменяется время, необходимое для выполнения алгоритма, по мере роста размера входных данных. Значит, временну́ю эффективность алгоритма можно описать с помощью функции, которая размеру входных данных сопоставляет максимальное количество простейших операций, выполняемых внутри алгоритма. Такая функция называется функцией временнóй эффективности.

Например, для некоторого алгоритма функция временнóй эффективности может иметь следующий вид:

🟢T(n)=40⋅log₂n+10, где n — размер входных данных

✔️Для упрощения анализа эффективности алгоритма в теории алгоритмов принято работать не с самой функцией временнóй эффективности, а с ее верхней границей, для обозначения которой существует специальная нотация: O-большое. Она имеет следующее определение:

🟢Функция f(n) есть O(g(n)), если, начиная с определенного значения аргумента, значение функции f(n) не превосходит значение функции g(n), умноженное на некоторую постоянную величину, то есть если существуют положительная константа c и неотрицательная целочисленная константа n₀ такие, что для всех n≥n₀ выполняется неравенство f(n)≤с⋅g(n)

🙃 Словесное определение нотации O-большое может показаться сложным, однако ее графическое представление достаточно очевидно.

📈 На графике, изображенном на картинке, показано определение записи f(n)=O(g(n)). По нему видно, что, начиная со значения аргумента n₀, значение функции f(n) не превосходит значение функции g(n), умноженное на определенную константу c. Это и говорит о том, что функция f(n) есть O(g(n)), поскольку для функций f(n) и g(n) существуют константы c и ​n₀ такие, что для всех n≥n₀ выполняется неравенство f(n)≤с⋅g(n).

📌 Таким образом, нотация O-большое выражает, что, начиная с определенного значения аргумента, одна функция всегда меньше или равна другой функции или, другими словами, ограничена этой функцией сверху.

Рассмотрим пример: функция f(n)=64 есть О(1).

По определению нужно найти константу с>0 и целочисленную константу ​n₀≥0 так, чтобы для всех n≥n₀ выполнялось неравенство 64≤с⋅1. Одним из вариантов является пара с=64 и n₀=0. Действительно, неравенство 64≤64⋅1 выполняется для всех n≥0. Более того, неравенство выполняется при любых n, так как переменная n в неравенстве не участвует.

Буква O в символике O-большое происходит от немецкого слова "ordnung", что в переводе означает "порядок".

🔔🔔🔔🔔🔔🔔 Скоро выйдет наш новый курс по алгоритмам, в котором подробно рассматривается нотация О-большое. Если курс вам интересен, оставьте заявку по ссылке, и вы первыми узнаете о выходе курса!

Ставьте реакцию:

😎 — если знали о нотации О-большое
👀 — если слышите о ней впервые

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

19 Nov, 15:05


Друзья, продолжаем рассказывать про принципы разработки кода! Мы уже рассказывали про принципы KISS и DRY, а сегодня разберемся с набором правил SOLID. 😎

Принцип единой ответственности 🤝
Каждый класс должен быть ответственен только за одну вещь, иначе его сложно понять и поддерживать. Это правило иногда противоречит принципу DRY.

Принцип открытости и закрытости 🔐
Все классы должны быть открыты для расширения, но закрыты для изменений. Это значит, что вы должны иметь возможность добавлять новую функциональность без изменения существующего кода.

Принцип подстановки Лисков 🦊
Вы должны иметь возможность использовать подклассы везде, где используется базовый класс, не вызывая ошибок. (Это правило названо по имени его автора, профессора информатики MIT Барбары Лисков).

Принцип разделения интерфейса 🧩
Интерфейс в программировании — это то, что умеет делать функция, класс или объект. Один огромный интерфейс лучше разбить на несколько маленьких и связанных. Это уменьшит риск сломать другие куски интерфейса, внося изменения в какую-то его часть.

Принцип инверсии зависимостей 🔄
Классы должны зависеть не от конкретных реализаций, а от абстракций. Это облегчает изменение и тестирование вашего кода. Например, зависимости от внешней базы данных должны не жестко встраиваться в тело модуля, а быть одним из аргументов, от которых зависит выполнение этого модуля.

⭐️ Принципы SOLID впервые представил в 2000 году американский разработчик Роберт Мартин. Изначально они относились к объектно-ориентированному программированию, но применимы практически к любому коду.

Ставьте реакцию:

🔥 — если считаете, что своды принципов полезны при разработке
👀 — если не понимаете, зачем все это нужно

#япознаюмир #solid

Поколение Python 🐍

14 Nov, 09:18


Друзья, в рамках рубрики “Английский для программистов” продолжаем переводить интересные фразы с переносным значением! 😎

Сегодня разбираем фразу 💱 it’s not rocket science💱.

🔘 Дословный перевод — "это не наука о ракетах"
🔘 Смысл — речь идет о чем-то легком для понимания
🔘Аналог в русском — "это не высшая математика"

Фраза получила распространение в американском английском в 1950-х годах, во времена активного развития ракетостроения и космической гонки.

В том же значении часто используется выражение it’s not brain surgery, то есть “это не хирургия на мозге”. А в шуточном варианте обе фразы смешивают. 😂 Получается:

🔘 It's not brain science
🔘 It's not rocket surgery

⬇️ Пишите в комментариях, знаете ли вы другие аналоги этой фразы на русском.

Ставьте реакцию:

🔥 — если вы за вариант с rocket science
🤯 — если больше нравится фраза про brain surgery

#английскийдляпрограммистов

Поколение Python 🐍

13 Nov, 09:16


Друзья, в одном из предыдущих постов мы рассмотрели экспериментальный способ оценки временнóй сложности алгоритмов. Сегодня поговорим о теоретическом способе.

📌 Теоретический способ оценки временнóй сложности алгоритмов не требует экспериментальных измерений. Он основан на подсчете количества простейших операций, выполняемых внутри алгоритма.

К простейшим операциям относятся:

возврат значения из функции
выполнение арифметической операции
сравнение двух чисел
присваивание значения переменной
индексация списка

✔️ Если допустить, что время выполнения всех простейших операций примерно одинаково, то можно просто подсчитать количество таких операций и использовать полученное значение в качестве критерия оценки времени выполнения алгоритма.

📌 Рассмотрим процесс подсчета количества простейших операций на примере представленного на картинке алгоритма find_max() для поиска максимального числа в списке чисел:

max_value = data[0] — 2 простейшие операции (индексация списка и присваивание значения переменной)

for elem in data:n простейших операций (присваивание значения переменной), где n — количество элементов в списке data

if elem >= max_value:n простейших операций (сравнение двух чисел), где n — количество элементов в списке data

max_value = elem — 1 простейшая операция (присваивание значения переменной), которая в худшем случае выполняется n раз, где n — количество элементов в списке data

return max_value — 1 простейшая операция (возврат значения из функции)

📌 Таким образом, максимальное количество простейших операций, выполняемых внутри алгоритма find_max(), составляет:

2 + n + n + n + 1 = 3 + 3⋅n

‼️‼️‼️❗️ В теории алгоритмов по умолчанию принято указывать худший показатель времени выполнения алгоритма. Проектирование алгоритма на основании худших показателей приводит к созданию более устойчивой сущности алгоритма.

🔔🔔🔔🔔🔔🔔 Скоро выйдет наш новый курс по алгоритмам. Если он вам интересен, оставьте заявку по ссылке, и вы первыми узнаете о выходе курса!

Ставьте реакцию:

❤️ — если знали о таком способе оценки эффективности алгоритмов
👀 — если слышите о нем впервые

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

12 Nov, 09:19


Друзья, недавно платформа GitHub опубликовала свой ежегодный отчет Octoverse. В нем рассматривается индустрия открытого программного обеспечения и роль GitHub в ней.

⭐️ Ключевые моменты Octoverse 2024 ⭐️

1️⃣ Язык Python вышел на первое место по популярности на платформе. 🥳 Он обогнал JavaScript, который лидировал 10 лет. Такой рост связывают с широким применением Python в сфере ИИ, машинного обучения и data science.

2️⃣ Всплеск в области генеративного искусственного интеллекта. В 2024 году вклады в проекты генеративного ИИ на GitHub выросли на 59%, а количество проектов этой сферы — на 98%. 😮

3️⃣ Быстрый рост числа разработчиков по всему миру, особенно в Африке, Латинской Америке и Азии. Сейчас на GitHub больше всего программистов из США, но если нынешний темп сохранится, к 2028 на первое место выйдет Индия. Россия на данный момент находится на 6 месте по количеству разработчиков на GitHub.

📎 Прочитать отчет Octoverse 2024 полностью можно по ссылке.

⭐️ О том, что такое GitHub и зачем он нужен, мы рассказывали в этом посте.

Ставьте реакцию:

🔥 — если активно используете GitHub
👀 — если заглядываете на GitHub только за чужим кодом

#япознаюмир #octoverse2024 #github

Поколение Python 🐍

11 Nov, 11:01


Друзья, принесли вам новое слово недели! Сегодня поговорим о принципе инкапсуляции в ООП.

Инкапсуляция имеет два основных смысла:

🔘 с одной стороны, она объединяет атрибуты и методы в одном объекте
🔘 с другой стороны, она обозначает сокрытие данных, то есть невозможность напрямую получить доступ к внутренней структуре объекта, так как это может быть небезопасно

На практике инкапсуляция означает, что класс должен состоять из двух частей:

открытый интерфейс
закрытая реализация

Пользователи обращаются к объекту через интерфейс, не получая доступа к его реализации.

📎 Некоторые языки программирования, в том числе Python, реализуют принцип инкапсуляции, но не предусматривают полноценное сокрытие. Так, в Python остается возможность получить доступ к приватным данным вне класса, используя искажение имен. Но никогда так не делайте, поскольку это может привести к ошибкам и неожиданным результатам!

Ставьте реакцию:

🔥 — если знали, что такое инкапсуляция
👀 — если слышите об этом принципе впервые

🔝🔝🔝Сохраняй пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

11 Nov, 06:36


Друзья, время разминаться перед рабочей неделей и решать задачку от "Поколения"! 😎

Определите принцип, по которому формируются строчки на картинке, и напишите в комментариях, какой должна быть следующая строка. Не забывайте прятать свои варианты и рассуждения под скрытым текстом.

Ставьте реакцию:

🔥 — если быстро справились с задачей
👀 — если пришлось поломать голову

#задача

Поколение Python 🐍

09 Nov, 10:11


Друзья, разбираем задачу про лифт! Рассмотрим два решения — классическое и хитроумное. 😺

1️⃣ Классическое решение

Очевидно, что лифт не может выезжать за границы этажей. Если на 13 этаже Кемаль нажмет кнопку, которая поднимает лифт на 13 этажей, то он никуда не поедет, потому что 13 + 13 = 26, а в доме всего 20 этажей. Значит, единственное, что Кемалю остается на первом шаге — нажать кнопку, которая опускает лифт на 8 этажей:

Вниз: 13 - 8 → 5 этаж

С 5 этажа Кемаль может уехать только вверх. Получается, каждый раз у него есть только один вариант, на какую кнопку нажимать. Применив этот принцип получаем следующий алгоритм нажатия кнопок:

Вверх: 5 + 13 → 18
Вниз: 18 - 8 → 10
Вниз: 10 - 8 → 2
Вверх: 2 + 13 → 15
Вниз: 15 - 8 → 7
Вверх: 7 + 13 → 20
Вниз: 20 - 8 → 12
Вниз: 12 - 8 → 4
Вверх: 4 + 13 → 17
Вниз: 17 - 8 → 9
Вниз: 9 - 8 → 1
Вверх: 1 + 13 → 14
Вниз: 14 - 8 → 6
Вверх: 6 + 13 → 19
Вниз :19 - 8 → 11
Вниз: 11 - 8 → 3
Вверх: 3 + 13 → 16
Вниз: 16 - 8 → 8

В итоге за 19 поездок Кемаль добрался к Тимуру на 8 этаж. Самое интересное, что по этим правилам лифт дальше никуда поехать не может: 8 + 13 = 21, а 8 - 8 = 0, что выходит за границы 20 этажей. Придется все-таки вызывать мастера и делать ремонт. 😄

2️⃣ Хитроумное решение

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

Вниз: 13 - 8 → 5
Вниз: 5 - 8 → 1 (доехали до первого этажа и остановились)

А как добраться с 1 этажа на 8 мы уже знаем из прошлого решения:

Вверх: 1 + 13 → 14
Вниз: 14 - 8 → 6
Вверх: 6 + 13 → 19
Вниз: 19 - 8 → 11
Вниз: 11 - 8 → 3
Вверх: 3 + 13 → 16
Вниз: 16 - 8 → 8

Итого всего 9 поездок.

Ставьте ❤️ к посту, если справились с задачей. 😎

⤵️ Делитесь в комментариях, какой алгоритм решения использовали вы?

#разборзадачи

Поколение Python 🐍

08 Nov, 14:29


Друзья, вы наверняка в курсе, что специалисты ИТ-сферы по-разному называют свою профессию. 😅

Выберите в опросе ниже, как вы предпочитаете называть программистов. А если подходящего варианта не нашлось, пишите свои предложения в комментариях!

Ставьте реакцию:

🔥 — если часто слышите "почини мне чайник, ты ж айтишник"
😎 — если ваши знакомые в курсе, чем занимаются программисты

#поколениеpython

Поколение Python 🐍

08 Nov, 10:06


Друзья, сегодня поговорим об ошибке SyntaxError: unterminated string literal. 🤓

Эта ошибка возникает, если в программе присутствует незавершенный строковый литерал: например, у строки нет закрывающей кавычки или открывающая и закрывающая кавычки не совпадают.

Где же мы ошиблись в нашей программе?

Дело в том, что список books содержит строковый литерал 'Fluent Python" с разными открывающей и закрывающей кавычками.

‼️‼️‼️❗️ Открывающие и закрывающие кавычки в строке должны быть одинаковыми. Если мы используем одинарную открывающую кавычку, то закрывающая тоже должна быть одинарной.

Эта ошибка встречается и при работе с многострочными строками: например, когда многострочная строка заключена в одинарные кавычки (' или "):
text = 'Python is a high-level, 
general-purpose
programming language'


Как избежать этой ошибки?

1️⃣ Использовать для создания многострочной строки тройные кавычки (''' или """):
text = '''Python is a high-level, 
general-purpose
programming language'''


2️⃣ Добавить символ переноса фрагмента строки на следующую строку (\):
text = 'Python is a high-level, \
general-purpose \
programming language'


Ставьте реакцию
:

😎 — если сразу нашли ошибку в коде
👀 — если ошибку отыскать не удалось

#python #полезныйматериал #чтоозначаетошибка

Поколение Python 🐍

07 Nov, 10:17


Друзья, наш онлайн-магазин мерча ушел в небольшой отпуск. 🥱

⚠️⚠️⚠️⚠️⚠️ Все заказы, которые вы сделаете за время отпуска, будут отправлены после 18 ноября.

🎁 Чтобы компенсировать это неудобство, в подарок всем сделавшим заказ до 18 ноября положим:

🔘блокнот
🔘кружку
🔘коврик для мышки
🔘картхолдер
🔘обложку на паспорт

Количество подарков ограничено! Чтобы получить их, делайте заказ уже сейчас. Впереди много праздников, а в нашем магазине можно найти подарки на любой вкус. 😜

🛍 За покупками переходите по ссылке.

Ставьте реакцию:

❤️ — если уже начали закупаться подарками для близких
😎 — если отложили это на декабрь

#мерч #поколениеpython

Поколение Python 🐍

06 Nov, 14:56


Друзья, отличные новости! Мы дополнили и улучшили наш последний на сегодня курс "Базы данных и SQL для начинающих". 😎

🐝 ЧТО ИЗМЕНИЛОСЬ 🐝

1️⃣ добавили целый модуль по регулярным выражениям
2️⃣ добавили новый урок по индексам
3️⃣ внесли несколько улучшений в теорию и задачи

Улучшения курсов становятся возможны благодаря отзывам наших студентов. Спасибо за ваши идеи и предложения! 😍

📌 Напоминаем, что оставить отзыв на курс по SQL можно по ссылке. Это станет замечательным подарком для всей команды "Поколения"!

Новые уроки уже доступны. Вы можете начать проходить их прямо сейчас. Купить курс по SQL и базам данных можно по ссылке.

Оценка курса на Stepik — ⭐️⭐️⭐️⭐️⭐️. Очень гордимся нашей работой и вашим доверием! 💗

🔝🔝🔝Отдельное спасибо Михаилу Крыжановскому за обратную связь по курсу. Почитайте его развернутый отзыв. И кстати, подписывайтесь на канал Миши "Стать специалистом по машинному обучению", там много полезного!

‼️‼️‼️❗️ Промокод SQLMASTER (действует до 14 ноября) дает скидку 30% на покупку курса по SQL и базам данных через наш сайт pygen.ru.

Ставьте реакцию:

🔥 — если уже прошли или проходите курс по SQL
👀 — если планируете его пройти

#sql #поколениеpython

Поколение Python 🐍

06 Nov, 06:38


Друзья, на прошлой неделе мы говорили о временнóй и пространственной сложности алгоритмов. Эти параметры описывают эффективность алгоритмов, поэтому важно уметь их оценивать.

Сегодня рассмотрим экспериментальный способ оценки эффективности алгоритмов на примере определения их временнóй сложности.

📍 Экспериментальная оценка временнóй сложности алгоритма — это измерение времени, необходимого для выполнения программы, реализующей этот алгоритм. Экспериментальный способ предполагает определенное количество запусков программы для выполнения алгоритма с различными входными данными и подсчет затраченного времени на выполнение алгоритма в каждом случае.

⏱️ В Python существует несколько способов измерить время выполнения программы. Наиболее популярный из них — с помощью функции perf_counter встроенного модуля time.

На первой картинке представлен пример экспериментальной оценки временнóй сложности алгоритма для вычисления суммы всех целых чисел от 1 до n включительно. На второй картинке показаны результаты оценки. Несложно заметить, что время выполнения данного алгоритма возрастает по мере увеличения входного значения n. При этом время выполнения алгоритма возрастает пропорционально входному значению n: при n=100000 алгоритм выполняется ~0.006 мс, а при n=200000~0.012 мс.

📍 Таким образом, можно сделать вывод, что если при определенном входном значении время выполнения алгоритма составило t мс, то при увеличении этого входного значения в k раз время выполнения алгоритма также увеличится в k раз и составит около k⋅t мс.

📈 Результаты, полученные при экспериментальной оценке временнóй сложности алгоритма, для наглядности обычно представляются в виде графика, где каждый случай выполнения алгоритма обозначается точкой, координата по оси х которой равна размеру входных данных (в нашем случае это значение n), а координата по оси y — времени выполнения алгоритма.

‼️‼️‼️❗️ Время выполнения программы не является постоянным: оно может уменьшаться или увеличиваться. На время выполнения влияет загрузка процессора, работа операционной системы и другие факторы. Поэтому для более корректной оценки временнóй сложности алгоритма рекомендуется выполнять его с конкретными входными данными несколько раз и в качестве результата брать среднее значение из всех полученных.

🔔🔔🔔🔔🔔🔔 Скоро выйдет наш новый курс по алгоритмам. Если он вам интересен, оставьте заявку по ссылке, и вы первыми узнаете о выходе курса!

Ставьте реакцию:

😎 — если знали, как измерить время выполнения программы
👀 — если узнали об этом впервые

#поколениеpython #курспоалгоритмам

Поколение Python 🐍

04 Nov, 14:28


Друзья, а вот и новое слово недели! Сегодня поговорим о принципе абстракции в ООП. 😎

⭐️ Основная идея абстракции заключается в представлении объекта минимальным набором атрибутов и методов и при этом с достаточной точностью для решаемой задачи.

⭐️ Абстракция позволяет работать с объектами, не вдаваясь в особенности их внутренней реализации. Пользователь не имеет прямого доступа к реализации типа, но может работать с данными через предоставленный набор операций.

✔️ Преимущество абстракции заключается в разделении операций над данными и внутреннего представления этих данных, что позволяет изменять реализацию, не затрагивая пользователей данного типа.

📌 Принцип абстракции позволяет нам скрывать детали и раскрывать только основные черты объекта.

🟢Например, программисту вряд ли понадобятся свойства "умение готовить еду" или "любимый цвет". Они не влияют на его особенности как программиста. А вот "основной язык программирования" и "рабочие навыки" — важные свойства, без которых программиста не опишешь.

🟢Еще один пример — человек, управляющий скутером, знает, что при нажатии на гудок издается звук, но зачастую он не имеет представления о том, как на самом деле этот звук создается при нажатии на гудок.

Ставьте реакцию:

🔥 — если знали о принципе абстракции
👀 — если слышите о нем впервые

🔝🔝🔝Сохраняй пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

04 Nov, 09:49


Друзья, сегодня решаем задачу про лифт! Надеемся, вы не страдаете клаустрофобией. 😅

В 20-этажном доме живут двое:

▫️Кемаль на 13-м этаже
▫️Тимур на 8-м этаже

Однажды в доме сломался лифт, и в нем заклинило все кнопки, кроме двух: одна поднимает лифт на 13 этажей, а вторая опускает на 8.

Как Кемалю попасть с 13-го этажа на 8-й к Тимуру? 🧐 (Только не говорите, что по лестнице — у Кемаля все-таки лапки!)

Пишите ответы и ход своих размышлений в комментариях, не забывая про скрытый текст.

Ставьте реакцию:

🔥 — если решили задачу быстро
👀 — если пришлось поломать голову

#задача

Поколение Python 🐍

02 Nov, 07:03


Друзья, разбираем задачу про сложный маршрут Тимура!

На картинке представлен один из множества возможных маршрутов. Или даже два: ведь из точки "Начало" согласно этой схеме можно стартовать и влево, и вверх.

Вот эти маршруты в буквенном обозначении:

1⃣Начало, В, Б, А, Г, Ж, В, З, начало, конец, Ж, Д, А, конец

2⃣Начало, конец, Ж, В, З, начало, В, Б, А, Г, Ж, Д, А, конец

Ставьте ❤️, если любите графические задачи и хотите, чтобы в нашем канале их было больше.

#разборзадачи

Поколение Python 🐍

01 Nov, 14:24


Друзья, в СССР придумали специальную таблицу для оценки наблюдательности под названием "Занимательная таблица".

Засеките время и найдите в этой таблице последовательно числа от 1 до 90. 👀

Если вы справились:

😎 за 5-10 минут — у вас исключительная наблюдательность

🤓 за 10-15 минут — хорошая наблюдательность

👱🏻‍♂️ за 15-20 минут — средняя наблюдательность

👨🏻‍🦳 за 20-25 минут — удовлетворительная наблюдательность

⤵️ Делитесь результатами в комментариях. Посмотрим, кто тут самый наблюдательный! 😄

#поколениеpython #занимательнаятаблица

Поколение Python 🐍

01 Nov, 07:05


Друзья, поговорим о том, как легко понять математические знаки Σ и П с помощью программирования! 🧑‍💻

1️⃣ Знак Σ (сигма) — это знак суммы, который означает, что нужно сложить все числа от нижнего до верхнего, перед этим выполнив с ними действие, указанное справа от знака Σ.

Выражение на картинке читается так: "Посчитать сумму чисел от 5 до 10, умноженных на два". Иными словами, необходимо:

взять все числа от 5 до 10 (снизу и сверху от знака Σ)
каждое число умножить на 2 (справа от знака Σ)
сложить результаты этих операций (знак Σ)

Несложно заметить, что здесь есть повторяющиеся действия: мы несколько раз складываем числа, которые меняются по одному и тому же правилу. Значит, данное выражение легко превратить в цикл.

Приведенный ниже код:

counter = 0

for i in range(5, 11):
counter += i * 2

print(counter)


выводит 90.

2️⃣ Знак П (Пи) — это знак произведения, который означает, что нужно умножить все числа от нижнего до верхнего, перед этим выполнив с ними действие, указанное справа от знака П.

Выражение на картинке читается так: "Посчитать произведение квадратов чисел от 5 до 10". Иными словами, необходимо:

взять все числа от 5 до 10 (снизу и сверху от знака П)
возвести каждое число в квадрат (справа от знака П)
умножить результаты этих операций (знак П)

Несложно заметить, что здесь снова есть повторяющиеся действия: мы несколько раз умножаем числа, которые меняются по одному и тому же правилу. Значит, данное выражение также легко превратить в цикл.

Приведенный ниже код:

total = 1

for i in range(5, 11):
total *= i * i

print(total)


выводит 22861440000.

Ставьте реакцию:

🔥 — если знали программный способ записи Σ и П
👀 — если узнали о нем впервые

🔝🔝🔝Сохраняй пост в избранное, точно пригодится! ✍🏻

#поколениеpython #полезныйматериал

Поколение Python 🐍

31 Oct, 15:03


Друзья, собрали для вас дайджест публикаций “Поколения” за октябрь. Есть что почитать на выходных!

🤯 ЗАДАЧИ

▫️Задача про покупки Кемаля
▫️Задача про количество возможных окрасок кубика
Задачи на подсчет цифр в числе
Задача про возраст трех котиков
▫️Задача “FizzBuzz”
▫️Логистическая задача

🛠 ПОЛЕЗНЫЕ МАТЕРИАЛЫ

▫️Свойства логарифмов
▫️Английский для программистов. Жесты
▫️Обновления в Python 3.13
Что такое логирование
Как решить задачу на подсчет количества цифр в числе с помощью логарифма
▫️ Ограничение на преобразования между типами int и str в Python
Что такое сериализация
▫️Английский для программистов. To shoot yourself in the foot
Алгоритм и его свойства
Виды нотаций в программировании
▫️Библиотека NumPy

🧠 ПОЗНАВАТЕЛЬНЫЕ ПОСТЫ

▫️Как появился символ процента
▫️В каких сферах IT используется Python
▫️Грейс Хоппер — мама персонального компьютера
История раскладки QWERTY
Ханойские башни — головоломка для программистов

🤑 НОВОСТИ “ПОКОЛЕНИЯ”

▫️Коллекция математического мерча
▫️Розыгрыш подписок Telegram Premium
▫️Акция на носки: 3+1

Ставь ❤️ и сохраняй пост в избранном, чтобы ничего не пропустить.

#дайджест #октябрь

Поколение Python 🐍

31 Oct, 08:27


Друзья, а вы знали, что носки — один из самых популярных подарков осенью и зимой? 🎁

На складе онлайн-магазина "Поколения" как раз скопилось много носочков для программистов и геймеров. Хотим приодеть всех наших студентов! 😂

😮😮😮Акция: при покупке трех пар носков четвертую даем в подарок. Дизайн на ваш выбор!

🤍 ЧТО У НАС ЕСТЬ 🤍

носки "GitHub"
носки "Python"
Носки "Game"
Носки "Ленивая панда"
носки "Желтая уточка"
Носки "Fuck off"
и многое другое!

У нас также есть наборы носков, с которыми в комплекте идут шоколадки.

Набор "Программерский"
Набор "Шахматный фанат"
Набор "Новогодний"

🛍 Все носочки можно посмотреть здесь.

А еще хотим напомнить про нашу новую математическую коллекцию. Часть дизайнов разработана совместно с каналом Wild Mathing для всех, кто любит математику за красоту, а не ради оценки.

🛍 Каталог с математическими новинками доступен по ссылке.

😮😮😮🎁 Всем, кто сделает заказ на сумму от 2 тысяч рублей до 2 ноября, бесплатно положим в посылку:

🔘два блокнота
🔘тетрис-дженга
🔘обложку на паспорт
🔘коврик для мышки
🔘картхолдер

⚠️⚠️⚠️⚠️⚠️ С 4 по 18 ноября наш магазин будет в техническом отпуске. Заказы мы будем принимать, но отправим их только 19 ноября. Успевайте купить сейчас!

Поддержите нас лайком ❤️ (и покупкой 😂) — мы очень старались!

#мерч #поколениеpython #wild #wildmathing #math

Поколение Python 🐍

30 Oct, 09:11


Друзья, сегодня поговорим о том, что такое временнáя и пространственная эффективность алгоритмов. 😎

📍 Во время решения любой алгоритмической задачи мы преследуем две цели:

1️⃣Найти решение — мы хотим разработать алгоритм, который корректно решает задачу при любых возможных входных данных
2️⃣Найти оптимальное решение — для решения одной и той же задачи может существовать несколько алгоритмов, и мы стремимся разработать наиболее эффективный

В теории алгоритмов эффективность алгоритма описывается двумя параметрами:

1️⃣ Временнáя эффективность описывает то, как изменяется время, необходимое для выполнения алгоритма, по мере роста размера входных данных.

Например, время выполнения одного алгоритма может увеличиваться пропорционально размеру входных данных: увеличили размер входных данных в 2 раза — время выполнения выросло также в 2 раза. Время выполнения другого алгоритма, напротив, может быть всегда одним и тем же, независимо от размера входных данных: увеличили размер входных данных в 100 раз — время выполнения осталось прежним.

2️⃣ Пространственная сложность описывает то, как изменяется объем оперативной памяти, необходимый для выполнения алгоритма, по мере роста размера входных данных.

Например, объем памяти, требуемой одному алгоритму, может увеличиваться пропорционально размеру входных данных: увеличили размер входных данных в 2 раза — требуемый объем памяти вырос также в 2 раза. Объем памяти, требуемой другому алгоритму, напротив, может быть всегда одним и тем же, независимо от размера входных данных: увеличили размер входных данных в 100 раз — объем памяти остался прежним.

📍Таким образом, наша цель — это разработка алгоритмов, которые верно решают поставленные задачи, обеспечивая при этом быстрое выполнение и экономное использование оперативной памяти при любых допустимых размерах входных данных.

‼️‼️‼️❗️ Временну́ю и пространственную эффективность алгоритма часто называют временнóй и пространственной сложностью.

🔔🔔🔔🔔🔔🔔 Скоро выйдет наш новый курс по алгоритмам. Если он вам интересен, оставьте заявку по ссылке, и вы первыми узнаете о выходе курса!

Ставьте реакцию:

❤️ — если знали о временнóй и пространственной сложности
👀 — если узнали о них впервые

#поколениеpython #курспоалгоритмам #сложностьалгоритма

Поколение Python 🐍

28 Oct, 12:13


Друзья, принесли вам новое слово недели! Сегодня поговорим о библиотеке NumPy. 😎

📌 Библиотека NumPy предоставляет множество инструментов для работы с матрицами и многомерными массивами, а также математические функции, генераторы случайных чисел и многое другое для различных научных вычислений.

✔️ Ядром NumPy является хорошо оптимизированный код на языке C. Это позволяет сочетать скорость компилируемого кода и гибкость синтаксиса Python!

Название библиотеки NumPy произошло от сокращения слов Numerical Python.

📌 Почитать подробнее про NumPy можно на официальном сайте библиотеки по ссылке.

Ставьте реакцию:

❤️ — если работали с библиотекой NumPy
👀 — если раньше о ней не знали

🔝🔝🔝Сохраняй пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

28 Oct, 06:17


Друзья, сегодня у нас логистическая задача, с которой мы регулярно сталкиваемся в жизни! 😅

Тимур вышел из офиса в точке "Начало" и направляется домой, к точке "Конец". Но по дороге ему нужно решить несколько срочных дел во всех точках, отмеченных на карте буквами.

В каком порядке Тимуру нужно двигаться, чтобы обойти все точки на карте и не проходить по одной улице два раза? 🤔

Свои варианты маршрута скидывайте в комментарии, не забывая прятать картинки под спойлер. ☝️

Ставьте реакцию:

🔥 — если любите делать дела по дороге
👀 — если такие маршруты не для вас

#задача

Поколение Python 🐍

26 Oct, 14:36


Друзья, разберем наиболее популярное решение задачи Fizz buzz! 😎

🟪 Классический алгоритм решения задачи следующий:

1️⃣ функция range() генерирует последовательность целых чисел от 1 до 100 включительно

2️⃣ цикл for поочередно перебирает полученную последовательность, пока в ней не закончатся числа

3️⃣ для каждого числа i выполняется проверка на кратность числам 3 и 5 одновременно

4️⃣ если число i кратно числам 3 и 5 одновременно, то выводится FizzBuzz, и программа переходит к проверке следующего числа

5️⃣ если предыдущее условие не выполнено, то для числа i выполняется проверка на кратность числу 3

6️⃣ если число i кратно числу 3, то выводится Fizz, и программа переходит к проверке следующего числа

7️⃣ если предыдущее условие не выполнено, то для числа i выполняется проверка на кратность числу 5

8️⃣ если число i кратно числу 5, то выводится Buzz, и программа переходит к проверке следующего числа

9️⃣ если ни одно из предыдущих условий не выполнено (число i не делится ни на 3, ни на 5) , то выводится само число i, и программа переходит к проверке следующего числа

Таким образом, программа выводит:

FizzBuzz для чисел, кратных 3 и 5 одновременно
Fizz для чисел, кратных только 3
Buzz для чисел, кратных только 5
число i в остальных случаях

‼️‼️‼️❗️ Обратите внимание, что проверка числа на кратность 3 и 5 одновременно должна выполняться первой, поскольку она наиболее специфична: нам нужно учесть сразу два числа, а не одно из них. Если бы это условие располагалось ниже, программа выводила бы Fizz или Buzz для чисел, которые кратны 3 и 5 одновременно, что не соответствует условию задачи.

Ставьте 🔥 к посту, если решили задачу так же.

#разборзадачи

Поколение Python 🐍

26 Oct, 09:04


Друзья, разбираем задачу про котиков! 🐈

У Тимура три кота. Из диалога Тимура с Артуром известно, что произведение возрастов трех котов равно 36. Определим все возможные комбинации возрастов котов, то есть найдем все комбинации трех положительных целых чисел, произведение которых равно 36:

▫️1 × 1 × 36 = 36
▫️1 × 2 × 18 = 36
▫️1 × 3 × 12 = 36
▫️1 × 4 × 9 = 36
▫️1 × 6 × 6 = 36
▫️2 × 2 × 9 = 36
▫️2 × 3 × 6 = 36
▫️3 × 3 × 4 = 36

Информации для выбора одного из вариантов недостаточно. Тимур добавил, что сумма возрастов котиков равна номеру дома, в котором живет Артур. Зная эту информацию, получаем следующие комбинации возрастов котов и их суммы:

▫️1 + 1+ 36 = 38
▫️1 + 2 + 18 = 21
▫️1 + 3 + 12 = 16
▫️1 + 4 + 9 = 14
▫️1 + 6 + 6 = 13
▫️2 + 2 + 9 = 13
▫️2 + 3 + 6 = 11
▫️3 + 3 + 4 = 10

Для однозначного определения возрастов котов Артуру снова недостаточно информации. Это означает, что сумма возрастов котов должна быть такой, чтобы соответствующие комбинации были неоднозначными (иначе Артур смог бы сразу дать однозначный ответ без дополнительной информации).

Из приведенных выше комбинаций возрастов котов и их сумм только две комбинации имеют одинаковую сумму, то есть являются неоднозначными:

▫️1 + 6 + 6 = 13
▫️2 + 2 + 9 = 13

Значит, номер дома Артура — 13.

Однако для однозначного определения возрастов котов Артуру информации вновь недостаточно. Тогда Тимур добавил, что младший котик — черный. Это указывает на то, что один из котов младше двух других.

✔️ Из двух приведенных выше комбинаций единственный младший котик есть только в комбинации 1 + 6 + 6 . Таким образом, Артур определил возраст котов Тимура:

1 год
6 лет
6 лет

Ставьте ❤️ к посту, если справились с задачей. 😎

📌 Если у вас тоже есть интересные задачи, отправляйте их в наш телеграм-бот @pygen_ru_bot. 👌

#разборзадачи

Поколение Python 🐍

25 Oct, 14:17


Друзья, принесли вам вечернее развлечение! 😉

Давайте в комментариях под этим постом соберем лучшие отмазки айтишников. 😺

Мы начнем: "Вчера работало!".

Теперь вы.

Ставьте реакцию:

😎 — если вы мастер отмазок
🤣 — если ваш код съела собака

#поколениеpython

Поколение Python 🐍

25 Oct, 07:01


Друзья, поговорим о нотациях в программировании и о том, какие из них принято использовать в Python. 🖥

📍 Нотация — это соглашение об именовании переменных, функций и других сущностей в программном коде. Существует множество различных нотаций. Рассмотрим наиболее популярные из них:

🟢 змеиная нотация — snake_case 🐍

Слова в именах объектов разделяются символом нижнего подчеркивания, при этом каждое слово пишется со строчной буквы. Данная нотация называется змеиной потому, что при ее использовании слова в именах объектов как бы ползут по строке, напоминая змею.

🟢 верблюжья нотация — camelCase 🐫

Первое слово в имени объекта пишется со строчной буквы, а все следующие — с заглавной. При этом разделителей между словами нет. Торчащие посреди итогового имени заглавные буквы напомнили кому-то горбы верблюда — так возникло название нотации.

Существует также второй вариант верблюжьей нотации, в котором первое слово имени объекта пишется с заглавной буквы. Такую версию нотации называют UpperCamelCase или PascalCase — в честь языка программирования Pascal, в котором так именуются переменные, процедуры и функции.

🟢 шашлычная нотация — kebab-case 🍢

Слова в именах объектов разделяются дефисом, при этом каждое слово пишется со строчной буквы. Свое название эта нотация получила из-за схожести внешнего вида имен объектов с насаженным на шампур шашлыком.

📍 В Python используются змеиная и верблюжья нотации. Имена переменных, функций, методов и модулей принято писать в snake_case, а имена классов — в UpperCamelCase.

‼️‼️‼️❗️ Соглашения об именах в Python утверждены в документе PEP 8. Эти соглашения носят рекомендательный характер, то есть не требуют строгого выполнения. Однако чтобы ваш код был легко читаемым и понятным для всех программистов на Python, стоит соблюдать рекомендации, описанные в этом документе.

Ставьте реакцию:

❤️ — если знали все эти нотации
👀 — если узнали о некоторых впервые

⤵️ А вы соблюдаете соглашения об именах, утвержденные в PEP 8? Делитесь в комментариях!

#поколениеpython #нотации #полезныйматериал

Поколение Python 🐍

24 Oct, 09:24


Друзья, в онлайн-магазине "Поколения" новая коллекция для фанатов математики! 🥳 В нее входят кружки, футболки, свитшоты, худи и носки.

🤍 А КОНКРЕТНЕЕ: 🤍

футболка с бутылкой Клейна
футболка "Число π"
свитшот "Be Greater Than Average"
худи с основным тригонометрическим тождеством
кружка "Мыслите критически"
кружка "Математические формулы"
носки "Геометрический гений"
носки "Шпаргалка"
и многое другое!

Часть дизайнов разработана совместно с каналом Wild Mathing для всех, кто любит математику за красоту, а не ради оценки.

🟪 Wild Mathing — это ютуб-канал (и сообщество в VK), популяризующий математику. На нем можно найти визуализацию теорем, истории великих ученых и, конечно, красивые задачи. Обязательно подпишитесь! 🟪

🛍 Каталог с новинками доступен по ссылке.

😮😮😮🎁 Всем, кто сделает заказ на сумму от 2 тысяч рублей до 1 ноября, бесплатно положим в посылку:

🔘два блокнота
🔘уточку
🔘стикеры
🔘пин-значок
🔘коврик для мышки
🔘картхолдер

⚠️⚠️⚠️⚠️⚠️ Вы можете получить дополнительные подарки на сайте магазина, раскрутив колесо фортуны. 🍀

Поддержите нас лайком ❤️ (и покупкой 😂) — мы очень старались!

#мерч #поколениеpython #wild #wildmathing #math

Поколение Python 🐍

23 Oct, 06:46


Друзья, сегодня поговорим о понятии "алгоритм". 😉

📍Алгоритм — это последовательность действий, которые нужно выполнить, чтобы решить определенную задачу.

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

1️⃣ подойти к светофору
2️⃣ посмотреть на его свет
3️⃣ если горит зеленый, то перейти дорогу
4️⃣ если горит красный, то подождать, пока загорится зеленый, и уже тогда перейти дорогу

В настоящее время большинство алгоритмов предназначены для реализации на компьютере, однако понятие алгоритма возникло задолго до появления вычислительных машин. Первоначально под словом "алгоритм" понимали способ выполнения арифметических действий над числами. В дальнейшем это понятие стали использовать для обозначения любой последовательности действий, приводящей к решению поставленной задачи.

📍Значение слова "алгоритм" очень схоже со значением слов "рецепт" или "способ". Однако любой алгоритм, в отличие от них, обязательно обладает следующими свойствами:

1️⃣ Дискретность — выполнение алгоритма разбивается на последовательность действий. Только выполнив одно действие, можно приступать к исполнению следующего.

2️⃣ Понятность — алгоритм не должен содержать команд, смысл которых может восприниматься неоднозначно.

3️⃣ Детерминированность — если алгоритм многократно применяется к одному и тому же набору исходных данных, то каждый раз должны получаться одни и те же промежуточные результаты и один и тот же выходной результат.

4️⃣ Конечность — при точном исполнении команд алгоритма процесс должен прекратиться за конечное число шагов, и при этом должен быть получен ответ на вопрос задачи.

5️⃣ Массовость — алгоритм должен решать не одну частную задачу, а класс задач.

Для чего изучать алгоритмы?

✔️ без алгоритмов невозможно создать компьютерную программу
✔️ знание алгоритмов позволяет эффективно решать задачи и оптимизировать производительность программ
✔️ многие IT-компании наряду с техническим собеседованием на знание языка проводят алгоритмическое собеседование, на котором проверяют умение строить алгоритм для решения заданной задачи

📍Кстати, слово "алгоритм", как и слово "алгебра", произошло от имени математика Аль-Хорезми.

🔔🔔🔔🔔🔔🔔 Скоро выйдет наш новый курс по алгоритмам. Если он вам интересен, оставьте заявку по ссылке, и вы первыми узнаете о выходе курса!

Ставьте реакцию:

🔥 — если знакомы с понятием алгоритма
👀 — если узнали о нем впервые

#поколениеpython #алгоритм #курспоалгоритмам

Поколение Python 🐍

21 Oct, 11:04


Друзья, возвращаемся к вам с новым словом недели! Сегодня поговорим о сериализации. 😎

⭐️ Сериализация является важной частью разработки ПО и широко используется в различных областях. Она позволяет сохранять состояние объектов между запусками программы, а также передавать данные по сети или между компонентами системы.

⭐️ Главная идея состоит в том, что сериализованный формат — это набор байтов или строка, которую, в отличие от самого объекта, можно легко сохранить на диск или передать другой программе. А значит, задача сохранения данных сводится к простому сохранению набора байтов (бинарный формат) или строки (текстовый формат).

⭐️ Процесс, преобразующий данные из сериализованного формата обратно в объект, называется десериализацией. В результате десериализации мы восстанавливаем объект с его исходным состоянием.

⭐️ Многие языки программирования включают инструменты сериализации и десериализации данных. Например, Python предоставляет модуль json для сериализации в текстовый формат и модуль pickle для сериализации в бинарный формат.

Почитать подробнее о сериализации и десериализации можно по ссылке.

Ставьте реакцию:

❤️ — если знали, что такое сериализация
👀 — если слышите о ней впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

21 Oct, 06:31


Друзья, сегодня решаем задачу про самое дорогое в жизни каждого человека — про котиков! 🐈‍⬛

У Тимура трое котов: Кемаль, Матеша и Сырок. Артур пришел к Тимуру в гости, и между ними произошел диалог.

Артур: Сколько лет твоим котикам?
Тимур: Произведение их возрастов равно 36.
Артур: Информации недостаточно.
Тимур: Сумма возрастов моих котов равна номеру дома, в котором ты живешь.
Артур: Информации все еще недостаточно.
Тимур: Младший кот — черный.

После этого Артур сумел назвать возраст всех котов Тимура. А вы справитесь? 🧐

Пишите ответы и ход своих размышлений в комментариях, не забывая про скрытый текст.

Ставьте реакцию:

🔥 — если решили задачу быстро
👀 — если пришлось поломать голову

#задача

Поколение Python 🐍

20 Oct, 12:03


Друзья, подводим итоги розыгрыша худи! 🥳

Победителем стал Evgen Yakubovskiy. Он получит фирменное худи с любым дизайном от "Поколения Python" на выбор. 🎁

Проверить результат розыгрыша можно по ссылке. 🎲

Ставьте реакцию:

❤️ — если рады за победителя от всего сердца
😈 — если рады, но не от всего сердца 🤣

На новой неделе мы проведем еще один конкурс — разыграем Telegram-премиум среди подписчиков нашего канала. Не пропустите! 😉

#розыгрыш #итоги

Поколение Python 🐍

19 Oct, 13:39


Друзья, а вот и разбор задач про количество цифр в числе. 😎

1️⃣ Поскольку нам известно значение логарифма log₁₀14, воспользуемся свойством логарифма, которое позволяет вынести показатель степени подлогарифмического выражения за логарифм, и найдем значение десятичного логарифма числа 14²⁰:

🟢log₁₀14²⁰ = 20⋅log₁₀14 = 20⋅1.1461 ≈ 22.922

Округлим до ближайшего целого в меньшую сторону и добавим единицу:

🟢⌊22.922⌋ + 1 = 22 + 1 = 23

Таким образом, число 14²⁰ имеет 23 цифры.

2️⃣ Поскольку нам известны значения логарифмов log₁₀2 и log₁₀3 , воспользуемся свойствами логарифма, которые позволяют вынести показатель степени подлогарифмического выражения за логарифм и записать логарифм произведения в виде суммы логарифмов, чтобы упростить выражение, после чего найдем значение десятичного логарифма числа 48¹². Вынесем показатель степени подлогарифмического выражения за логарифм и представим число 48 в виде произведения чисел 2 и 3:

🟢log₁₀48¹² = 12⋅log₁₀48 = 12⋅log₁₀(2⁴⋅3) = 12⋅(4⋅log₁₀2 + log₁₀3) ≈ 12⋅(4⋅0.301 + 0.4771) ≈ 20.1732

Округлим до ближайшего целого в меньшую сторону и добавим единицу:

🟢⌊20.1732⌋ + 1 = 20 + 1 = 21

Таким образом, число 48¹² имеет 21 цифру.

Ставьте 🔥 к посту, если справились с задачами.

#разборзадач

Поколение Python 🐍

19 Oct, 09:48


Друзья, разбираем задачу про раскрашенные кубики! 😻

📍 Сначала посчитаем, сколько вариантов раскраски кубика можно сделать с учетом повторений. Для этого представим, что мы взяли кубик, и он никак не вращается. Тогда мы можем раскрасить грани кубика следующим образом:

🔘переднюю — в 6 цветов
🔘заднюю — в 5 цветов
🔘верхнюю — в 4 цвета
🔘нижнюю — в 3 цвета
🔘левую — в 2 цвета
🔘правую — в 1 цвет

Чтобы найти общее количество вариантов раскрасок, нужно перемножить эти числа:

🔘1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ 5 ⋅ 6 = 720

Это максимальное количество всех вариантов окраски. Среди них обязательно будут неуникальные варианты, когда мы развернем кубик и получим точно такой окрас, как и в другом случае.

📍 Теперь посчитаем, сколько различных положений на старте может принимать кубик. Так мы узнаем количество повторов, которые получатся при окраске.

Когда мы берем кубик в руки лицом к себе, мы можем сделать это шестью разными способами, потому что у кубика 6 граней. Еще мы можем 4 раза вращать его по часовой стрелке, глядя на ту же лицевую сторону. Получается, у нас есть 24 варианта, чтобы зафиксировать кубик в одной позиции на старте. Это и есть количество повторов при окраске, потому что мы можем повернуть кубик так, как нам нужно, чтобы найти дубль.

📍 В итоге у нас есть 720 вариантов окраски и 24 положения на старте. Теперь мы можем узнать количество уникальных окрасок кубика, разделив одно на другое:

🔘720 / 24 = 30

Таким образом, Кемаль сможет отправить уникальные кубики только 30 победителям розыгрыша, а 2 остальных получат уже неуникальную раскраску.

Ставьте ❤️ к посту, если справился с задачей. 😎

📍 Если у вас тоже есть интересные задачи, отправляйте их в наш телеграм-бот @pygen_ru_bot. 👌

#разборзадачи

Поколение Python 🐍

18 Oct, 14:18


Друзья, слепой метод набора на клавиатуре был изобретен аж в 1878 году! 😱 Благодаря ему офисный клерк Франк Макгуррин выиграл 500 долларов на соревнованиях по скоропечатанию со скоростью 97 слов в минуту.

Предлагаем проверить вашу скорость набора с помощью клавиатурных гонок! 🏎 Участвуйте и пишите свой результат в комментариях. Посмотрим, кто тут самый быстрый программист. 😎

Ставьте реакции:

🔥 — если владеешь слепым десятипальцевым методом
👀 — если двумя пальцами тык-тык

#слепойметодпечати

Поколение Python 🐍

18 Oct, 06:45


Друзья, а вы знали, что начиная с Python 3.11 существует ограничение на преобразования между типами int и str ? 🥲

📍 В Python 3.11 и выше при преобразовании строки в целое число и наоборот длина исходной или итоговой строки не должна превышать 4300 символов.

Например, преобразование int('1' * 4300) завершится успешно, однако преобразование int('1' * 4301) вызовет ошибку ValueError: Exceeds the limit (4300) for integer string conversion.

⭐️ Такое ограничение было добавлено в Python для защиты от атак типа "отказ в обслуживании" и применяется к числам в десятичной или другой системе счисления, основание которой не является степенью двойки.

⭐️ Дело в том, что целые числа в Python представляют собой числа произвольной длины, хранящиеся в двоичном виде. Не существует быстрого алгоритма для преобразования строки в двоичное целое число или двоичного целого числа в строку, поэтому такие преобразования могут выполняться долго даже на быстром процессоре. Этим и пользуются злоумышленники.

🔘 Ограничение в 4300 символов можно изменить с помощью функции set_int_max_str_digits() встроенного модуля sys, однако этого лучше не делать без крайней необходимости.

Почитать подробнее об ограничении на преобразования между типами int и str в Python можно по ссылке.

Ставьте реакцию:

😎 — если знали об этом ограничении
👀 — если узнали о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#поколениеpython #int #str

Поколение Python 🐍

17 Oct, 09:26


Друзья, недавно мы рассказывали про головоломку "Ханойские башни". Принесли вам возможность поиграть в нее не только на экране компьютера! 😍

🟢Ханойские башни в онлайн-магазине "Поколения"

Наша головоломка состоит аж из 10 колец, что позволяет менять уровень сложности: от самого простого с 3 кольцами до взрывающих мозг 8-10 колец. Кстати, самое короткое решение для 10 колец состоит из 1023 ходов. 😱

Игра "Ханойские башни" станет отличным подарком для программиста, а также поможет развить логическое мышление у детей. Игра упакована в пластиковый кейс, в котором ее удобно хранить и перевозить.

Помимо ханойских башен, вы можете купить в нашем магазине настольные игры серии Brainy Trainy, которые, как следует из названия, помогут потренировать мозг:

🟢Brainy Trainy "Программирование"
🟢Brainy Trainy "Инженерное мышление"
🟢Brainy Trainy "Логика"
🟢Brainy Trainy "Развитие памяти"
🟢Brainy Trainy "Железная логика"

🎁 Всем, кто купит игру "Ханойские башни" до 25 октября, в подарок также положим настольную игру "Тетрис-Дженга" и резиновую уточку. 🦆

⚠️⚠️⚠️⚠️⚠️ А еще вы можете получить дополнительные подарки на сайте магазина, раскрутив колесо фортуны. 🍀

Поддержите нас лайком ❤️ (и покупкой 😂) — мы очень старались!

#мерч #ханойскиебашни

Поколение Python 🐍

16 Oct, 10:12


Друзья, принесли вам две любопытные задачки на определение количества цифр в числах. 😎

1️⃣ Первая задача простая:

Определите количество цифр в числе 14²⁰, если известно, что log₁₀14 ≈ 1.1461.

2️⃣ Вторая задача немного сложнее:

Определите количество цифр в числе 48¹², если известно, что log₁₀2 ≈ 0.301 и log₁₀3 ≈ 0.4771.

💡Подсказка: воспользуйтесь свойствами логарифмов 4 и 6, указанными в посте.

Ставьте реакцию:

🔥 — если решили быстро
👀 — если пришлось поломать голову

#задача #логарифм

Поколение Python 🐍

16 Oct, 06:59


Друзья, вы наверняка сталкивались с классической задачей — подсчет количества цифр в целом положительном числе. Сегодня разберем решение этой задачи с помощью логарифма.

Чтобы понять основную идею этого решения, рассмотрим значения десятичных логарифмов некоторых положительных целых чисел:

🟢log₁₀81 = 1.9084
🟢log₁₀100 = 2
🟢log₁₀167 = 2.2227
🟢log₁₀718 = 2.856
🟢log₁₀1000 = 3

Несложно заметить, что десятичные логарифмы трехзначных чисел заключены в пределах от 2 включительно до 3 не включительно. Действительно, если нам дано некоторое трехзначное число n, то для него справедливо неравенство:

🟢10² ≤ n < 10³

Прологарифмировав все части неравенства по основанию 10, получим следующее:

🟢log₁₀10² ≤ log₁₀n < log₁₀10³
🟢2 ≤ log₁₀n < 3

Тогда если округлить десятичный логарифм трехзначного числа n до ближайшего целого в меньшую сторону и добавить к результату единицу, получится число 3 — количество цифр в числе. Например, для числа 718, десятичный логарифм которого равен 2.856:

🟢⌊2.856⌋ + 1 = 2 + 1 = 3

Теперь предположим, что нам дано некоторое число n, которое состоит из d цифр. Для такого числа справедливо неравенство:

🟢10ᵈ⁻¹ ≤ n < 10ᵈ

Прологарифмировав все части неравенства по основанию 10, получим следующее:

🟢log₁₀10ᵈ⁻¹ ≤ log₁₀n < log₁₀10ᵈ
🟢d - 1 ≤ log₁₀n < d

Тогда если округлить десятичный логарифм произвольного числа n до ближайшего целого в меньшую сторону, левая часть неравенства обратится в равенство, из которого можно выразить переменную d, представляющую количество цифр в числе n:

🟢d - 1 = ⌊log₁₀n⌋
🟢d = ⌊log₁₀n⌋ + 1

Таким образом, в основе данного решения лежит следующее правило:

📌 Количество цифр в произвольном положительном целом числе равняется десятичному логарифму этого числа, округленному до целого в меньшую сторону и увеличенному на единицу

🔔🔔🔔🔔🔔🔔 Скоро выйдет наш новый курс по алгоритмам, в котором есть уроки по логарифмам. Если вам интересен этот курс, оставьте заявку по ссылке, и вы первыми узнаете о его выходе!

Ставьте реакцию:

❤️ — если знали о таком решении задачи
👀 — если узнали о нем впервые

#поколениеpython #логарифм #курспоалгоритмам

Поколение Python 🐍

15 Oct, 09:10


Брахма установил в храме города Ханоя бронзовую плиту с тремя алмазными стержнями и поместил на первый 64 золотых диска, от большего к меньшего снизу вверх. Когда монахи завершат переносить диски на третий стержень в том же порядке, храм рассыплется в прах и завершится жизнь Брахмы — то есть наступит конец света... 🧘

Эту красивую историю придумал французский математик Эрик Люка, чтобы прорекламировать свою игрушку под названием ханойские башни. 😉

Ханойские башни представляют собой три стержня и диски разного размера. Изначально все кольца расположены на левом стержне, сверху вниз в порядке увеличения. Задача игрока — переместить все диски на самый правый стержень.

У игрушки несколько простых правил:

1️⃣ за один раз переносим одно кольцо
2️⃣ нельзя класть большее кольцо на меньшее
3️⃣ задачу нужно решить за наименьшее возможное количество ходов

Вот уже более ста лет эта игра привлекает математиков и особенно программистов, потому что имеет рекурсивное решение.

‼️‼️‼️❗️ Минимальное число перекладываний, необходимое для решения головоломки, равно 2ⁿ − 1, где n — число дисков. Таким образом, для 5 дисков потребуется 31 перекладывание, а для 64 дисков потребуется 18446744073709551615 перекладываний. Если бы монахи, работая день и ночь, делали каждую секунду одно перемещение диска, их работа продолжалась бы почти 585 миллиардов лет. 😱

Поиграть в игру онлайн можно по ссылке.

Ставьте реакцию:

🔥 — если решали задачу о ханойских башнях
👀 — если слышите о них впервые

#япознаюмир #ханойскиебашни

Поколение Python 🐍

14 Oct, 12:56


Друзья, принесли вам новое слово недели! Сегодня поговорим о логировании.😎

⭐️ Логирование (ведение журнала) позволяет отслеживать, что, где, когда и при каких обстоятельствах происходило в программе, а также из-за чего возникла та или иная ошибка.

⭐️ Место, куда записывается информация, называется логом. Для записи обычно используют файлы с расширением .log, которые в дальнейшем можно использовать для анализа работы кода.

✔️ Логированию подлежит все, что может помочь при поиске и исправлении ошибок.

‼️‼️‼️❗️ Не стоит логировать конфиденциальные данные, например, логин и пароль пользователя.

⭐️ В Рython существует несколько инструментов для ведения логов. Наиболее популярным из них является встроенный пакет logging. Подробнее почитать о нем можно по ссылке.

Ставьте реакцию:

🔥 — если знали, что такое логирование
👀 — если слышите о нем впервые

🔝🔝🔝Сохраняйте пост в избранное, точно пригодится! ✍🏻

#словонедели #поколениеpython

Поколение Python 🐍

14 Oct, 06:24


Друзья, утро начинается не с кофе, а с задачи от "Поколения"! 😈

Однажды кот Тимура Кемаль решил провести собственный конкурс и пообещал разыграть 32 уникальных приза. 🎁

Каждый приз — это кубик с уникальной окраской. Каждую грань Кемаль раскрасил вручную в свой цвет. На палитре Кемаля всего 6 цветов, смешивать их он не любит (у него же лапки).

Сможет ли Кемаль соблюсти условия розыгрыша и сделать 32 уникальных раскрасок кубиков? 🤔

Пишите свои решения и ответы в комментариях, не забывая про скрытый текст.

‼️‼️‼️❗️ Если два кубика можно повернуть так, чтобы у них совпали по цветам все грани, это считается одинаковой раскраской!

Ставьте реакцию:

🔥 — если решили быстро
👀 — если пришлось поломать голову

#задача

Поколение Python 🐍

13 Oct, 10:56


Друзья, в 2020 году мы выпустили наш первый курс для тех, кто хочет научиться программировать — "Поколение Python": курс для начинающих! 🔥

Он стал одним из самых популярных курсов для изучающих основы программирования и победил в конкурсе Stepik Awards 2020 в номинации "Лучший бесплатный курс"! 🥳

Сегодня в линейку наших курсов также входят:

🟢"Поколение Python": курс для продвинутых
🟢"Поколение Python": курс для профессионалов
🟢"Поколение Python": ООП
🟢"Поколение Python": базы данных и SQL для начинающих

Делимся с вами отзывами студентов наших курсов! Мы растем благодаря вам! 😇

🔔🔔🔔🔔🔔🔔 Ближайший новый курс — это "Поколение Python: алгоритмы и структуры данных для начинающих". Если он вам интересен, оставьте заявку по ссылке, и вы первыми узнаете о его выходе!

❤️ Промокод HAPPYBD дает скидку 32% на покупку наших курсов через сайт pygen.ru.

Ставьте ❤️ к посту, если любите курсы "Поколение Python"!

#поколениеpython #отзывы

Поколение Python 🐍

12 Oct, 08:18


Друзья, разберем задачу про покупки Кемаля! 😺

⭐️ Кемаль покупал в магазине номер для квартиры. Каждая цифра номера стоит 40 рублей. Если написать с кавычками и числами, то станет понятнее:

🟢за "1" — 40 рублей (одна цифра)
🟢за "12" — 80 рублей (две цифры)
🟢за "120" — 120 рублей (три цифры)

Ставьте ❤️ к посту, если справились с задачей. 😎

📌 Если у вас тоже есть интересные задачи, отправляйте их в наш телеграм-бот @pygen_ru_bot. 👌

#разборзадачи

Поколение Python 🐍

11 Oct, 14:33


Друзья, решили провести для вас небольшой флешмоб и розыгрыш. 😎

Возьмите вашу старую детскую фотографию и воссоздайте картинку в настоящем! 👶👨‍🦰

Исходную и свежую фотографию выложите в комментариях к этой записи, а в воскресенье, 20 октября, великий рандом выберет из числа участников победителя, которому мы подарим фирменное худи с любым дизайном от "Поколения Python" на выбор. 😉

⚠️ Обязательное условие участия в розыгрыше — поставить любую реакцию ❤️ к этому посту.

#розыгрыш

Поколение Python 🐍

11 Oct, 06:38


Друзья, хорошие новости! На этой неделе вышла новая версия Python — Python 3.13. 🥳 В этом релизе появилось множество новых функций и оптимизаций. Поговорим о наиболее важных из них.

🔘 Экспериментальный многопоточный режим

Python 3.13 поддерживает многопоточное выполнение кода с отключенной глобальной блокировкой интерпретатора (GIL). Это позволяет использовать всю доступную вычислительную мощность процессора за счет параллельного запуска потоков на разных ядрах. На данный момент эта функция является экспериментальной и по умолчанию отключена, но работа над этим улучшением продолжается! Пока что для многопоточного выполнения требуется особый исполняемый файл.

🔘 Экспериментальный JIT-компилятор

При настройке и сборке Python 3.13 появилась возможность включить компилятор Just-in-Time (JIT), который может ускорить работу некоторых программ на Python. JIT-компилятор на данный момент также является экспериментальной функцией.

🔘 Новые возможности аннотации типов

В Python 3.13 расширен встроенный модуль typing. В него добавлен ряд новых аннотаций типов, которые позволяют более тонко настроить проверку типов в программе.

🔘 Улучшены сообщения об ошибках

В Python 3.13 продолжают улучшаться сообщения об ошибках. В новой версии важные фрагменты сообщений об ошибках в терминале по умолчанию выделяются определенным цветом, что упрощает чтение и понимание ошибок. При этом цвет сообщений можно настроить.

Ознакомиться подробнее со всеми нововведениями можно в документации в разделе "Что нового в Python 3.13".

Ставьте реакцию к этому посту:

🔥 — если знаете о нововведениях
👀 — если слышите о них впервые

#поколениеpython #полезныйматериал

Поколение Python 🐍

10 Oct, 08:18


Друзья, а вы знаете, как появилась раскладка QWERTY? 🧐

QWERTY

🟢Создана в 1878 году Кристофером Шоулзом для пишущей машинки Remington No.2
🟢Получила название по шести первым буквам верхнего ряда
🟢Стала основой для раскладок на множестве языков
🟢До сих пор является стандартом по всему миру

В первых двухрядных пишущих машинках Шоулза была проблема: если набирать близкие друг к другу буквы, их нажимные рычаги сцеплялись. Тогда он придумал QWERTY, где символы расположены в четыре диагональных ряда — это уменьшало риск застревания. 👌

Раскладку QWERTY часто критикуют как несовременную: в клавиатуре больше нет застревающих рычагов, а вот эргономичность QWERTY далека от идеальной.

Существуют альтернативные раскладки.

⭐️ РАСКЛАДКА ДВОРАКА

Разработана в 1936 году Августом Двораком, чтобы уменьшить усталость рук при наборе. В ней предусмотрено частое чередование рук, редкие буквы расположены в нижнем ряду, больше работы предоставлено правой руке.

⭐️ COLEMAK

Cоздана в 2006 году Шаем Коулманом для оптимизации работы на клавиатуре компьютера, а не печатной машинки. Буквы перераспределены так, что средний ряд, самый удобный для набора, используется на 40% чаще, чем в раскладке QWERTY. 😱

Ставьте реакцию:

🔥 — если знали, как появилась QWERTY
👀 — если прочитали об этом впервые

#япознаюмир #qwerty