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

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

رفتن به کانال در Telegram

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

نمایش بیشتر
7 130
مشترکین
+424 ساعت
+57 روز
+130 روز
آرشیو پست ها
Продолжим тему про булевы типы в 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️⃣Результат: 𝙽𝚘𝚗𝚎 𝚇. Почему это важно Частая ошибка — использовать 𝚍.𝚐𝚎𝚝(𝚔𝚎𝚢) для проверки существования ключа: если значение 𝙽𝚘𝚗𝚎, результат неотличим от отсутствия ключа. Чтобы точно проверить наличие, используйте 𝚔𝚎𝚢 𝚒𝚗 𝚍 или обрабатывайте 𝙺𝚎𝚢𝙴𝚛𝚛𝚘𝚛.

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

Развёрнутое пояснение Python сравнивает кортежи лексикографически: сначала первые элементы, потом вторые и так далее. 1️⃣Элемент 𝟶: 𝟷 == 𝟷 — равны, идём дальше. 2️⃣Элемент 𝟷: 𝟸 == 𝟸 — равны, идём дальше. 3️⃣У кортежа 𝚊 элементы закончились, а у 𝚋 ещё есть. По правилу: если один кортеж — префикс другого, то более короткий считается меньшим. 4️⃣Поэтому (𝟷, 𝟸) < (𝟷, 𝟸, 𝟶) возвращает True, даже несмотря на то что третий элемент 𝚋 — это 𝟶. Почему это важно Это поведение совпадает с сортировкой слов в словаре: «кот» < «кота». Но при сортировке данных (например, версий (𝟷, 𝟸) vs (𝟷, 𝟸, 𝟶)) результат может быть неожиданным, если не учитывать правило «короче = меньше».

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

Развёрнутое пояснение 1️⃣Десятичная дробь 𝟶.𝟷 в двоичной системе — это бесконечная периодическая дробь, как 𝟷/𝟹 в десятичной. Компьютер хранит только приближение. 2️⃣То же самое с 𝟶.𝟸: сохраняется не точное значение, а ближайшее представимое в формате 𝚏𝚕𝚘𝚊𝚝. 3️⃣При сложении погрешности накапливаются, и результат 𝟶.𝟷 + 𝟶.𝟸 равен примерно 𝟶.𝟹𝟶𝟶𝟶𝟶𝟶𝟶𝟶𝟶𝟶𝟶𝟶𝟶𝟶𝟶𝟶𝟺. 4️⃣Сравнение с 𝟶.𝟹 (которое тоже хранится с погрешностью, но другой) даёт False. Почему это важно Сравнивать 𝚏𝚕𝚘𝚊𝚝 через == почти всегда неправильно. Для денег и точных вычислений используют модуль 𝚍𝚎𝚌𝚒𝚖𝚊𝚕, для приближённых сравнений — 𝚖𝚊𝚝𝚑.𝚒𝚜𝚌𝚕𝚘𝚜𝚎(𝚊, 𝚋) или проверку 𝚊𝚋𝚜(𝚊 - 𝚋) < 𝚎𝚙𝚜𝚒𝚕𝚘𝚗.

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