Поколение Python 🐍
50.3K subscribers
2K photos
16 videos
6 files
866 links
Серия курсов по языку Python от BEEGEEK 🐝.

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

Перечень РКН: https://www.gosuslugi.ru/snet/673650d605391b3bfb5541c0
Download Telegram
Друзья, продолжаем рубрику "Слово недели"! Сегодня поговорим о трассировке стека. 😌

🌱При возбуждении исключений Python отображает отчет, который содержит информацию о возникших исключениях: тип исключения, сообщение с информацией об исключении, код, который привел к возникновению исключения, и многое другое. Такой отчет называется обратной трассировкой стека.

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

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

🌱Объекты исключений включают атрибут __traceback__, который ссылается на специальный объект traceback. Этот объект содержит различную информацию о трассировке исключений. Для работы с этими объектами используется одноименный модуль traceback. Документация по объектам traceback и модулю traceback доступна по ссылке и ссылке.

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

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

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

#словонедели #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
👀89🔥4395👍3❤2😍1
Друзья, вспоминаем школьные годы и решаем классическую задачку! 😎

По реке плывет пароход. За 7 часов он пройдет 20 км по течению реки и столько же назад. При этом скорость течения реки — 3 км/ч. А какова скорость самого парохода? 🤔

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

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

🔥 — если помните такие задачи со школы
👀 — если успели их подзабыть

#задача #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥75👀30👍54❤33❤‍🔥2🍾2
Друзья, а вы слышали про парадокс дней рождения? 🤔

Суть в том, что в группе, состоящей хотя бы из 23 человек, вероятность совпадения числа и месяца рождения у двух из них превышает 50%. Более того: для группы из 60 и более человек вероятность совпадения дней рождения составляет около 99%! 😮

😉 Это кажется странным, но на самом деле все происходит в полном соответствии с теорией вероятности.

❤️❤️❤️❤️❤️❤️❤️

Допустим, в апреле на курс “Поколения” по SQL и базам данных записалось 30 новых студентов. Для простоты примем, что в любом году 365 дней и вероятность родиться в каждый из них абсолютно одинакова.

❤️ Интуитивный подход

Вероятность родиться в один из дней года составляет 1/365. Чтобы посчитать вероятность совпадения дней рождения, умножим 1/365 на 30 человек в группе и получим 30/365 = 0,08 = 8%.

❤️Такое рассуждение неверно: ведь мы сравниваем не одного человека со всеми остальными, а все возможные пары людей в группе (а их целых 30*29/2 = 435).

❤️Математический подход

Студент Алан мог родиться в любой из 365 дней. Стопроцентную вероятность совпадения дней рождения обозначим за 1. Тогда вероятность того, что дни рождения студента Алана и второго студента по имени Борис не совпадают, равна 1 − 1/365.

Вероятность того, что день рождения последней 30-й студентки в группе Элеоноры не совпадает с предыдущими, составляет 1 − 29/365.

😵‍💫 Чтобы вычислить вероятность совпадения любых двух дней рождения, нам нужно перемножить эти значения для всей группы:

1− (1− 1/365) * (1−2/365) *... * (1−29/365) ≈ 0,71

То есть на самом деле вероятность совпадения составляет более 70%! 😮

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

🔥 — если знаете людей, которые родились с вами в один день
👀 — если не встречали таких людей

#поколениеpython #япознаюмир
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥140👀85👍11🤷‍♂6❤43🤯1🏆1🙊11
Друзья, а вот и новый вопрос с собеседований! 😉

Какую функцию выполняет в Python магический метод __new__()? Какие аргументы он принимает и что возвращает? В какой момент происходит вызов данного метода?

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

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

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

#поколениеpython #собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
😎62🔥316👍33🌚2❤1👾1
Друзья, сегодня поговорим о группировке данных в SQL. 😌

📎 Группа в SQL — это набор записей, которые определенным образом связаны друг с другом. Создание групп выполняется с помощью оператора GROUP BY, после которого указывается название поля, определяющего принцип группировки. Так, две записи попадают в одну группу, если их значения поля, указанного после оператора GROUP BY, совпадают.

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

SELECT artist, COUNT(*) AS num_of_songs
FROM Songs
GROUP BY artist;

Часть запроса GROUP BY artist говорит о том, что записи при извлечении должны быть сгруппированы по полю artist, в результате чего в части запроса SELECT artist, COUNT(*) AS num_of_songs выполняется работа не со всеми записями из таблицы, а с определенной группой записей. Таким образом, для каждой группы определяются значения полей artist и num_of_songs, первое из которых содержит название исполнителя, второе — количество записей в группе, что соответствует количеству песен исполнителя.

📎 После оператора GROUP BY можно указывать несколько полей. В таком случае группировка будет выполняться по всем перечисленным полям. Другими словами, две записи попадут в одну группу, если их значения по всем полям, указанным после оператора GROUP BY, совпадают.

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

SELECT artist, album,
COUNT(*) AS num_of_songs
FROM Songs
GROUP BY artist, album;

