Форматирование строк: f-string vs `%s` в Python
@python_quizРазберем этот квиз
Условие (код)
Вопрос проверяет, как два способа форматирования обрабатывают значение None и выравнивание:

Что делает код — кратко
- Выражение
value or 'нет данных'возвращает'нет данных', потому чтоvalueравноNone(логическое значение ложно). - В f‑строке
{...:>12}означает: преобразовать значение в строку (через внутренний формат) и выровнять вправо по ширине 12 символов. - Формат
"%12s"тоже преобразует аргумент в строку и выравнивает вправо по ширине 12 символов. - В итоге оба вывода получают одну и ту же строку и одинаковое выравнивание.
Демонстрация (запуск и вывод)
Код:

Ожидаемый вывод (обратите внимание на пробелы слева — ширина 12 символов):

(Перед фразой три пробела — потому что длина строки "нет данных" составляет 9 символов, а ширина задана 12.)
Анализ вариантов ответов
- Вариант: "Обе строки выведут одинаковый текст и одинаковое выравнивание"
Пояснение: это действительно так в данном коде — оба метода подставляют строку и выравнивают её вправо по ширине 12.
- Вариант: "Обе строки выведут одинаковый текст, но разное выравнивание"
Пояснение: неверно — спецификаторы >12 и %12s дают одинаковое поведение выравнивания вправо.
- Вариант: "Текст будет разный, но выравнивание одинаковое"
Пояснение: неверно — текст одинаковый, потому что источник текста одинаков (value or 'нет данных').
- Вариант: "И текст, и выравнивание будут разными"
Пояснение: неверно по тем же причинам.
Нюансы и примечания
- Оператор
orвернёт правую часть и для других ложных значений (например, пустая строка'',0,False). Если нужно различать None и пустую строку, следует использовать явную проверкуis None. - В общих случаях
%sвызываетstr()для аргумента, а f‑строка с форматом вызываетformat()(то есть использует__format__у объекта). Для простых типов (строки, число) поведение совпадает, но для объектов с кастомным__format__возможны отличия. - Если важно единообразие стиля, предпочтительно использовать f‑строки в современном коде — они более выразительны и гибки.
Вывод
В данном примере оба выражения подставляют одну и ту же строку и выравнивают её одинаково — вывод идентичен. При этом важно помнить о тонкостях поведения or и различиях между %-форматированием и форматированием через format/f‑строки для нестандартных объектов.