Python: Тернарный оператор
Посмотрите на определение функции, которая возвращает модуль переданного числа:
# Модуль это само число без знака
def abs(number: int) -> int:
if number >= 0:
return number
return -numberНо можно записать более лаконично. В Python есть конструкция, которая работает как if-else. Она называется тернарный оператор и является единственным оператором в Python, который требует три операнда:
def abs(number: int) -> int:
return number if number >= 0 else -numberОбщий паттерн выглядит так: <expression on true> if <predicate> else <expression on false>.

Давайте перепишем начальный вариант get_type_of_sentence() аналогично.
Было:
def get_type_of_sentence(sentence: str) -> str:
last_char = sentence[-1]
if last_char == '?':
return 'question'
return 'normal'Стало:
def get_type_of_sentence(sentence: str) -> str:
last_char = sentence[-1]
return 'question' if last_char == '?' else 'normal'
print(get_type_of_sentence('Hodor')) # => normal
print(get_type_of_sentence('Hodor?')) # => questionТернарный оператор можно вкладывать в тернарный оператор. Но это считается плохой практикой, такой код очень сложно понимать.
Задание
Кнопка в приложении работает как переключатель: каждое нажатие меняет состояние на противоположное. Реализуйте функцию flip_flop(), которая принимает на вход строку и, если эта строка равна 'flip', возвращает строку 'flop'. В противном случае функция должна вернуть 'flip'.
Примеры вызова:
print(flip_flop('flip')) # => flop
print(flip_flop('flop')) # => flipПопробуйте написать два варианта функции: с обычным if-else, и с тернарным оператором.
Ваше упражнение проверяется по этим тестам
import solution
def test1():
assert solution.flip_flop("flip") == "flop"
assert solution.flip_flop("flop") == "flip"Решение учителя откроется через:
20:00
