Итак, мы научились работать с ситуациями, когда у нас есть внутри одной конструкции "if" одно условие — и два возможных развития событий: когда условие выполняется и когда условия не выполняется. Очень часто бывает так, что на деле у нас больше вариантов развития событий. Давайте рассмотрим такую ситуацию на примере, и научимся, что нам делать в этом случае. Например, мы заходим в какую-нибудь кофейню, там продают кофе (оно стоит 150 рублей) или чай (он стоит 100 рублей, например). Мы заходим, и бариста спрашивает у нас, какой напиток мы желаем. Теперь мы записываем в переменную "drink" наш ответ. Если (if) "drink" равен "кофе", то нам отвечают, что "С вас 150 рублей за кофе"; а если мы сказали баристе, что мы хотим "чай", он отвечает нам: отлично, "С вас 100 рублей за чай". Давайте проверим, как это работает. Мы вводим "кофе", нам говорят: "С вас 150 рублей за кофе". Мы вводим "чай", нам говорят: "С вас 100 рублей за чай". А если мы хотим попросить какой-нибудь другой напиток, которого здесь не продают? Например, фреш. В этом случае ничего не будет происходить, это выглядит так, как будто бариста промолчал и ничего нам не ответил. Давайте сделаем так, что если мы вводим напиток, который не кофе и не чай, он будет нам просто вежливо отвечать: "такого напитка нет в нашем меню". Для этого я воспользуюсь конструкцией "else", то есть если у нас кофе и не чай, а что-нибудь другое, тогда я печатаю: "Такого напитка нет в меню". Давайте попробуем это запустить. Я ввожу, например, чай, и нам говорят: "С вас 100 рублей за чай". Я ввожу "фреш", нам говорят: "Такого напитка нет в меню". А теперь давайте я веду "кофе". Мы видим, что программа работает неправильно: мы ввели "кофе", такой напиток у нас продается, нам сначала говорят — "С вас 150 рублей за кофе", а потом говорят — "Такого напитка нет в меню". Почему так происходит? Дело в том, что эти две конструкции "if" выполняются независимо друг от друга. Допустим, мы ввели "кофе", и "drink" у нас равно "кофе", что происходит? Вот это выражение у нас равно "true", вот эта инструкция выполняется, а после этого мы просто идем и еще раз проверяем уже вот это условие, потому что они работают независимо друг от друга, и мы теперь осуществляем проверку на то, что "drink" равно "чай", она, конечно же, равна "false", потому что мы ввели "кофе", и мы выполняем то, что написано после "else", потому что вот этот "else" относится вот к этому "if". Давайте еще раз посмотрим, как это работает, на примере блок-схемы, то есть вот: если мы ввели "кофе", если "drink" равно "кофе" — "да", то с нас сначала попросили 150 рублей, а потом мы еще идем и проверяем, что "drink" равно "чай", и здесь тоже будет либо "да", либо "нет", в нашем случае — "нет". Такого быть не должно. Эта проверка на то, что "drink" равно "чай", не должна осуществляться, если мы уже ввели "кофе", если мы уже заказали кофе. И с этим нам поможет оператор, который называется "elif". То есть в идеале блок-схема должна выглядеть вот так: если мы заказали кофе, с нас попросили 150 рублей — и все, программа закончила работать, мы уже не проверяем, что "drink" равно "чай". Давайте напишем этот пример. Теперь, если "drink" равно "кофе", пишем "С вас 150 рублей", и теперь, вместо того, чтобы написать второй "if", мы пишем "elif"; "elif" — это как бы такие склеенные "else" и "if", вместе, в одно слово. И я пишу еще одно условие, еще одну логическую переменную, проверку на то, что "drink" равно "чай", и в этом случае я пишу: "С вас 100 рублей". И вот теперь я пишу "else". Что будет происходить? Сначала мы проверяем, что "drink" равно "кофе", если "drink" равно "кофе", выполняется вот эта инструкция, а если нет, то у нас осуществляется вот эта проверка, то есть эта проверка будет осуществляться только в том случае, если не выполнилось вот это условие. Теперь они как бы в одной связке, они не выполняются независимо друг от друга, как в прошлый раз, и теперь уже если "drink" равно "чай", то с нас 100 рублей, а иначе — мы ввели напиток, которого в меню нет, и нам про это скажут. Давайте проверим на всех примерах. Я ввожу "кофе", и теперь уже программа работает корректно, с нас попросили 150 рублей — и все, дальше у нас инструкции не выполняются. Теперь если я ввожу "чай", это равно "false", это равно "true", значит, мы выполняем вот эту инструкцию: "С вас 100 рублей". И наконец-то, если я хочу "лимонад", это равно "false", это тоже равно "false", и только когда оба этих условия равны "false", выполняется эта инструкция. Так работает "elif". Точно так же, как "if" и "else", "elif" может быть вложенным. Мы можем, например, усложнить наш пример и сказать, что в нашей кофейне продают теперь разный кофе, продают латте, капучино и раф. Что мы теперь — мы можем ввести напиток, и теперь, если он равен "кофе", мы можем ввести дополнительный вопрос "какой кофе вы желаете?", и обработать несколько возможных ситуаций: что "кофе" равно "латте", что "кофе" равно "капучино", что "кофе" равно "раф", и только если мы ввели какой-то кофе, которого в нашей кофейне не продают, мы говорим, что такого напитка в меню нет. Ситуация для чая остается точно такой же, мы говорим "С вас 100 рублей за чай", и если мы ввели, например, "лимонад", мы по-прежнему говорим, что такого напитка нет. Давайте я запущу этот код. Например, мы заказываем кофе, и теперь у меня спрашивают, какой кофе. Если я, например, закажу "латте", с меня спрашивают за латте. И давайте я введу еще пример с каким-нибудь кофе, которого в кофейне нет, например: "флэт уайт". Это равно "true", зато здесь у нас все вот эти три условия, все вот эти вот три логические переменные, равны "false", поэтому мы попадаем вот в эту "else". В качестве самопроверки вы также можете рассмотреть ситуацию, когда в кофейне продают разный чай, например, с жасмином, какой-нибудь "Эрл Грей" и какие-нибудь еще, тоже с помощью "elif". Итак, теперь мы умеем рассматривать не только ситуацию, когда у нас есть одно условие и два варианта развития событий, но и более сложные ситуации.