Python: задачки и вопросы
前往频道在 Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
显示更多6 963
订阅者
+124 小时
-67 天
-6130 天
帖子存档
Развёрнутое пояснение
🔘𝚃𝚛𝚞𝚎 — это объект типа 𝚋𝚘𝚘𝚕, а 𝚋𝚘𝚘𝚕 — подкласс 𝚒𝚗𝚝.
🔘𝚒𝚜𝚒𝚗𝚜𝚝𝚊𝚗𝚌𝚎(𝚃𝚛𝚞𝚎, 𝚒𝚗𝚝) проверяет: «является ли 𝚃𝚛𝚞𝚎 экземпляром 𝚒𝚗𝚝 или его подкласса?» — да, потому что 𝚋𝚘𝚘𝚕 наследуется от 𝚒𝚗𝚝. Результат: True.
🔘𝚝𝚢𝚙𝚎(𝚃𝚛𝚞𝚎) == 𝚒𝚗𝚝 проверяет: «является ли точный тип 𝚃𝚛𝚞𝚎 именно 𝚒𝚗𝚝?» — нет, точный тип это 𝚋𝚘𝚘𝚕. Результат: False.
Почему это важно
Для проверки типов почти всегда лучше использовать 𝚒𝚜𝚒𝚗𝚜𝚝𝚊𝚗𝚌𝚎, потому что она учитывает наследование. Проверка 𝚝𝚢𝚙𝚎(...) == нужна редко — только когда важен именно точный тип, без подклассов.
Развёрнутое пояснение
1️⃣Исторически в Python не было типа 𝚋𝚘𝚘𝚕 — использовались 𝟶 и 𝟷. Когда 𝚋𝚘𝚘𝚕 добавили, его сделали подклассом 𝚒𝚗𝚝 для обратной совместимости.
2️⃣𝚃𝚛𝚞𝚎 ведёт себя как 𝟷 в арифметических операциях: 𝚃𝚛𝚞𝚎 + 𝚃𝚛𝚞𝚎 = 𝟸, потом 𝟸 + 𝚃𝚛𝚞𝚎 = 𝟹.
3️⃣Это позволяет считать количество истинных значений: 𝚜𝚞𝚖([𝚃𝚛𝚞𝚎, 𝙵𝚊𝚕𝚜𝚎, 𝚃𝚛𝚞𝚎]) вернёт 𝟸.
4️⃣Результат сложения — тип 𝚒𝚗𝚝, а не 𝚋𝚘𝚘𝚕.
Почему это важно
С одной стороны, это удобно для подсчёта: 𝚜𝚞𝚖(𝚡 > 𝟶 𝚏𝚘𝚛 𝚡 𝚒𝚗 𝚗𝚞𝚖𝚜). С другой — может удивить при отладке или сериализации, когда вместо 𝚃𝚛𝚞𝚎 вдруг появляется число.
Развёрнутое пояснение
1️⃣Оператор 𝚒𝚗 для строк проверяет, является ли левый операнд подстрокой правого.
2️⃣Пустая строка "" — это строка длины 𝟶. По определению, она является подстрокой любой строки: можно представить, что пустая строка «находится» перед 𝚑, между 𝚑 и 𝚎, между 𝚎 и 𝚕, и так далее.
3️⃣Даже "" 𝚒𝚗 "" возвращает True — пустая строка содержит саму себя.
4️⃣Такое поведение согласуется с тем, как работает 𝚜𝚝𝚛.𝚌𝚘𝚞𝚗𝚝(s, "") — он вернёт 𝚕𝚎𝚗(𝚜) + 𝟷.
Почему это важно
Это может сломать валидацию: проверка 𝚒𝚏 𝚞𝚜𝚎𝚛_𝚒𝚗𝚙𝚞𝚝 𝚒𝚗 𝚊𝚕𝚕𝚘𝚠𝚎𝚍_𝚜𝚝𝚛𝚒𝚗𝚐 пройдёт для пустой строки, даже если это не предполагалось.
Развёрнутое пояснение
1️⃣Класс 𝙸𝚝𝚎𝚖 определяет __𝚎𝚚__ для сравнения по значению 𝚡. Объекты 𝚊 и 𝚋 равны: 𝚊 == 𝚋 возвращает True.
2️⃣Но по умолчанию Python предполагает: если объекты могут быть равны по __𝚎𝚚__, то они должны иметь одинаковый хеш. Без явного __𝚑𝚊𝚜𝚑__ это нарушается.
3️⃣Поэтому Python автоматически устанавливает __𝚑𝚊𝚜𝚑__ = 𝙽𝚘𝚗𝚎, делая объекты нехешируемыми.
4️⃣При попытке создать {𝚊, 𝚋} выбрасывается TypeError: unhashable type: 'Item'.
Почему это важно
Если нужны и сравнение, и хеширование (для 𝚜𝚎𝚝/𝚍𝚒𝚌𝚝), определите оба метода: __𝚎𝚚__ и __𝚑𝚊𝚜𝚑__, причём равные объекты должны иметь равные хеши.
Начни новый год с новых знаний — на бесплатных практических курсах от YADRO 🔥
Это обучение через практику: от теории к реальному проекту вместе с инженерами компании.
Что ты получишь:
⏺️ 2,5 месяца разработки собственного проекта;
⏺️ 80% времени — практика, задания и подробные code review;
⏺️ менторство от инженеров компании;
⏺️ возможность попасть на стажировку в YADRO по итогам обучения.
YADRO — не просто место для старта. По итогам ежегодного исследования Changellenge компания вошла в топ-10 лучших для начала карьеры студентов IT-специальностей и получила Best Company Award 2026 среди интеграторов и корпоративных решений.
➡ Сейчас открыт набор сразу на шесть направлений: от разработки и тестирования до DevOps и низкоуровневого программирования.
Если ты студент 2 курса и старше — выбирай направление и регистрируйся на сайте.
Это #партнёрский пост
Развёрнутое пояснение
1️⃣В словаре 𝚍 ключ "𝚊" существует и его значение — 𝙽𝚘𝚗𝚎.
2️⃣Вызов 𝚍.𝚐𝚎𝚝("𝚊", "𝚇"): ключ "𝚊" найден, возвращается его значение 𝙽𝚘𝚗𝚎, а не "𝚇".
3️⃣Вызов 𝚍.𝚐𝚎𝚝("𝚋", "𝚇"): ключа "𝚋" нет, возвращается значение по умолчанию "𝚇".
4️⃣Результат: 𝙽𝚘𝚗𝚎 𝚇.
Почему это важно
Частая ошибка — использовать 𝚍.𝚐𝚎𝚝(𝚔𝚎𝚢) для проверки существования ключа: если значение 𝙽𝚘𝚗𝚎, результат неотличим от отсутствия ключа. Чтобы точно проверить наличие, используйте 𝚔𝚎𝚢 𝚒𝚗 𝚍 или обрабатывайте 𝙺𝚎𝚢𝙴𝚛𝚛𝚘𝚛.
Развёрнутое пояснение
Python сравнивает кортежи лексикографически: сначала первые элементы, потом вторые и так далее.
1️⃣Элемент 𝟶: 𝟷 == 𝟷 — равны, идём дальше.
2️⃣Элемент 𝟷: 𝟸 == 𝟸 — равны, идём дальше.
3️⃣У кортежа 𝚊 элементы закончились, а у 𝚋 ещё есть. По правилу: если один кортеж — префикс другого, то более короткий считается меньшим.
4️⃣Поэтому (𝟷, 𝟸) < (𝟷, 𝟸, 𝟶) возвращает True, даже несмотря на то что третий элемент 𝚋 — это 𝟶.
Почему это важно
Это поведение совпадает с сортировкой слов в словаре: «кот» < «кота». Но при сортировке данных (например, версий (𝟷, 𝟸) vs (𝟷, 𝟸, 𝟶)) результат может быть неожиданным, если не учитывать правило «короче = меньше».
