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

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

Open in Telegram

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

Show more
6 963
Subscribers
+124 hours
-67 days
-6130 days
Posts Archive
Подробное объяснение 1️⃣ hash(1) == hash(1.0) == hash(True) == 1. 2️⃣ 1 == 1.0 == True → все дубликаты в set → len → 1. 3️⃣ a is b → 1 is 1.0 → разные типы, разные объекты → False. 4️⃣ a is c → 1 is True → False. 5️⃣ Вывод: 1 False False. Почему это важно is для чисел — антипаттерн. Работает случайно для малых чисел, ломается в production. Всегда используйте ==.

Подробное объяснение 1️⃣ a = Singleton(): _inst равен None → создаётся объект → _inst заполнен. 2️⃣ b = Sub(): Sub не переопределяет __new__, использует родительский. 3️⃣ Внутри __new__ проверяется cls._inst. Python ищет _inst в MRO: Sub.__dict__ → Singleton.__dict__. 4️⃣ Находит _inst в Singleton (уже не None) → возвращает тот же объект. 5️⃣ a is b → True. Тип объекта — Singleton (создан через super().__new__(cls) в первый раз). 6️⃣ Вывод: True Singleton Singleton. Почему это важно? Наследование ломает изоляцию Singleton. Каждый подкласс должен иметь свой _inst, иначе все клонируют объект родителя.

Подробное объяснение 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 выкатили залипательную браузерную игру-викторину для разработчиков. Р
Любите хардкорные айтишные квизы? 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. Почему это важно Это полезно для производительности и для контроля побочных эффектов. Если функция дорогая или что-то печатает, пишет в лог, делает запросы, короткое замыкание может сильно изменить поведение программы.

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

Автотесты, системная разработка, администрирование, работа с железом — Python используется везде, но задачи в этих направлени
Автотесты, системная разработка, администрирование, работа с железом — 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__ может дать неожиданный результат и сломать логику условий.