Синтаксис и типы данных: вопросы для собеседования (часть 8)
Базовые типы (int, float, str, bool), присваивание, f-строки, type hints — первое, что проверяют на собеседовании по Python. Спрашивают про мутабельность, разницу между is и ==, приведение типов. Без уверенного знания основ синтаксиса невозможно перейти к более сложным темам.
Вопросы 36–40 из 40
36Что вернёт выражение `'П'.encode('utf-8')`?
AРезультат `b'\xd0'` — потому что `encode()` берёт только первый байт символа
BРезультат `b'П'` — потому что `encode()` просто добавляет префикс `b` к строке
CРезультат `b'\xd0\x9f'` — двухбайтовое UTF-8 представление символа `'П'`
DБудет исключение `UnicodeError` — кириллицу нельзя закодировать в UTF-8
Ответ: Метод `encode()` преобразует строку `str` в последовательность байтов `bytes` в указанной кодировке.
Кириллический символ `'П'` в кодировке UTF-8 занимает два байта: `\xd0` и `\x9f`. Результат `'П'.encode('utf-8')` — объект `bytes`: `b'\xd0\x9f'`. Тип `bytes` хранит именно сырые байты, а не символы. Обратная операция — `b'\xd0\x9f'.decode('utf-8')` — вернёт строку `'П'`.
37Пусть `fs = frozenset([1, 2, 3])`. Что произойдёт при вызове `fs.add(4)`?
AМетод `.add()` сработает успешно — `frozenset` поддерживает добавление элементов
BМетод `.add()` не изменит множество, но и не вызовет ошибку — вернёт `None`
CЭлемент добавится, но `frozenset` автоматически станет обычным `set`
DБудет исключение `AttributeError`, потому что `frozenset` — неизменяемый тип
Ответ: `frozenset` — неизменяемая версия множества, которая не поддерживает методы изменения.
`frozenset` отличается от `set` тем, что его нельзя изменить после создания. У него нет методов `add()`, `remove()`, `discard()`. Вызов `fs.add(4)` приведёт к `AttributeError`. Зато `frozenset` можно использовать как ключ словаря или элемент другого множества — именно потому что он неизменяем и хэшируем.
38Что вернёт `'a,,b,,c'.split(',')`?
AСписок `['a', 'b', 'c']` — пустые строки между разделителями игнорируются
BСписок `['a', '', 'b', '', 'c']` — пустые строки сохраняются между разделителями
CСписок `['a', 'b', 'c', '']` — пустая строка только в конце результата
DБудет исключение `ValueError` — два разделителя подряд не допускаются
Ответ: Метод `.split()` с явным разделителем сохраняет пустые строки между разделителями.
Когда `.split()` вызывается с явным разделителем, каждое вхождение разделителя создаёт границу. Два разделителя подряд дают пустую строку `''` между ними. Поэтому `'a,,b,,c'.split(',')` вернёт `['a', '', 'b', '', 'c']`. А вот `.split()` без аргументов ведёт себя иначе — группирует подряд идущие пробелы и не создаёт пустых строк.
39Пусть `a = 'привет'`, `b = 'мир'`. Что произойдёт после выполнения `a, b = b, a`?
AПеременные поменяются: `a` станет `'мир'`, `b` станет `'привет'`
BБудет исключение `TypeError`, потому что строки нельзя обменивать таким способом
CОбе переменные станут `'мир'`, потому что `b` присвоится первым в `a`
DОбе переменные станут `'привет'`, потому что `a` присвоится первым в `b`
Ответ: Запись `a, b = b, a` использует кортежную распаковку для одновременного обмена значений переменных.
Python сначала вычисляет всю правую часть выражения `b, a` — создаёт кортеж `('мир', 'привет')`. Затем распаковывает его в левую часть: `a` получает `'мир'`, `b` получает `'привет'`. Промежуточная переменная не нужна. Это работает с любыми типами данных, не только со строками.
40Пусть `d1 = {'a': 1, 'b': 2}` и `d2 = {'b': 3, 'c': 4}`. Что вернёт `{**d1, **d2}`?
AСловарь `{'a': 1, 'b': 2, 'b': 3, 'c': 4}` — оба значения ключа `'b'` сохранятся
BБудет исключение `KeyError`, потому что ключ `'b'` встречается в обоих словарях
CСловарь `{'a': 1, 'b': 3, 'c': 4}` — значение из второго словаря перезапишет первое
DСловарь `{'a': 1, 'b': 2, 'c': 4}` — значение из первого словаря останется неизменным
Ответ: При распаковке `**` совпадающие ключи перезаписываются значениями из более позднего словаря.
Выражение `{**d1, **d2}` создаёт новый словарь, последовательно распаковывая `d1`, затем `d2`. Ключ `'b'` есть в обоих словарях: сначала записывается `'b': 2` из `d1`, затем перезаписывается на `'b': 3` из `d2`. Итог: `{'a': 1, 'b': 3, 'c': 4}`. Побеждает тот словарь, который распаковывается последним.
Хотите тренировать интерактивно?
В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.
Тренировать в Telegram