[ЗВУК] [ЗВУК] Теперь посмотрим более сложные задачи. Если вы изучали математику в школе не так давно, то, возможно, еще помните такую штуку как координатные четверти. Координатные четверти разделяют всю нашу плоскость на четыре четверти. Если x и y положительны — то это первая четверть. Если x отрицательно, а y положительно — это вторая четверть, ну и так далее против часовой стрелки до четырех номеров. И у нас есть задача: по введенным координатам точки x и y (пусть они для простоты не равны нулю), определить, в какой координатной четверти находится эта точка. Как это можно сделать? Во-первых, конечно же, нам нужно считать координаты этой точки, [ЗВУК] а дальше мы можем написать четыре if отдельно для каждой четверти, но можно обойтись и без них. Как мы можем это сделать? Например, мы можем отдельно рассмотреть случай, когда x координата положительна. Это либо первая четверть, если оно вверху, либо четвертая четверть, если оно внизу. Внутри этого if мы можем написать еще один if. Сюда мы попадем только, если x > 0, а вот внутрь вложенного if мы попадем, если еще и одновременно с этим y > 0. Это соответствует первой координатной четверти. Теперь напишем else — «иначе». Напомню, что у нас нулей не бывает, поэтому можно так написать, и ничего страшного, если мы дадим неправильный ответ для точки, у которой хотя бы одна из координат равна нулю. То есть можно считать, что этот else будет срабатывать только для отрицательных y, потому что нулевых y не существует в нашей задаче. И для отрицательных y это будет четвертая координатная четверть. Как интерпретатор Phyton понимает, к какому if какой else относится? По отступам. Здесь у нашего if y > 0 и у else одинаковый отступ. Значит этот else относится к нему. Если бы мы написали вот так, то это бы означало, что else относится к нашему внешнему if, где проверяется x. Кстати сейчас он нам потребуется. Мы можем написать вот такую конструкцию. Этот else будет выполняться, когда x ≤ 0, и в нем точно такой же if по y для положительных и отрицательных y. [ЗВУК] Итак, если у нас x отрицательный, а y положительный, то это вторая координатная четверть, и в противном случае это третья координатная четверть. Посмотрим, по-хорошему нужно прогнать четыре теста на каждую из четвертей. Ну давайте посмотрим быстренько, все ли у нас работает. [ЗВУК] В очередной раз я поймал ошибку из-за ввода через пробел, но я умею ее исправлять. Осталась последняя ситуация: x положительный, y отрицательный. Все, отлично, для всех четырех четвертей я проверил, всегда выводит правильно. И не забывайте проверять свои решения тоже на всех возможных ситуациях. Если у вас в программе несколько ветвлений (if, else вложены, как в нашем случае), хорошие тесты должны войти в каждую ветвь программы. То есть у нас должен сработать и if, и else, и каждый if–else должен сработать. Только тогда программа может считаться хоть сколько-то хорошо протестированной. Посмотрим еще один тип задач. Например, мы хотим по введенному числу выводить его текстовое название на английском языке, хотя бы для чисел 1, 2 и 3. Как это можно описать? Можно написать несколько if. То есть, если x = 1, печатаем слово One. А теперь пусть нам нужно, кроме того, чтобы проверить 1, 2 или 3, еще и сказать, что введено что-то другое, отличное от 1, 2 и 3. То есть есть какие-то варианты, когда мы должны сделать что-то конкретное, и вариант по умолчанию: что делать, если ни один из этих трех не сработал. Конечно, мы можем написать три отдельных if для каждого из вариантов, потом написать сложное логическое выражение, что ни один из них не сработал, всего четыре if. Но зачем писать сложное логическое выражение? Можно написать проще: сделать else, если x не равно 1. Проверим, а может быть он равен 2? Напечатаем в такой ситуации Two. Теперь к этому if в свою очередь else, в него мы попадем, только если x не равен 1 и в то же время не равен 2. Может быть он равен 3? Обработаем эту ситуацию отдельно. И наконец, к нему уже else, в него мы попадаем только если x одновременно не равен 1, не равен 2, не равен 3. Печатаем, что это что-то другое. Давайте проверим сразу на тройке, чтобы не терять много времени. Хорошо, работает, ну и на всякий случай для надежности на чем-то другом. Работает. По-хорошему, конечно, нужно для 1 и 2 тоже проверить. Теперь представим себе, что у нас не три числа, а пару десятков вариантов. Как вы видите, у нас добавляются каждый раз отступы, и через некоторое время наша программа полностью уедет за пределы экрана. Читать такой код очень неудобно, и специально для этой ситуации в Phyton придумана конструкция elif — сокращение от else и if, которая позволяет не делать дополнительный отступ. То есть мы можем написать вот так: if x = 1, что-то делаем, elif x = 2, что-то делаем, и так далее, сколько нам этих elif нужно. И теперь наша программа не разъезжается ступеньками, а выглядит очень даже прилично. То есть у нас каждый случай рассматривается. К любой последовательности elif можно написать else. Если ни один из них не выполнился, то выполнится то, что находится в ветви else. Запустим и посмотрим. Для единицы работает, посмотрим сразу для пятерки. Да, работает. То есть вот такой способ: if — «если», elif — «иначе, если какое-то условие», и вообще сколько угодно elif-ов позволяют обработать больше, чем два варианта. И в конце присутствует необязательный блок else. Как мы видели в задаче про модуль, else вовсе не обязательно должен быть, когда у нас всего один if. Когда у нас if-ы и некоторый набор elif-ов, то else тоже абсолютно необязателен. И если нам для решения задачи он не нужен, то можно его не писать. [ЗВУК] [ЗВУК]