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

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

@quiz_python

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Subscribers
6.93K
Photos
1.4K
Videos
1
Links
126

Showing posts older than #4590 · Back to latest

Older Posts 20 shown
Post #4588 973
Развёрнутое пояснение

1️⃣Множество 𝚜 = {"𝚊", "𝚋", "𝚌"} содержит три строки, но их внутренний порядок зависит от хеш-функции.

2️⃣В отличие от целых чисел (где 𝚑𝚊𝚜𝚑(𝚗) == 𝚗), для строк хеш вычисляется с использованием случайного сида, который меняется при каждом запуске интерпретатора.

3️⃣Три вызова 𝚜.𝚙𝚘𝚙() извлекают элементы в текущем внутреннем порядке — это может быть ["𝚋", "𝚌", "𝚊"], ["𝚊", "𝚌", "𝚋"], ["𝚌", "𝚋", "𝚊"] и так далее.

4️⃣Сравнение с ["𝚊", "𝚋", "𝚌"] иногда даёт True, иногда False.

Почему это важно
Задача показывает, что «неупорядоченность» множеств — не абстракция, а реальное поведение, особенно для строк. Код, который случайно работал на целых числах, может сломаться при переходе на строковые ключи. Если порядок важен — используйте 𝚜𝚘𝚛𝚝𝚎𝚍(𝚜) или другую структуру данных.
  • ✍ 3
Post #4585 897
Развёрнутое пояснение

1️⃣Список [𝟷] содержит только один элемент.

2️⃣Распаковка 𝚏𝚒𝚛𝚜𝚝, *𝚖𝚒𝚍𝚍𝚕𝚎, 𝚕𝚊𝚜𝚝 требует: один элемент для 𝚏𝚒𝚛𝚜𝚝, ноль или более для 𝚖𝚒𝚍𝚍𝚕𝚎, один элемент для 𝚕𝚊𝚜𝚝.

3️⃣​Минимум нужно 𝟸 элемента (𝚏𝚒𝚛𝚜𝚝 + 𝚕𝚊𝚜𝚝), а в списке только 𝟷.

4️⃣Python выбрасывает ValueError: not enough values to unpack (expected at least 2, got 1).

Почему это важно
Звёздочка создаёт иллюзию «гибкости», но фиксированные переменные вокруг неё всё равно требуют своих значений. Это ломает код, когда данные короче ожидаемого, например при парсинге строк или обработке коротких списков.
  • ✍ 3
  • ❤ 2
Post #4584 676
  • 👍 2
  • 💊 1
Post #4582 968
Развёрнутое пояснение

1️⃣Функция 𝚐𝚛𝚎𝚎𝚝 вызывается с аргументом "" (пустая строка), поэтому параметр 𝚗𝚊𝚖𝚎 получает значение "".

2️⃣В строке 𝚗𝚊𝚖𝚎 = 𝚗𝚊𝚖𝚎 𝚘𝚛 "𝙶𝚞𝚎𝚜𝚝" оператор 𝚘𝚛 проверяет истинность левого операнда: пустая строка "" — falsy-значение.

3️⃣Так как левый операнд ложный, 𝚘𝚛 возвращает правый операнд "𝙶𝚞𝚎𝚜𝚝", и переменная 𝚗𝚊𝚖𝚎 перезаписывается.

4️⃣Функция возвращает "𝙷𝚎𝚕𝚕𝚘, 𝙶𝚞𝚎𝚜𝚝!", хотя намерение было — приветствовать пустым именем.

Почему это важно
Паттерн 𝚡 𝚘𝚛 𝚍𝚎𝚏𝚊𝚞𝚕𝚝 ломается для любых falsy-значений: 𝟶, "", [], 𝙽𝚘𝚗𝚎, 𝙵𝚊𝚕𝚜𝚎. Безопасная альтернатива — явная проверка: 𝚒𝚏 𝚗𝚊𝚖𝚎 𝚒𝚜 𝙽𝚘𝚗𝚎: 𝚗𝚊𝚖𝚎 = "𝙶𝚞𝚎𝚜𝚝".
  • ✍ 4
Post #4579 863
Развёрнутое пояснение

1️⃣Вызов 𝚒𝚗𝚝("𝚊𝚋𝚌") выбрасывает 𝚅𝚊𝚕𝚞𝚎𝙴𝚛𝚛𝚘𝚛, потому что строка не является числом.

