Определение статуса ключа в словаре и вывод соответствующего сообщения

Для key2 вывод верный, но None ошибочно попадает в elif not val. Сравнивайте состояния через is True, is False и is None.

Короткий ответ

Что ответить на собеседовании

Для key2 вывод верный, но None ошибочно попадает в elif not val. Сравнивайте состояния через is True, is False и is None.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо проверить, правильно ли реализована логика, которая определяет, является ли ключ подходящим, неподходящим или находится в состоянии заготовки, а также корректно обрабатывает значения True, False и None.

# True — правильный ключ
# False — неправильный ключ
# None — заготовка ключа

mapping = {
    'key0': True,
    'key1': False,
    'key2': True,
    'key3': None,
    'key4': None,
    'key5': False
}

val = mapping.get('key2')

if val:
    print('Ключ подошёл!')
elif not val:
    print('Ключ не подошёл!')
else:
    print('Это заготовка ключа!')

Ответ

Для key2 вывод верный, но None ошибочно попадает в elif not val. Сравнивайте состояния через is True, is False и is None.

missing = object()
value = mapping.get('key2', missing)

if value is True:
    print('Ключ подошёл!')
elif value is False:
    print('Ключ не подошёл!')
elif value is None:
    print('Это заготовка ключа!')
else:
    print('Ключ отсутствует или имеет недопустимое значение')

Обычная проверка истинности объединяет False и None в одну ложную категорию, поэтому исходный else недостижим для предусмотренных значений. Sentinel позволяет отличить отсутствующий ключ от существующей записи с None. Для key2 будет напечатано «Ключ подошёл!».

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее