Множественный условный оператор 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, об этом тоже позже.