Синтаксис и типы данных: вопросы для собеседования (часть 6)
Базовые типы (int, float, str, bool), присваивание, f-строки, type hints — первое, что проверяют на собеседовании по Python. Спрашивают про мутабельность, разницу между is и ==, приведение типов. Без уверенного знания основ синтаксиса невозможно перейти к более сложным темам.
Вопросы 26–30 из 40
26Пусть `a = 'строка1\nстрока2'` и `b = '''строка1\nстрока2'''`. Чем отличаются значения переменных `a` и `b` после такого присваивания?
AБудет исключение `SyntaxError`: обычные кавычки не поддерживают перенос внутри одного литерала
BПеременная `b` получит дополнительные пробелы в начале и конце из-за тройных кавычек литерала
CПеременная `a` хранит обратный слэш и `n` буквально, а `b` хранит реальный перенос строки
DОба значения одинаковые: `\n` интерпретируется как перенос строки в обоих типах литералов
Ответ: Управляющая последовательность `\n` работает одинаково и в обычных строках, и в тройных кавычках.
Управляющая последовательность `\n` интерпретируется как перевод строки в обоих случаях — и в обычных кавычках, и в тройных. Поэтому переменные `a` и `b` будут содержать одинаковый текст с реальным переносом строки. Разница тройных кавычек в другом: они позволяют писать многострочный текст без `\n`, просто нажимая Enter внутри литерала. Если же `\n` написан явно, результат одинаковый.
Подробный разбор → 27Что вернёт вызов `divmod(17, 5)` в Python?
AЧисло `3.5`
BКортеж `(2, 7)`
CСписок `[3, 2]`
DКортеж `(3, 2)`
Ответ: `divmod(a, b)` возвращает кортеж из частного и остатка: `(a // b, a % b)`.
Функция `divmod(17, 5)` одновременно вычисляет целочисленное деление и остаток. Результат — кортеж `(3, 2)`, потому что `17 // 5 = 3` и `17 % 5 = 2`. Функция возвращает именно кортеж, а не список — это важно при распаковке в две переменные. Запись эквивалентна `(17 // 5, 17 % 5)`, но выполняется одним вызовом и быстрее, особенно для больших чисел.
Подробный разбор → 28Что вернёт `list(range(5, 0, -1))`?
AСписок `[5, 4, 3, 2, 1, 0]`: нижняя граница включается в результат при отрицательном шаге `range`
BПустой объект `range`: отрицательный шаг при `start > stop` не допускается в Python по правилам
CСписок `[5, 4, 3, 2, 1]`: счёт идёт вниз с шагом `-1`, нижняя граница в результат не входит
DСписок `[5, 3, 1]`: функция `range` пропускает чётные числа в шаге при отрицательном направлении
Ответ: `range(start, stop, step)` с отрицательным шагом считает вниз, не включая `stop`.
Вызов `range(5, 0, -1)` генерирует числа от 5 с шагом -1 до тех пор, пока значение больше 0 (граница `stop` не включается). Получаем `[5, 4, 3, 2, 1]`. Ноль в результат не попадает — как и при обычном `range`, верхняя (или нижняя при обратном счёте) граница исключается.
Подробный разбор → 29Что вернёт `sorted(['слон', 'як', 'кот'], key=len)`?
AСписок `['кот', 'слон', 'як']` — сортировка по алфавиту без учёта `key`
BСписок `['як', 'кот', 'слон']` — сортировка по убыванию длины строк
CСписок `['слон', 'кот', 'як']` — сортировка по последнему символу строки
DСписок `['як', 'кот', 'слон']` — сортировка по возрастанию длины
Ответ: Параметр `key` в `sorted()` задаёт функцию, по результату которой происходит сортировка.
При вызове `sorted()` с `key=len` элементы сортируются по значению `len()` каждого элемента. Длины: `'слон'` — 4, `'як'` — 2, `'кот'` — 3. По возрастанию длины получаем: `'як'` (2), `'кот'` (3), `'слон'` (4). Без параметра `key` сортировка была бы лексикографической (по алфавиту).
Подробный разбор → 30Что вернёт `list(zip([1, 2, 3], ['a', 'b']))`?
A`ValueError`: аргументы `zip()` имеют разную длину, функция требует одинакового размера
B`[(1, 'a'), (2, 'b'), (3, '')]`: недостающее значение второго аргумента дополняется пустой строкой
C`[(1, 'a'), (2, 'b'), (3, None)]`: недостающее значение второго аргумента дополняется значением `None`
D`[(1, 'a'), (2, 'b')]`: `zip()` останавливается на самом коротком аргументе, лишний элемент отбрасывается
Ответ: `zip()` останавливается по самому короткому итерируемому объекту, лишние элементы остальных аргументов отбрасываются.
Функция `zip()` объединяет элементы попарно и заканчивает работу, когда заканчивается самый короткий аргумент. Поэтому элемент `3` из первого списка не войдёт в результат, а исключение не выбрасывается. Если нужно дополнить недостающие значения, используют `itertools.zip_longest()`, которая подставляет `None` или указанное значение `fillvalue`.
Подробный разбор →