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