Умовні оператори

Синтаксис умовної інструкції

Всі раніше розглянуті програми мали лінійну структуру: всі інструкції виконувалися послідовно одна за однією, кожна записана інструкція обов'язково виконується.

Припустимо ми хочемо по даному числу x визначити його абсолютну величину (модуль). Програма повинна надрукувати значення змінної x, якщо x> 0 або ж величину -x в іншому випадку. Лінійна структура програми порушується: в залежності від справедливості умови x> 0 має бути виведена одна або інша величина. Відповідний фрагмент програми на Python має вигляд:

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) буде виконана завжди, незалежно від перевіряється умови.

Для виділення блоку інструкцій, що відносяться до інструкції if або else в мові Пітон використовуються відступи. Всі інструкції, які відносяться до одного блоку, повинні мати рівну величину відступу, тобто однакове число прогалин на початку рядка. Рекомендується використовувати відступ в 4 пробілу і не рекомедуется використовувати в якості відступу символ табуляції.

Це одне з істотних відмінностей синтаксису Пітона від синтаксису більшості мов, в яких блоки виділяються спеціальними словами, наприклад, нц ... кц в кумира, begin ... end в Паскалі або фігурними дужками в Сі.
-------------------------------------------------------------------------------------------------------------------
Вкладені умовні інструкції

Усередині умовних інструкцій можна використовувати будь-які інструкції мови Пітон, в тому числі і умовну інструкцію. Отримуємо вкладене розгалуження - після однієї розвилки в ході виконання програми з'являється інша розвилка. При цьому вкладені блоки мають більший розмір відступу (наприклад, 8 пробілів). Покажемо це на прикладі програми, яка за даними ненульовим числах x і y визначає, в який з чвертей координатної площині знаходиться точка (x, y):

x = int (input ())
y = int (input ())
if x> 0:
    if y> 0:           # x> 0, y> 0
        print ( "Перша чверть")
    else:              # x> 0, y <0
        print ( "Четверта чверть")
else:
    if y> 0:           # x <0, y> 0
        print ( "Друга чверть")
    else:              # x <0, y <0
        print ( "Третя чверть")

У цьому прикладі ми використовували коментарі - текст, який інтерпретатор ігнорує. Коментарями в Пітоні є символ # і весь текст після цього символу до кінця рядка.
------------------------------------------------------------------------------------------------------------------
Оператори порівняння

Як правило, в якості перевіряється умови використовується результат обчислення одного з наступних операторів порівняння:

<   Менше - умова вірна, якщо перший операнд менше другого.
>   Більше - умова вірна, якщо перший операнд більше другого.
<= Менше або дорівнює.
> = Більше або дорівнює.
==  Рівність. Умова вірно, якщо два операнда рівні.
! =  Нерівність. Умова вірно, якщо два операнда нерівні.

Наприклад, умова (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. При зворотному перетворенні str в bool порожній рядок перетворюється в False, а будь-яка непорожній рядок в Truтворенні число 0 перетворюється в False, а будь-який ненульовий число в True. При переe.

Логічні оператори
Іноді потрібно перевірити одночасно не одне, а кілька умов. Наприклад, перевірити, чи є дане число парне можна за допомогою умови (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, в решта випадках False.

Логічне АБО є бінарним оператором і повертає True тоді і тільки тоді, коли хоча б один операнд дорівнює True, в решта випадках False.  

Оператор "логічне АБО" має вигляд 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, якщо він присутній.
--------------------------------------------------------------------------------------------------------------------
Запитання
1. Які операції порівняння використовуються у мові Python 3? Який їх синтаксис?
2. Навіщо використовуються логічні операції? Перерахуйте їх.
3. Який синтаксис та правила виконання оператора розгалуження if...else?
4. Дано фрагмент коду:

if а%10<3: 
    b = a*2
elif а%10 <= 5: 
    b = a+10
elif а%10 <= 7: 
    b = a*10
else
    b = a+1

Чому дорівнюватиме значення змінної b після виконання коду, якщо спочатку:
а) а = 13;
б) а = 30;
в) a = 88;
г) а = 11 ?

5. Запишіть оператор розгалуження для визначення за номером деякого року у (у>0) номера його століття С.

-----------------------------------------------------------------------------------------------------------------

Завдання для самостійного виконання
1. Тренер формує команду для гри в баскетбол з учнів, зріст яких не менше180 см. Розробіть програму визначення, чи потрапить до цієї команди учень, зріст якого дорівнює h см.
2. Оклад працівника дорівнює s грн. Якщо він якісно виконує завдання, йому нараховується премія в розмірі 50% окладу. Розробіть програму визначення реальної заробітної платні працівника.


Комментариев нет:

Отправить комментарий