Умовний оператор. Теорія.

Оператор розгалуження

Всі, вище розглянуті програми, мали лінійну структуру: кожен оператор
виконувався послідовно один за одним і кожен оператор обов’язково
виконався один раз.
Приклад. Написати програму знаходження модуля числа x. Програма
повинна виводити значення змінної x, якщо x > 0 або ж величину -x в іншому
випадку.
Лінійна структура програми порушується: в залежності від справедливості
умови x > 0 має бути виведена одна або інша величина. Відповідний фрагмент
програми на Пайтоні має вигляд:
x = int(input ())
if x > 0:
 print (x)
else:
 print (-x)
У цій програмі використовується умовний оператор if (якщо). Після слова
if вказується умова (x > 0), яка завершується двокрапкою. Після цього йде блок
(послідовність) операторів, який буде виконаний, якщо умова істинна. У
нашому прикладі це виведення на екран величини x. Дальше слідує слово else
(інакше), яке також завершується двокрапкою, і блок операторів, який буде
виконано, якщо умова хибна. В цьому випадку виводиться значення -x.
Отже, умовний оператор в Пайтоні має наступний синтаксис:
if Умова:
 Блок операторів 1
else:
 Блок операторів 2
Блок операторів1 буде виконаний, якщо Умова істинна. Якщо Умова
хибна, буде виконаний Блок операторів2.
В умовному операторі може бути відсутнім слово else і відповідний йому
блок. Такий оператор розгалуження називається неповним. Наприклад, якщо
дано число x і ми хочемо замінити його на абсолютну величину x, то це можна
зробити таким чином:
if x < 0:
 x =-x
print (x)
У цьому прикладі змінної x буде присвоєно значення -x, але тільки в тому
випадку, коли x < 0. А оператор print (x) буде виконуватися завжди, незалежно
від виконання умови.
Для виділення блоку операторів у мові Пайтон використовуються
відступи. Всі оператори, які належать до одного блоку, повинні мати однаковий
відступ, тобто однакове число пробілів на початку рядка. Рекомендується
використовувати відступ в 4 пропуски і не рекомендується використовувати для
відступів символ табуляції.
Це одна з істотних відмінностей синтаксису Пайтона від синтаксису
більшості мов, в яких блоки виділяються спеціальними словами. Наприклад, НЦ
... КЦ в алгоритмічній мові, begin ... end в Паскалі або фігурними дужками в Сі.
Для побудови умови використовується результат обчислення одного з
наступних операторів порівняння:
<
Менше - умова вірна, якщо перший операнд менший за другий.
>
Більше - умова вірна, якщо перший операнд більший за другий.
<=
Менший або рівний.
> =
Більший або рівний.
==
Рівність. Умова вірна, якщо два операнди рівні.
! =
Нерівність. Умова вірна, якщо два операнди нерівні.
Наприклад, умова (x * x <1000) означає "значення x * x менше 1000", а
умова (2 * x! = Y) означає "подвоєне значення змінної x не дорівнює значенню
змінної y".
Оператори порівняння у Пайтоні можна об'єднувати в ланцюжки (на
відміну від більшості інших мов програмування, де для цього потрібно
використовувати логічні зв'язки). Наприклад, умови a == b == c та 1 <= x <= 10
написані вірно.

Тип даних bool

Оператори порівняння повертають значення спеціального логічного типу
bool. Значення логічного типу можуть приймати одне з двох значень: True
(істина) або False (хибне). Якщо перетворити логічне True до типу int, то
отримаємо 1, а таке ж перетворення False - дасть 0. При зворотному
перетворенні число 0 перетвориться в False, а будь ненульове число в True. При
перетворенні str в bool порожній рядок перетворюється в False, а будь-який
непорожній рядок в True.

Логічні оператори

Іноді потрібно перевірити одночасно не одну, а декілька умов.
Наприклад, треба перевірити, чи є дане число парним можна за допомогою
умови (n % 2 == 0) (залишок від ділення n на 2 дорівнює 0), а якщо необхідно
перевірити, чи два даних цілих числа n і m є парними, то перевіряємо
справедливість двох умов: n % 2 == 0 і m % 2 == 0 і для цього їх об’єднуємо за
допомогою оператора and (логічне І): n % 2 == 0 and m % 2 == 0.
У Пайтоні існують стандартні логічні оператори: логічне І, логічне АБО,
логічне заперечення.
Логічне І є бінарним оператором (тобто оператором з двома операндами:
лівим і правим) і має вигляд and. Оператор and повертає True тоді і тільки тоді,
коли обидва його операнди мають значення True.
Логічне АБО є бінарним оператором і повертає True тоді і тільки тоді, коли
хоча би один операнд дорівнює True. Оператор "логічне АБО" має вигляд or.
Логічне НЕ (заперечення) є унарним (тобто з одним операндом)
оператором і має вигляд not, за яким слідує єдиний операнд. Логічне НЕ
повертає True, якщо операнд дорівнює False і навпаки.
Приклад. Перевіримо, чи хоча б одне з чисел a або b закінчується на 0:
 if a % 10 == 0 or b % 10 == 0:
Перевіримо, що число a - позитивне, а b - невід'ємне:
 if a > 0 and not (b <0):
Або можна замість not (b <0) записати (b> = 0).

Каскадний умовний оператор

Приклад програми, що визначає чверть координатної площини, можна
переписати використовуючи "каскадну" послідовність операцією if ... elif ... else:
x = int (input ())
y = int (input ())
if x > 0 and y > 0:
 print ("Перша чверть")
elif x > 0 and y < 0:
 print ("Четверта чверть")
elif y > 0:
 print ("Друга чверть")
else:
 print ("Третя чверть")
У такій конструкції умови if, ..., elif перевіряються по черзі і виконується
блок, який відповідає першій з істинних умов. Якщо всі умови хибні, то
виконується блок else, якщо він присутній.