Lesson 3
 Условия: if-then-else
    1. Синтаксис
Все программы первого урока выполнялись последовательно, строка за строкой. Никакая строка не может быть пропущена.
Рассмотрим следующую задачу: для данного целого X определим ее абсолютное значение. Если X> 0, то программа должна печатать значение X, иначе оно должно печатать -X. Такое поведение невозможно достичь с помощью последовательной программы. Программа должна условно выбрать следующий шаг. Вот где помогают условия:
x = int(input())
if x > 0:
    print(x)
else:
    print(-x)
 Эта программа использует условный оператор if . После того if мы положим условие (x > 0) следующее двоеточием. После этого мы помещаем блок инструкций, который будет выполняться только в том случае, если условие истинно (т.е. имеет значение True ). За этим блоком может следовать слово else , двоеточие и другой блок инструкций, который будет выполняться только в том случае, если условие является ложным (т.е. имеет значение False ). В приведенном выше случае условие ложно, поэтому выполняется блок «else». Каждый блок должен иметь отступы, используя пробелы. 
Подводя итог, условный оператор в Python имеет следующий синтаксис:
if condition :
    true-block
    several instructions that are executed
    if the condition evaluates to True
else:
    false-block
    several instructions that are executed
    if the condition evaluates to False
 Ключевое слово else с блоком «false» может быть опущено в случае, если ничего не должно быть сделано, если условие ложно. Например, мы можем заменить переменную x своим абсолютным значением следующим образом:
x = int(input())
if x < 0:
    x = -x
print(x)
 В этом примере переменная x назначается -x только если x < 0 . Напротив, команда print(x) выполняется каждый раз, потому что она не имеет отступов, поэтому она не принадлежит блоку «истина». 
Отступ является общим способом в Python для разделения блоков кода. Все инструкции в одном и том же блоке должны быть отступом одинаково, т. Е. Они должны иметь одинаковое количество пробелов в начале строки. Для отступов рекомендуется использовать 4 пробела.
 Отступ - это то, что делает Python отличным от большинства других языков, в которых фигурные скобки { и } используются для формирования блоков. 
Кстати, встроенная функция для абсолютного значения в Python:
x = int(input()) print(abs(x))
2. Вложенные условия
Любая инструкция Python может быть помещена в «истинные» блоки и «ложный» блок, включая другой условный оператор. Таким образом, мы получаем вложенные условия. Блоки внутренних условий имеют отступы, используя в два раза больше пробелов (например, 8 пробелов). Давайте посмотрим пример. Если заданы координаты точки на плоскости, напечатайте ее квадрант.
x = int(input())
y = int(input())
if x > 0:
    if y > 0:
        # x больше 0, y больше 0
        print("Quadrant I")
    else:    
        # x больше 0, y меньше или равно 0
        print("Quadrant IV")
else:
    if y > 0:
        # x меньше или равно 0, y больше 0
        print("Quadrant II")
    else:    
        # x меньше или равно 0, y меньше или равно 0
        print("Quadrant III")
 В этом примере мы используем комментарии: пояснительный текст, который не влияет на выполнение программы. Этот текст начинается с хеша # и длится до конца строки.
    
3. Операторы сравнения
 Обычно условие after if имеет один или несколько из следующих операторов: 
-  <
-  Меньше  - условие истинно, если левая сторона меньше правой. 
-  >
-  большая  - условие истинно, если левая сторона больше правой. 
-  <=
-  меньше или равно. 
-  >=
-  больше или равно. 
-  ==
-  равны. 
-  !=
- не равный.
 Например, условие x * x < 1000 означает «значение выражения x * x меньше 1000», а условие 2 * x != y означает «удвоенное значение переменной x не равно значению переменной y ". 
 Операторы сравнения в Python могут быть сгруппированы следующим образом: a == b == c или x <= y >= 10 . Это редкая вещь среди языков программирования.
    
4. Объекты Bool и логические операторы
 Когда мы суммируем два целых объекта с помощью оператора + , например 2 + 5 , мы получаем новый объект: 7 . Точно так же, когда мы сравниваем два целых числа с помощью оператора < , как 2 < 5 , мы получаем новый объект: True .
print(2 < 5) print(2 > 5)
True и False имеют специальный тип bool . Поскольку каждое имя типа может использоваться для приведения объектов в этот тип, давайте посмотрим, что этот приведение дает для чисел:print(bool(-10))    # Правда
print(bool(0))      # False - ноль - единственное ошибочное число
print(bool(10))     # Правда
print(bool(''))     # False - пустая строка является единственной ложной строкой
print(bool('abc'))  # Правда
 Иногда вам нужно сразу проверить несколько условий. Например, вы можете проверить, делится ли число n на 2, используя условие n % 2 == 0 ( n дает остаток 0 при делении на 2 ). Если вам нужно проверить, что два числа n и m оба делятся на 2, вы должны проверить как n % 2 == 0 и m % 2 == 0 . Для этого вы присоединяетесь к ним с помощью оператора and (логическое И): n % 2 == 0 and m % 2 == 0 . 
Python имеет логическое И, логическое ИЛИ и отрицание.
 Оператор and является двоичным оператором, который оценивает значение True тогда и только тогда, когда и его левая сторона, и правая сторона являются True . 
 Оператор or является двоичным оператором, который оценивает значение True если хотя бы одна из его сторон имеет значение True . 
 Оператор not является унарным отрицанием, за ним следует некоторое значение. Он оценивается как True если это значение False и наоборот. 
Давайте проверим, что хотя бы одно из двух чисел заканчивается 0:
a = int(input())
b = int(input())
if a % 10 == 0 or b % 10 == 0:
    print('YES')
else:
    print('NO')
 Давайте проверим, что число a положительно, а число b неотрицательно: 
if a > 0 and not (b < 0):
 Вместо not (b < 0) мы можем написать (b >= 0) .
    
5. слово 'elif'
 Если у вас есть более двух опций, которые можно разделить с помощью условного оператора, вы можете использовать if... elif... else . 
Давайте покажем, как это работает, переписав пример с точкой (x, y) на плоскости и квадрантами сверху:
x = int(input())
y = int(input())
if x > 0 and y > 0:
    print("Quadrant I")
elif x > 0 and y < 0:
    print("Quadrant IV")
elif y > 0:
    print("Quadrant II")
else:
    print("Quadrant III")
 В этом случае условия в if и elif проверяются один за другим, пока не будет найдено первое истинное условие. Затем выполняется только истинный блок для этого условия. Если все условия ложны, блок «else» выполняется, если он присутствует.