en
Feedback
Python: задачки и вопросы

Python: задачки и вопросы

Open in Telegram

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media

Show more
6 962
Subscribers
-124 hours
-67 days
-5630 days
Posts Archive
Развёрнутое пояснение 1️⃣Список 𝚊 содержит два вложенных списка: [𝟷, 𝟸] и [𝟹, 𝟺]. 2️⃣Вызов 𝚊.𝚌𝚘𝚙𝚢() создаёт новый внешний список 𝚋, но элементы 𝚋[𝟶] и 𝚋[𝟷] — это те же самые объекты, что и 𝚊[𝟶] и 𝚊[𝟷], не их копии. 3️⃣Когда выполняется 𝚊[𝟶].𝚊𝚙𝚙𝚎𝚗𝚍(𝟻), изменяется вложенный список, на который указывают и 𝚊[𝟶], и 𝚋[𝟶]. 4️⃣Поэтому при печати 𝚋 видим [[𝟷, 𝟸, 𝟻], [𝟹, 𝟺]]. Почему это важно Для полного копирования вложенных структур нужен 𝚌𝚘𝚙𝚢.𝚍𝚎𝚎𝚙𝚌𝚘𝚙𝚢(). Поверхностная копия через 𝚕𝚒𝚜𝚝.𝚌𝚘𝚙𝚢(), 𝚕𝚒𝚜𝚝(...) или срез [:] — частый источник багов с «призрачными» изменениями в якобы независимых данных.

Что выведет код?
Anonymous voting

Развёрнутое пояснение 🔘При создании 𝙲𝚑𝚒𝚕𝚍() вызывается 𝙲𝚑𝚒𝚕𝚍.__𝚒𝚗𝚒𝚝__(), который устанавливает только 𝚜𝚎𝚕𝚏.𝚊𝚐𝚎 = 𝟷𝟶. 🔘Родительский 𝙿𝚊𝚛𝚎𝚗𝚝.__𝚒𝚗𝚒𝚝__() не вызывается автоматически — Python не делает этого за вас. 🔘Атрибут 𝚗𝚊𝚖𝚎 не существует у объекта 𝚌. 🔘𝚌.𝚊𝚐𝚎 возвращает 𝟷𝟶, но 𝚌.𝚗𝚊𝚖𝚎 выбрасывает AttributeError. Почему это важно В отличие от некоторых языков, Python не вызывает конструктор родителя автоматически. Если дочерний класс переопределяет __𝚒𝚗𝚒𝚝__, нужно явно вызвать 𝚜𝚞𝚙𝚎𝚛().__𝚒𝚗𝚒𝚝__(...), иначе инициализация родителя не произойдёт.

Что выведет код?
Anonymous voting

Развёрнутое пояснение 🔘𝚃𝚛𝚞𝚎 — это объект типа 𝚋𝚘𝚘𝚕, а 𝚋𝚘𝚘𝚕 — подкласс 𝚒𝚗𝚝. 🔘𝚒𝚜𝚒𝚗𝚜𝚝𝚊𝚗𝚌𝚎(𝚃𝚛𝚞𝚎, 𝚒𝚗𝚝) проверяет: «является ли 𝚃𝚛𝚞𝚎 экземпляром 𝚒𝚗𝚝 или его подкласса?» — да, потому что 𝚋𝚘𝚘𝚕 наследуется от 𝚒𝚗𝚝. Результат: True. 🔘𝚝𝚢𝚙𝚎(𝚃𝚛𝚞𝚎) == 𝚒𝚗𝚝 проверяет: «является ли точный тип 𝚃𝚛𝚞𝚎 именно 𝚒𝚗𝚝?» — нет, точный тип это 𝚋𝚘𝚘𝚕. Результат: False. Почему это важно Для проверки типов почти всегда лучше использовать 𝚒𝚜𝚒𝚗𝚜𝚝𝚊𝚗𝚌𝚎, потому что она учитывает наследование. Проверка 𝚝𝚢𝚙𝚎(...) == нужна редко — только когда важен именно точный тип, без подклассов.

Что выведет код?
Anonymous voting

Продолжим тему про булевы типы в Python
Продолжим тему про булевы типы в Python

Развёрнутое пояснение 1️⃣Исторически в Python не было типа 𝚋𝚘𝚘𝚕 — использовались 𝟶 и 𝟷. Когда 𝚋𝚘𝚘𝚕 добавили, его сделали подклассом 𝚒𝚗𝚝 для обратной совместимости. 2️⃣𝚃𝚛𝚞𝚎 ведёт себя как 𝟷 в арифметических операциях: 𝚃𝚛𝚞𝚎 + 𝚃𝚛𝚞𝚎 = 𝟸, потом 𝟸 + 𝚃𝚛𝚞𝚎 = 𝟹. 3️⃣Это позволяет считать количество истинных значений: 𝚜𝚞𝚖([𝚃𝚛𝚞𝚎, 𝙵𝚊𝚕𝚜𝚎, 𝚃𝚛𝚞𝚎]) вернёт 𝟸. 4️⃣Результат сложения — тип 𝚒𝚗𝚝, а не 𝚋𝚘𝚘𝚕. Почему это важно С одной стороны, это удобно для подсчёта: 𝚜𝚞𝚖(𝚡 > 𝟶 𝚏𝚘𝚛 𝚡 𝚒𝚗 𝚗𝚞𝚖𝚜). С другой — может удивить при отладке или сериализации, когда вместо 𝚃𝚛𝚞𝚎 вдруг появляется число.

