3. Логічні оператори
Ви ознайомилися з усіма видами умов, які є в мові
Python, однак є ще одна конструкція, яка спрощує про-
цес написання програм – це команди and і or.
Перед тим як їх розглянути, давайте поговоримо
про умови. Умови, які ми розглядали раніше, були про-
стими. Наприклад, якщо граючи в гру, ви набираєте до-
статню кількість очок, то переходите на наступний рі-
вень. Це проста умова.
Якщо ж для того, щоб перейти на новий рівень,
вам потрібно побудувати будівлю, захопити табір про-
тивника і здобути 150 одиниць золотої руди, це буде вже
складна умова.
Для використання складних умов існують спеці-
альні команди – and, or, not. Ці команди використову-
ються для об'єднання декількох умов:
■■ команда and (і) – для виконання дій потрібно, щоб
всіумовибулиправдивими.Інакшекажучи,обидва
вирази повинні бути true;
a = 5
b = 5
if (a>0) and (b>0):
вираз
...
3
Умовна інструкція
4. ■■ команда or (або) – для виконання дій потрібно,
щоб одна з умов була правдивою. Команда вико-
нається, якщо хоча б одна з умов буде true;
a = 0
b = 5
if (a>0) or (b>0):
вираз
...
■■ команда not (не) – для виконання дій потрібно,
щоб умова була false.
a = 5
if (not a==0):
вираз
Наведена нижче таблиця наочно демонструє прин-
цип роботи логічних операторів.
A B A AND B A OR B NOT A
false false false false true
false true false true true
true false false true false
true true true true false
Варто звернути увагу на те, що умов може бути ве-
личезна кількість, але правила залишаються такими ж.
4
Урок № 5
5. Каскадна умовна
інструкція if-elif
Умови – важливі і часто використовувані компо-
ненти будь-якої програми. Однак не завжди можна
оформити умову у вигляді if-else, тому таку конструк-
цію можна трохи поліпшити, додавши команду elif. На
рисунку 1 показана схема роботи такої конструкції.
Рисунок 1
5
Умовна інструкція
6. Тепер з’ясуємо, що відбувається на даній схемі (див.
рис. 1 на сторінці 5):
1. Перевіряємо умови при if:
■■ якщо вона правдива, виконуємо код в блоці 1;
■■ якщо вона неправдива, переходимо до кроку 2.
2. Перевіряємо умови при elif:
■■ якщо вона правдива, виконуємо код в блоці 2;
■■ якщо вона неправдива, переходимо до кроку 3.
…
n. Завершальна в цьому ланцюжку умова else. Код в
цьому блоці виконається в тому випадку, якщо до
цього жодна умова не виконалася.
6
Урок № 5
7. Проектування простого
комп’ютерного асистента
Давайте напишемо програму – простого особисто-
го асистента, який би аналізував дату народження лю-
дини за різними критеріями. За його допомогою можна
буде дізнатися рік народження користувача, його вікову
групу і вік в секундах (рис. 2).
Погляньте на код:
import datetime
print("n---------------------------------------")
print("Enter 1 if you want to know about the year
(365 or 366 days).")
Рисунок 2
7
Умовна інструкція
8. print("Enter 2 if you want to know about
the age group.")
print("Enter 3 if you want to know about the age
in seconds.")
print("-------------------------------------n")
birth_day = int(input("Your birth day is xx: "))
birth_month = int(input("Your birth month is xx:
"))
birth_year = int(input("Your birth year is xxxx:
"))
day = int(datetime.date.today().day)
month = int(datetime.date.today().month)
year = int(datetime.date.today().year)
number = int(input("Select what you want: "))
if month > birth_month:
age = year - birth_year
else:
age = (year - birth_year) - 1
if (number > 0) and (number < 4) and (age >= 0)
and (age < 130):
if number == 1:
if birth_year % 4 != 0:
print("It is a common year (365 days)")
8
Урок № 5
9. else:
print("It is a leap year (366 days)")
elif number == 2:
print("Your group is ", end="")
if age < 1:
print("Baby")
elif (age >= 1) and (age < 3):
print("Toddler")
elif (age >= 3) and (age < 5):
print("Preschool")
elif (age >= 5) and (age < 12):
print("Gradeschooler")
elif (age >= 12) and (age < 19):
print("Teen")
elif age >= 19:
print("Adult")
elif number == 3:
print("Your age: {} year, {} month,
{} day" .format(age,
abs(month-birth_month),
abs(day-birth_day)))
seconds = ((age * 31536000) + ((month-1) *
2592000) + ((day-1) * 86400))
print("Your age is {} seconds"
.format(seconds))
else:
print("Error! Try again.")
9
Умовна інструкція
10. 10
Урок № 5
З’ясуємо докладніше, що відбувається у цій програ-
мі.
Ми вже працювали з бібліотекою datetime, і в цій-
програмі вона виявилася дуже доречною. Використо-
вуючи дані про поточний рік datetime.date.today().
year, місяць datetime.date.today().month і дату
datetime.date.today().day, ми можемо розрахувати
точний вік людини, знаючи дату її народження.
Спочатку потрібно запропонувати ввести дані ко-
ристувача (день, місяць і рік народження):
birth_day = int(input("Your birth day is xx: "))
birth_month = int(input("Your birth month is xx:
"))
birth_year = int(input("Your birth year is xxxx:
"))
А потім у змінні day, month і year записуємо по-
точну дату:
day = int(datetime.date.today().day)
month = int(datetime.date.today().month)
year = int(datetime.date.today().year)
Далі в нашій програмі використовується конструк-
ція if-else. Можливо, ви запитаєте, навіщо ж вона
потрібна? Все досить просто, якщо ми не порівняємо
поточний місяць і місяць народження, то не зможемо
обчислити точний вік.
Якщо програма буде ігнорувати місяць народження
користувача, то, цілком ймовірно, помилиться в розра-
11. 11
Умовна інструкція
хунках. Щоб уникнути таких помилок, нам і потрібно
знати поточний вік:
if month > birth_month:
age = year - birth_year
else:
age = (year - birth_year) - 1
В програмі використано кілька вкладених умов і ло-
гічний оператор and. Це необхідно для того, щоб пере-
вірити такі умови: чи правильно введений номер дії (є 3
команди на вибір) і чи реальний був вказаний вік:
if (number > 0) and (number < 4) and (age >= 0)
and (age < 130):
В першому if ми порівнюємо число, яке ввів корис-
тувач (1, 2 або 3) з одиницею. Якщо результат true, то
програма обчислює, чи був це високосний рік. Якщо ре-
зультат ділення не кратний 4, тобто не ділиться на 4 без
остачі, то в році було 365 днів:
if number == 1:
if birth_year % 4 != 0:
print("It is a common year (365 days)")
else:
print("It is a leap year (366 days)")
Найдивовижніше в даному коді – це визначення
віку аж до кількості місяців і днів, а також розрахунок
віку в секундах.
12. 12
Урок № 5
Тут нам знадобляться базові знання з математики.
Оскільки в секундах 1 рік дорівнює 31536000 с,
місяць – 2592000 с, а день – 86400 с, слід використовува-
ти такий код:
elif number == 3:
print("Your age: {} year, {} month,
{} day" .format(age,
abs(month-birth_month),
abs(day-birth_day)))
seconds = ((age * 31536000) + ((month-1) *
2592000) + ((day-1) * 86400))
print("Your age is {} seconds"
.format(seconds))
Написання даної програми дозволить не тільки ви-
користовувати отримані на цьому уроці знання, а й за-
кріпить інформацію, яку ви дізналися на попередніх за-
няттях.