2️⃣Python идёт по 𝚎𝚡𝚌𝚎𝚙𝚝-блокам сверху вниз и проверяет, является ли выброшенное исключение экземпляром указанного класса.

3️⃣Первый блок ловит 𝙴𝚡𝚌𝚎𝚙𝚝𝚒𝚘𝚗; так как 𝚅𝚊𝚕𝚞𝚎𝙴𝚛𝚛𝚘𝚛 наследуется от 𝙴𝚡𝚌𝚎𝚙𝚝𝚒𝚘𝚗, условие выполняется, печатается A, и обработка завершается.

4️⃣Блок 𝚎𝚡𝚌𝚎𝚙𝚝 𝚅𝚊𝚕𝚞𝚎𝙴𝚛𝚛𝚘𝚛 становится «мёртвым кодом» — он никогда не выполнится.

Почему это важно
Правило: более специфичные исключения должны идти перед более общими. Иначе общий 𝚎𝚡𝚌𝚎𝚙𝚝 «съест» все ошибки, и специфичная обработка не сработает. В современном Python (3.11+) на это даже выдаётся SyntaxWarning. Да pyright подсветит, но в учебном примере я специально убрал подсветку.
  • ✍ 1
Post #4576 831
Канал по нейронкам, который часто пересекается с Python по темам: @neuro_channel

Веду его тоже я, так что если вам нравятся задачки здесь, то буду рад видеть вас и в «Нейроканале». Это всё часть медиа Tproger.

Три примечательных поста:

1️⃣Про утилиту, которая автоматически снимает цензуру (safety alignment) с трансформерных языковых моделей без дообучения и ручного тюнинга.

2️⃣Разбор сборки GPT‑OSS с нуля на чистом Python, без PyTorch и без GPU: последовательно с объяснениями от Softmax и RMSNorm до Grouped Query Attention.

3️⃣Обзор трендов Hugging Face за неделю с супер-кратким описанием моделей, выходит регулярно.

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

Заходите и подписывайтесь:
@neuro_channel
  • ❤ 1
  • 🙏 1
Post #4575 625
Развёрнутое пояснение

1️⃣Список 𝚊 = [𝟷, 𝟸, 𝟹, 𝟺, 𝟻]. Индекс −𝟹 соответствует элементу 𝟹 (третий с конца), а индекс 𝟶 — элементу 𝟷 (первый).

2️⃣Срез [𝚜𝚝𝚊𝚛𝚝:𝚜𝚝𝚘𝚙] идёт слева направо по умолчанию. Позиция −𝟹 (элемент 𝟹) находится правее позиции 𝟶 (элемент 𝟷).

3️⃣Поскольку 𝚜𝚝𝚊𝚛𝚝 > 𝚜𝚝𝚘𝚙 при движении слева направо, срез не захватывает ни одного элемента и возвращает [].

4️⃣Чтобы получить последние три элемента, нужно писать 𝚊[-𝟹:] (без указания конца) или 𝚊[-𝟹:𝙽𝚘𝚗𝚎].

Почему это важно
Ошибка [-𝚗:𝟶] вместо [-𝚗:] — частая ловушка при динамическом формировании срезов; результат всегда пуст, но ошибки не выбрасывается, и баг может долго оставаться незамеченным.
Post #4572 851
Развёрнутое пояснение

1️⃣В словаре 𝚍 два ключа: 𝟷 и 𝟸; соответствующие значения — "𝚘𝚗𝚎" и "𝚝𝚠𝚘".

2️⃣Выражение 𝟷 𝚒𝚗 𝚍 проверяет наличие 𝟷 среди ключей словаря; такой ключ есть, поэтому результат — True.

3️⃣Выражение "𝚘𝚗𝚎" 𝚒𝚗 𝚍 тоже смотрит только на ключи: строка "𝚘𝚗𝚎" не является ключом, это значение; поэтому результат — False.

4️⃣Функция 𝚙𝚛𝚒𝚗𝚝(𝟷 𝚒𝚗 𝚍, "𝚘𝚗𝚎" 𝚒𝚗 𝚍) выводит True False.

Почему это важно
Путаница между проверкой по ключам и по значениям часто ломает валидацию и условия: чтобы искать по значениям, нужно явно использовать "𝚘𝚗𝚎" 𝚒𝚗 𝚍.𝚟𝚊𝚕𝚞𝚎𝚜() или итерироваться по парам, а не надеяться на поведение по умолчанию.
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →