DamiRocK

Python: условное выражение и переключатель flip_flop()

Сравниваем if–else с выражением ‘flop’ if value==’flip’ else ‘flip’. Проверяем точное поведение для любого другого входа.

Условие внутри выражения

Запись a if condition else b выбирает значение a при истинном condition и b иначе. В отличие от обычного блока if, результат можно сразу вернуть из функции или присвоить переменной.

Задание источника

Если аргумент равен flip, верните flop. Во всех остальных случаях верните flip. Сначала вариант с двумя блоками:

def flip_flop(value: str) -> str:
    if value == "flip":
        return "flop"
    else:
        return "flip"

Тот же договор через условное выражение:

def flip_flop(value: str) -> str:
    return "flop" if value == "flip" else "flip"

Что проверять кроме двух известных состояний

Для flip результат flop, для flop — flip. Но условие говорит «в противном случае», поэтому flip_flop("other") и flip_flop("") тоже возвращают flip. Возвращать ошибку для неизвестного слова было бы другой спецификацией.

Вычисляется только выбранная часть

Условное выражение не обязано вычислять обе альтернативы. Например, 10 / divisor if divisor != 0 else None не выполняет деление при нулевом divisor. Это редакционный пример короткого выбора; он не определяет универсальную политику обработки ошибок.

Когда блок понятнее

Для одного короткого выбора условное выражение читается легко. Если в каждой ветви нужны несколько действий или выражения вложены друг в друга, обычный if может яснее показывать поток программы. Сокращение количества строк не должно скрывать смысл.

В исходном материале конструкция называется тернарным оператором; в документации Python также используется термин «условное выражение». Обе формулировки здесь относятся к одной записи с if и else.

Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Оба варианта сохраняют правило задания.

Reading preferences

Appearance
Contrast
More options

Saved only in this browser. Your device’s reduced-motion setting is always respected. Browser zoom works throughout the site.