Всі раніше розглянуті програми мали лінійну структуру: всі інструкції виконувалися послідовно одна за однією, кожна записана інструкція обов'язково виконується.
Припустимо ми хочемо по даному числу 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% окладу. Розробіть програму визначення реальної заробітної платні працівника.
Немає коментарів:
Дописати коментар