Множественный условный оператор Switch - case

Допустим, мы хотим написать простейшую систему вопрос - ответ. У нас есть заранее известный список потенциальных вопросов и ответов на них.

Безусловно, можно решить эту задачу, используя конструкцию if-elif-else, но появилась несколько более удобная конструкция для решения подобных задач.

Решение с помощью if-elif-else:

question = input()
if question == "Привет?":
    print("Привет!")
elif question == "Что ты знаешь?":
    print("Что-то, да знаю")
elif question == "Как дела?":
    print("Хорошо!")
elif question == "Что делаешь?":
    print("Отвечаю на вопросы кожаных мешков")
elif question == "Кто ты?":
    print("Я - компьютерная программа, написанная на Python")
elif question == "В чем смысл жизни?":
    print("42")
else:
    print("Вопрос непонятен")

Это достаточно элегантный способ решения, однако эту же задачу можно решить с помощью сравнительно недавно появившегося в Python выражении match - case (на данном этапе обучения считайте его аналогом switch - case из других языков программирования).

question = input()
match question:
    case "Привет?":
        print("Привет!")
    case "Что ты знаешь?":
        print("Что-то, да знаю")
    case "Как дела?":
        print("Хорошо!")
    case "Что делаешь?":
        print("Отвечаю на вопросы кожаных мешков")
    case "Кто ты?":
        print("Я - компьютерная программа, написанная на Python")
    case "В чем смысл жизни?":
        print("42")
    case _:
        print("Вопрос непонятен")
Данный синтаксис появился только в Python 3.10, если у вас более ранняя версия - пример работать не будет, и вы можете смело переходить к следующей лекции.

Здесь match (аналог switch в других языках) - принимает выражение, которое затем сопоставляется с шаблонами в блоках case.

case _ здесь - аналог слова default в других языках программирования

Почему match, а не switch

Потому что это не обычный switch-case, это конструкция сопоставления шаблонов.

В простейшем случае, как в примере выше - оператор имеет поведение такое же, как и switch - case в других языках.

На самом деле, выражение match - case гораздо мощнее, но с остальными его фишками мы познакомимся позже.

И case _ тоже не совсем аналог слова default, об этом тоже позже.