Что выведет код?
Anonymous voting

Развёрнутое пояснение 1️⃣Оператор 𝚒𝚗 для строк проверяет, является ли левый операнд подстрокой правого. 2️⃣Пустая строка "" — это строка длины 𝟶. По определению, она является подстрокой любой строки: можно представить, что пустая строка «находится» перед 𝚑, между 𝚑 и 𝚎, между 𝚎 и 𝚕, и так далее. 3️⃣Даже "" 𝚒𝚗 "" возвращает True — пустая строка содержит саму себя. 4️⃣Такое поведение согласуется с тем, как работает 𝚜𝚝𝚛.𝚌𝚘𝚞𝚗𝚝(s, "") — он вернёт 𝚕𝚎𝚗(𝚜) + 𝟷. Почему это важно Это может сломать валидацию: проверка 𝚒𝚏 𝚞𝚜𝚎𝚛_𝚒𝚗𝚙𝚞𝚝 𝚒𝚗 𝚊𝚕𝚕𝚘𝚠𝚎𝚍_𝚜𝚝𝚛𝚒𝚗𝚐 пройдёт для пустой строки, даже если это не предполагалось.

Что выведет код?
Anonymous voting

Развёрнутое пояснение 1️⃣Класс 𝙸𝚝𝚎𝚖 определяет __𝚎𝚚__ для сравнения по значению 𝚡. Объекты 𝚊 и 𝚋 равны: 𝚊 == 𝚋 возвращает True. 2️⃣Но по умолчанию Python предполагает: если объекты могут быть равны по __𝚎𝚚__, то они должны иметь одинаковый хеш. Без явного __𝚑𝚊𝚜𝚑__ это нарушается. 3️⃣Поэтому Python автоматически устанавливает __𝚑𝚊𝚜𝚑__ = 𝙽𝚘𝚗𝚎, делая объекты нехешируемыми. 4️⃣При попытке создать {𝚊, 𝚋} выбрасывается TypeError: unhashable type: 'Item'. Почему это важно Если нужны и сравнение, и хеширование (для 𝚜𝚎𝚝/𝚍𝚒𝚌𝚝), определите оба метода: __𝚎𝚚__ и __𝚑𝚊𝚜𝚑__, причём равные объекты должны иметь равные хеши.

Что выведет код?
Anonymous voting

Начни новый год с новых знаний — на бесплатных практических курсах от YADRO 🔥 Это обучение через практику: от теории к реаль
Начни новый год с новых знаний — на бесплатных практических курсах от YADRO 🔥 Это обучение через практику: от теории к реальному проекту вместе с инженерами компании. Что ты получишь: ⏺️ 2,5 месяца разработки собственного проекта; ⏺️ 80% времени — практика, задания и подробные code review; ⏺️ менторство от инженеров компании; ⏺️ возможность попасть на стажировку в YADRO по итогам обучения. YADRO — не просто место для старта. По итогам ежегодного исследования Changellenge компания вошла в топ-10 лучших для начала карьеры студентов IT-специальностей и получила Best Company Award 2026 среди интеграторов и корпоративных решений. ➡ Сейчас открыт набор сразу на шесть направлений: от разработки и тестирования до DevOps и низкоуровневого программирования. Если ты студент 2 курса и старше — выбирай направление и регистрируйся на сайте. Это #партнёрский пост

Развёрнутое пояснение 1️⃣В словаре 𝚍 ключ "𝚊" существует и его значение — 𝙽𝚘𝚗𝚎. 2️⃣Вызов 𝚍.𝚐𝚎𝚝("𝚊", "𝚇"): ключ "𝚊" найден, возвращается его значение 𝙽𝚘𝚗𝚎, а не "𝚇". 3️⃣Вызов 𝚍.𝚐𝚎𝚝("𝚋", "𝚇"): ключа "𝚋" нет, возвращается значение по умолчанию "𝚇". 4️⃣Результат: 𝙽𝚘𝚗𝚎 𝚇. Почему это важно Частая ошибка — использовать 𝚍.𝚐𝚎𝚝(𝚔𝚎𝚢) для проверки существования ключа: если значение 𝙽𝚘𝚗𝚎, результат неотличим от отсутствия ключа. Чтобы точно проверить наличие, используйте 𝚔𝚎𝚢 𝚒𝚗 𝚍 или обрабатывайте 𝙺𝚎𝚢𝙴𝚛𝚛𝚘𝚛.