Python: задачки и вопросы
رفتن به کانال در Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
نمایش بیشتر7 127
مشترکین
+124 ساعت
اطلاعاتی وجود ندارد7 روز
-930 روز
آرشیو پست ها
Подробное объяснение
1️⃣ Выражение [0] * 3 создаёт список [0, 0, 0] — один объект в памяти.
2️⃣ Выражение [[0, 0, 0]] * 3 создаёт три ссылки на этот же объект, а не три независимых списка.
3️⃣ Переменная m содержит [[0,0,0] ref, [0,0,0] ref, [0,0,0] ref]. Все ref → один объект.
4️⃣ m[0][0] = 1 обращается к первой ссылке, находит тот же список и меняет его первый элемент.
5️⃣ Поскольку все три строки ссылаются на один список, изменение видно во всех строках.
6️⃣ Вывод: [[1, 0, 0], [1, 0, 0], [1, 0, 0]].
Почему это важно:
Классический баг при создании игровых полей, таблиц и матриц. Чтобы сделать независимые строки, используйте list comprehension: [[0]*3 for _ in range(3)] — тогда каждая строка будет своим объектом.
Подробное объяснение:
1️⃣ Цикл for i in range(3) запускается: i принимает значения 0, 1, 2.
2️⃣ На итерации i = 0 условие if i == 1 ложно — цикл продолжается.
3️⃣ На итерации i = 1 условие истинно — выполняется break.
4️⃣ break немедленно прерывает цикл.
5️⃣ Блок else цикла проверяется только при нормальном завершении (без break).
6️⃣ Поскольку был break, блок else пропускается.
7️⃣ Выполняется print("done") → на экране одно слово: done.
Почему это важно:
Многие разработчики (даже опытные) думают, что else в цикле — это "если условие в цикле не сработало". На самом деле это "если цикл дошёл до конца". Путаница приводит к багам в поиске и валидации данных. for/else — полезный паттерн, но с контринтуитивным синтаксисом.
Подробное объяснение:
1️⃣ Python использует банковское округление (round half to even), а не привычное школьное «в большую сторону».
2️⃣ Когда число ровно посередине между двумя целыми, округляется к ближайшему чётному.
3️⃣ round(2.5) → 2 (ближайшее чётное).
4️⃣ round(3.5) → 4 (ближайшее чётное).
5️⃣ round(4.5) → 4 (ближайшее чётное).
Почему это важно:
В финансовых расчётах и при подсчёте статистики это может привести к расхождениям с ожидаемыми результатами. Стандарт IEEE 754 так округляет, чтобы уменьшить систематическую ошибку при большом количестве операций. Для точных десятичных вычислений (деньги, налоги) используйте Decimal из модуля decimal.
Подробное объяснение:
1️⃣Выражение (5) — это просто число 5 в скобках, как в математике. Тип остаётся int.
2️⃣Выражение (5,) — кортеж из одного элемента, запятая обязательна.
3️⃣Метод type(x).__name__ возвращает строку с именем класса.
4️⃣На экран выводится int tuple.
Почему это важно
Это типичная ошибка при возврате кортежа из функции (return (value) вместо return (value,)). Если забыть запятую, функция вернёт не коллекцию, а одиночное значение, что ломает распаковку и всю downstream-логику.
Любите хардкорные айтишные квизы?
SourceCraft и Tproger выкатили залипательную браузерную игру-викторину для разработчиков. Рутину написания кода перенесли в космический сеттинг: получилась планетарная система, где на каждой орбите спрятана инженерная загадка.
Интерактивный квест с вопросами о космосе и реальными призами: https://tprg.ru/YQLj
@quiz_python
Подробное объяснение:
1️⃣any(...) получает генератор, а значит элементы вычисляются по одному, а не все сразу.
2️⃣check(0) печатает 0 и возвращает False.
3️⃣check(1) печатает 1 и тоже возвращает False.
4️⃣check(2) печатает 2 и возвращает True, после чего any() сразу завершает работу.
5️⃣check(3) уже не вызывается, и итоговый вывод: 0 1 2 True.
Почему это важно
Это полезно для производительности и для контроля побочных эффектов. Если функция дорогая или что-то печатает, пишет в лог, делает запросы, короткое замыкание может сильно изменить поведение программы.
Автотесты, системная разработка, администрирование, работа с железом — Python используется везде, но задачи в этих направлениях сильно отличаются
Вместе с YADRO сделали квиз из 7 вопросов на основе реальных инженерных задач. Без правильных ответов — просто выбираете, что вам ближе по мышлению.
На выходе — вердикт по вашему направлению (в том числе автоматизация на Python), описание задач, а также ориентиры по зарплатам на старте и дальше.
Пройти квиз: https://tprg.ru/10FR
По шагам:
1️⃣Создаётся объект x класса AlwaysEqual.
2️⃣Выражение x == None вызывает метод x.__eq__(None), который всегда возвращает True.
3️⃣Выражение x is None не вызывает __eq__, а просто проверяет: это тот же самый объект, что и None, или нет.
4️⃣x — обычный экземпляр класса, а не объект None, поэтому результат False.
5️⃣На экран выводится True False.
Почему это важно:
Проверку на None нужно писать только через is None и is not None. Иначе перегруженный __eq__ может дать неожиданный результат и сломать логику условий.
Разбор задачи
1️⃣Вызов "".split(",") явно указывает, что нужно резать строку по запятым. Запятых нет, поэтому метод возвращает исходную строку целиком как один элемент: ['']. Длина списка = 1.
2️⃣Вызов "".split() (без аргументов) разбивает строку по любым пробельным символам (пробелы, табы, переносы строк).
3️⃣По спецификации Python, алгоритм .split() без аргументов сначала отбрасывает все пробелы по краям, а пустые строки полностью игнорирует.
4️⃣В результате для пустой (или состоящей только из пробелов) строки он возвращает пустой список []. Длина — 0.
Почему это важно
Это неочевидное различие регулярно приводит к падениям скриптов при парсинге логов или CSV-файлов. Если вы ожидаете получить список токенов, а получаете пустой список вместо [''], обращение по индексу (например, chars[0]) вызовет IndexError.
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
