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