Для 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 будет напечатано «Ключ подошёл!».