📎 При использовании группировки для извлечения доступен ограниченный объем данных:

🟢поля группировки
🟢результаты агрегатных функций
🟢константы

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

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

🔥 — если знали об операторе GROUP BY
👀 — если слышите о нем впервые

#поколениеpython #базыданных #sql
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥99👀23👍8❤77💯33😁1😱1💋1👾1
Друзья, до 6 июня магазин мерча в отпуске! Все заказы, сделанные в этот период, отправим с 9 июня. 😉

🌞 За заказ от 3000 рублей, сделанный во время отпуска, мы положим приятный бонус за ожидание:

⏺игру "Ханойские башни"
⏺5 пар носков
⏺5 блокнотов
⏺2 коврика для мышки
⏺2 обложки на паспорт
⏺2 картхолдера
⏺2 попсокета
⏺9 объемных стикеров
⏺резиновую уточку
⏺стикерпак

🛍🛍🛍 можно купить тут: shop.pygen.ru

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

🔥 — если вы тоже уже в отпуске
❤️ — если ваш отпуск еще не начался
👀 — что такое отпуск?

#поколениеpython #мерч
Please open Telegram to view this post
VIEW IN TELEGRAM
👀35❤13🔥12❤‍🔥2👍22👨‍💻1😎11
Друзья, отвечаем на вопрос с собеседований. 😌

✔️ В Python магический метод __new__() вызывается самым первым. Он отвечает за создание и возврат нового пустого экземпляра класса, который передается в метод __init__() для инициализации, то есть для установки его атрибутам необходимых значений.

▫️В качестве первого обязательного аргумента метод __new__() принимает класс, а затем, как правило, произвольное количество позиционных и именованных аргументов.

Приведенный ниже код:
class MyClass:
def __new__(cls, *args, **kwargs):
instance = object.__new__(cls)
return instance


obj = MyClass()

print(obj)
print(type(obj))


выводит (адрес может отличаться):
<__main__.MyClass object at 0x000002A321CF6C20>
<class '__main__.MyClass'>

Конструкция object.__new__(cls) позволяет обратиться к методу __new__() базового класса object и создать экземпляр класса cls, в данном случае класса MyClass.

▫️Аргументы, указываемые при вызове класса, передаются как в метод __init__(), так и в метод __new__(). Поэтому для большей гибкости метод __new__() всегда рекомендуется определять именно с произвольным количеством позиционных и именованных параметров.

Приведенный ниже код:
class MyClass:
def __new__(cls, *args, **kwargs):
print(args, kwargs)
instance = object.__new__(cls)
return instance


obj = MyClass(1, 2, c=3, d=4)


выводит:
(1, 2) {'c': 3, 'd': 4}

▫️Первым аргументом метода __new__() является cls, поэтому может сложиться впечатление, что он является методом класса. На самом деле метод __new__() является статическим методом, так как при его вызове аргумент cls необходимо указывать явно. Однако при его определении в классе не нужно использовать декоратор @staticmethod. Python делает это автоматически.

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

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

#поколениеpython #собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👀38🔥3113👍7❤33🤝2✍1
Друзья, сегодня поговорим о транзитивности операторов. 😵‍💫

📎Для того чтобы проверить, равны ли значения трех и более переменных, можно использовать цепочку сравнений с оператором ==.

Приведенный ниже код:
a = b = c = 1

print(a == b == c)

выводит True.

Здесь выражение a == b == c эквивалентно выражению a == b and b == c, при этом справедливо утверждение: если a == b и b == c, то a == c.

Данное свойство оператора == называется транзитивностью.

📎Некоторые операторы не обладают свойством транзитивности. Например, для того чтобы проверить, различны ли значения трех и более переменных, нельзя использовать цепочку сравнений с оператором !=, поскольку это может привести к ошибочным результатам.

Приведенный ниже код:
a, b, c = 1, 2, 1

print(a != b != c)

выводит True.

Здесь выражение a != b != c эквивалентно выражению a != b and b != c, однако условие a != c не учитывается. Иными словами, данная цепочка сравнений проверяет лишь то, что b отличается от a и c, и ничего не говорит о том, отличается ли a от c.

✔Для корректной проверки переменных на неравенство можно использовать явное объединение всех сравнений с помощью оператора and.

Приведенный ниже код:
a, b, c = 1, 2, 1

print(a != b and a != c and b != c)

выводит False.

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

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

#поколениеpython #полезныйматериал
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥95👀78❤‍🔥98👍44❤2✍1😱1
Друзья, мы недавно сформулировали три заповеди, которые стоит соблюдать каждому студенту "Поколения". 😁

💫💫💫💫💫💫💫💫

💫 Прежде чем решать задачу, прочитай ее условие
💫 Если решил задачу, прочитай ее условие
💫 Если не решил задачу, прочитай ее условие

Пишите в комментариях, какие еще нужны полезные заповеди для студентов "Поколения"! 😉

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

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

#поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥100👀70😁258💯5👍3🍾22⚡1👨‍💻1
Друзья, разбираем задачу про пароход, плывущий по реке. 🙂

Обозначим искомую скорость парохода за x км/ч (x > 0). Тогда скорости по течению и против течения будут равняться (x + 3) км/ч и (x - 3) км/ч соответственно.

Из формулы S = vt (расстояние равно скорости, умноженной на время) выразим время t = S : v и получим:

🟢20 : (x + 3) ч — время, которое пароход затратил на движение по течению
🟢20 : (x - 3) ч — время, которое пароход затратил на движение против течения

По условию задачи составляем уравнение:

20 : (x + 3) + 20 : (x - 3) = 7.

Такое уравнение приводится к квадратному уравнению 7x² - 40x - 63 = 0. Его положительный корень x = 7. Значит, скорость парохода равна 7 км/ч.

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

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

#разборзадачи #поколениеpython
Please open Telegram to view this post
VIEW IN TELEGRAM
51🔥42👾9👍7👀743🏆2😁1👻1
Друзья, хотим рассказать о мероприятии для школьников, которое получило поддержку "Поколения". 😎

В апреле и мае детский технопарк "Кванториум" города Владикавказа провел цикл мастер-классов по применению математики в современных технологиях.

Что делали на мастер-классах:

➕решали квадратные уравнения с помощью библиотеки math для Python
➕разбирались, как применять знания о координатной плоскости для анимации персонажей в Scratch
➕рассчитывали скорость движения в покадровой анимации
➕и многое другое

😍 Кроме бесценных знаний и навыков, в конце мастер-классов школьники получили подарки от "Поколения": обложки на паспорт и картхолдеры.

☝️☝️☝️☝️ "Поколение" регулярно поддерживает мероприятия, связанны с программированием и точными науками. Например, в прошлом году мы помогли с призами для соревнований по парному экстремальному программированию центру цифрового образования детей "IT-куб" во Владикавказе.

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

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

#поколениеpython #мерч #акция #спонсорство
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
202👀92🔥65❤‍🔥7❤5👏554🆒2😁1🌚1💘1
Друзья, у нас отличные новости: запускаем весеннюю распродажу платных курсов! 😍

💚До 2 июня дарим скидку более 2000 рублей на любой платный курс!

➡️ Стоимость курса со скидкой — 4790 рублей вместо 6900.

🌟 Помните, что курс можно купить сейчас, а пройти в любое удобное для вас время (например, в летнем отпуске 😄).

⚠️ Кроме того, мы сделали дополнительную скидку на пакеты курсов, которые доступны по ссылке. Теперь вы сами можете выбрать курсы, которые купите пакетом! Доступны пакеты из 2, 3 и 4 курсов сразу.

☝️☝️☝️☝️ Со скидками весенней распродажи не суммируются другие наши скидки (для студентов, для учителей и так далее). Скидка по распродаже — максимальная из доступных.

💵💵💵💵 действует при покупке курсов через наш официальный сайт. 😉

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

🔥 — если планируете учиться летом
❤️ — если будете отдыхать
👀 — если придется работать

#поколениеpython #акция #распродажа #ооп #профи #sql #алгоритмы
Please open Telegram to view this post
VIEW IN TELEGRAM
55🔥72👀18❤13👍33💋2❤‍🔥1🥰1👏11
Друзья, сегодня поговорим о методе двух указателей.

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

▫ Указатель — это переменная, которая хранит определенный индекс последовательности и тем самым "указывает" на элемент под этим индексом.

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

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

Приведенный ниже код:
def is_palindrome(s):
left, right = 0, len(s) - 1

while left < right:
if s[left] != s[right]:
return 'не палиндром'
left += 1
right -= 1

return 'палиндром'

print(is_palindrome('abc'))
print(is_palindrome('abcba'))


выводит:
не палиндром
палиндром

Альтернативное решение с применением срезов:

def is_palindrome(s):
return s == s[::-1]


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

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

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

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

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

#поколениеpython #курспоалгоритмам
Please open Telegram to view this post
VIEW IN TELEGRAM
👀94🔥76❤157👍65❤‍🔥1
Друзья, принесли вам новую задачу с собеседований! 😍

🟠🟠🟠🟠🟠🟠
🟠🟠🟠🟠🟠🟠🟠
Рассмотрим список целых чисел [3, 7, 2, 5]. Определим минимальный элемент этого списка и прибавим его к каждому элементу списка. Тогда список примет следующий вид:

[3 + 2, 7 + 2, 2 + 2, 5 + 2] -> [5, 9, 4, 7]

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

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

Функция должна возвращать список nums в том состоянии, в котором он был до того, как к каждому его элементу прибавили минимальный элемент.
🟠🟠🟠🟠🟠🟠🟠

Примеры тестовых данных:

print(restore_values([6, 10]))  # [3, 7]


print(restore_values([2, 2, 2]))  # [1, 1, 1]


print(restore_values([0, 0, 0]))  # [0, 0, 0]


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

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

🔥— если любите находить хитрые способы решения задачи
👀 — если предпочитаете стандартный подход

#поколениеpython #собеседования #задачанакод
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34👀20❤‍🔥127❤64🤔2😱1