ru
Feedback

Не попадитесь на канал ботавода! Telemetrio находит и помечает такие каналы 👉 Хотите видеть метку — оформите подписку

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

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

Открыть в Telegram

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

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

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

photo content

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

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

photo content

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

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

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

photo content

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

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

photo content

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

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

photo content

Развёрнутое пояснение 1️⃣Python использует формулу: 𝚊 % 𝚋 = 𝚊 − 𝚋 × 𝚏𝚕𝚘𝚘𝚛(𝚊 / 𝚋), где 𝚏𝚕𝚘𝚘𝚛 — округление вниз (к минус бесконечности). 2️⃣Для −𝟽 % 𝟹: деление −𝟽 / 𝟹 = −𝟸.𝟹𝟹..., округление вниз 𝚏𝚕𝚘𝚘𝚛(−𝟸.𝟹𝟹) = −𝟹, остаток: −𝟽 − 𝟹 × (−𝟹) = 𝟸. 3️⃣В C, Java, JavaScript деление округляется к нулю, и там −𝟽 % 𝟹 = −𝟷. Гвидо ван Россум намеренно выбрал округление вниз: при таком подходе остаток всегда попадает в диапазон [𝟶, 𝚗) при положительном делителе. Это удобно для вычисления номера клетки в сетке, индекса в кольцевом буфере, дня недели. Гвидо объяснял: если нужно округление к нулю, можно написать 𝚒𝚗𝚝(𝚊 / 𝚋), а вот получить «правильное» округление вниз из округления к нулю — сложнее, поэтому Python выбрал более полезный вариант по умолчанию. ​ Почему это важно При портировании кода между языками или при работе с отрицательными координатами разница в поведении % может привести к трудноуловимым багам: один и тот же код даст разные результаты в Python и в C/Java.

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

photo content

Развёрнутое пояснение 1️⃣Список 𝚗𝚞𝚖𝚜 = [-𝟻, 𝟸, -𝟹, 𝟺]. Функция 𝚖𝚊𝚡 ищет элемент с максимальным значением. 2️⃣Параметр 𝚔𝚎𝚢=𝚊𝚋𝚜 означает: сравнивать элементы по их абсолютным значениям, то есть 𝟻, 𝟸, 𝟹, 𝟺. 3️⃣Максимум по модулю — это 𝟻 (от элемента −𝟻). 4️⃣Но 𝚖𝚊𝚡 возвращает сам элемент, а не результат 𝚔𝚎𝚢(𝚎𝚕𝚎𝚖𝚎𝚗𝚝), поэтому результат −𝟻, а не 𝟻. Почему это важно Можно ожидать, что 𝚖𝚊𝚡(..., 𝚔𝚎𝚢=𝚏) вернёт 𝚏(𝚡), но это не так. Если нужен именно результат функции, придётся вызвать её отдельно: 𝚊𝚋𝚜(𝚖𝚊𝚡(𝚗𝚞𝚖𝚜, 𝚔𝚎𝚢=𝚊𝚋𝚜)) или 𝚖𝚊𝚡(𝚊𝚋𝚜(𝚡) 𝚏𝚘𝚛 𝚡 𝚒𝚗 𝚗𝚞𝚖𝚜).