Поведение оператора or и форматирования строк в Python
@python_quizРазберем этот квиз
Коротко: в приведённом фрагменте кода используется оператор or, который возвращает первый истинный (truthy) операнд. Так как None считается ложным, в обоих случаях подставится строка "N/A". Разберём подробно и покажем альтернативы.
Исходный код

Почему вывод именно такой
- Оператор or в Python возвращает сам первый операнд, если он истинный, иначе — второй операнд. Он не приводит значения к булевому типу, он возвращает значение целиком.
- None — ложное (falsy) значение, поэтому выражение value or 'N/A' даёт 'N/A'.
- Оба способа форматирования (f-строка и старый стиль "%s") получают уже вычисленную строку 'N/A' и печатают её. Ошибок (
TypeError) не возникает: формат %s использует str(), а f-строка вызывает форматирование через__format__, которое для строк тоже безопасно.
Демонстрация — вывод

Вывод:

Дополнительные примеры и нюансы
Оператор or возвращает значение, а не обязательно булево:

Ожидаемый вывод:

Заметьте: числовой 0, пустая строка и False тоже считаются ложными, поэтому будут заменены на 'N/A'. Если это не то поведение, которое нужно (например, вы хотите оставлять 0 как валидное значение), используйте проверку на None явно.
Альтернативы: заменять только None
Если нужно подставлять запасное значение только при value is None, правильный способ:
- В f-строке:

- Со старым стилем:

Эти варианты сохранят 0, False и пустую строку как допустимые значения.
Вывод
- В исходном коде оба выражения напечатают "N/A", потому что оператор or выбирает второе значение при ложном первом.
- Оператор or возвращает сам операнд, а не булево значение.
- Если хотите заменять только None, проверяйте явно через is None.