Синтаксис и типы данных: вопросы для собеседования (часть 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Переменная `a` будет содержать реальный перенос строки, как и переменная `b`
Ответ: Управляющая последовательность `\n` работает одинаково и в обычных строках, и в тройных кавычках.
Символ `\n` интерпретируется как перевод строки в обоих случаях. Переменные `a` и `b` будут содержать одинаковый текст с реальным переносом строки. Разница тройных кавычек в другом: они позволяют писать многострочный текст без `\n`, просто нажимая Enter. Но если `\n` написан явно, результат одинаков.
27Что вернёт вызов `divmod(17, 5)`?
AЧисло `3.5` — результат обычного деления `17` на `5` с дробной частью
BКортеж `(2, 7)` — частное от деления на `5` и остаток от деления на `2`
CСписок `[3, 2]` — целочисленное деление и остаток в виде списка
DКортеж `(3, 2)` — целочисленное деление и остаток от деления
Ответ: `divmod(a, b)` возвращает кортеж из частного и остатка: `(a // b, a % b)`.
Функция `divmod(17, 5)` одновременно вычисляет целочисленное деление и остаток. Результат — кортеж `(3, 2)`, потому что `17 // 5 = 3` и `17 % 5 = 2`. Функция возвращает именно кортеж (`tuple`), а не список. Это эквивалентно записи `(17 // 5, 17 % 5)`, но в одном вызове.
28Что вернёт `list(range(5, 0, -1))`?
AСписок `[5, 4, 3, 2, 1, 0]` — включая нижнюю границу ноль
BПустой объект `range`, потому что отрицательный шаг не допускается
CСписок `[5, 4, 3, 2, 1]` — нижняя граница не включается
DСписок `[5, 3, 1]` — только нечётные от пяти до единицы
Ответ: `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Список `[(1, 'a'), (2, 'b')]` — два кортежа, обрезка по короткому
BСписок `[(1, 'a'), (2, 'b'), (3, None)]` — дополнение значением `None`
CБудет исключение `ValueError` из-за разной длины аргументов
DСписок `[(1, 'a'), (2, 'b'), (3, '')]` — дополнение пустой строкой
Ответ: `zip()` останавливается по самому короткому итерируемому объекту, лишние элементы отбрасываются.
Функция `zip()` по умолчанию объединяет элементы попарно и заканчивает работу, когда заканчивается самый короткий аргумент. Элемент `3` из первого списка не войдёт в результат. Для дополнения отсутствующих значений используется `itertools.zip_longest()`, которая подставляет `None` или заданное значение.
Хотите тренировать интерактивно?
В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Тренировать в Telegram