Множественный условный оператор 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("Вопрос непонятен")
Здесь match (аналог switch в других языках) - принимает выражение, которое затем сопоставляется с шаблонами в блоках case.
case _ здесь - аналог слова default в других языках программирования
Почему match, а не switch
Потому что это не обычный switch-case, это конструкция сопоставления шаблонов.
В простейшем случае, как в примере выше - оператор имеет поведение такое же, как и switch - case в других языках.
На самом деле, выражение match - case гораздо мощнее, но с остальными его фишками мы познакомимся позже.
И case _ тоже не совсем аналог слова default, об этом тоже позже.