|
|
Програмування мовою Python: основи та практика Електронний посібник |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ТЕМА 5. ОРГАНІЗАЦІЯ РОЗГАЛУЖЕНЬ В ПРОГРАМАХ |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Часто у житті
ми стикаємося з твердженнями, які можуть бути правдивими чи хибними. Наприклад,
коли вам кажуть, що сума чисел 2 і 3 більша за 4, ви підтверджуєте це,
сказавши: «Так, це правильно». Але якщо стверджують, що сума 2 і 3 менше за
4, ви вважаєте це неправдивим. Ці твердження приймають лише два
можливих варіанти відповіді: «так»,
коли твердження вважається правдивим, або «ні»,
коли його вважають неправдивим.
У мові Python для вираження
істинності або неправдивості використовується
тип даних bool, який може мати лише
два значення: True (істина)
або False
(неправда). Проте у Python
істинним чи неправдивим може бути не лише
логічний вираз, а й об’єкт. v Ненульове
число чи непорожній об’єкт розглядаються як істина. v Нуль, порожні об’єкти та спеціальний об’єкт None вважаються неправдивими. Оператори відношень (порівнянь)
Результатом операції
порівняння є змінна логічного типу bool.
Усі попередні програми використовували лінійну
структуру, де кожна інструкція виконувалася
почергово, без умов, і виконувалася обов’язково. Щоб змінити порядок
виконання програмних операцій в залежності від певних умов, використовують
умовний оператор. Наприклад, якщо потрібно визначити,
чи є задане число x додатним (якщо x≥0) чи від’ємним (якщо x<0), структура програми вже не може бути просто
послідовною. Залежно від значення x потрібно вивести різне повідомлення. Для цього можна скористатися умовним оператором if-else, який
відомий як оператор розгалуження. Використовуючи
цей оператор, можна організувати виконання різних операцій залежно від
певного логічного виразу (умови).
Під час виконання оператора if-else обчислюється значення логічного виразу. Якщо значення логічного виразу істинне (True), то виконується
блок_інструкцій_1 (вирази, що є вкладеними в if). Якщо значення логічного виразу хибне (False),
виконується блок_інструкцій_2 (вирази, що є вкладеними в else).
Умовний оператор може бути неповним, якщо в ньому немає гілки
else, тобто немає службового
слова else
з відповідним йому блоком
інструкцій. Як можна бачити, запис службового слова if з логічним
виразом та службового
слова else
і відповідних їм блоків
інструкцій оформлюються в коді як основна інструкція та вкладений блок інструкцій.
Тобто всі інструкції, які належать до одного вкладеного блоку, повинні мати
рівну величину відступу, тобто однакове число пропусків на
початку рядка. Рекомендовано використовувати відступ в 4 пропуски і не
рекомендовано використовувати як відступ символ табуляції.
Приклад. Написати програму для визначення, чи є задане число
додатним чи не є додатним:
Зміни в умові завдання
потребуватимуть визначення, чи число є додатнім, від’ємним, чи нулем (0, як
відомо, не належить до додатних чи від’ємних чисел). Це означає розширення
програми для перевірки числа на нуль і виведення відповідного повідомлення. Є кілька можливих підходів до
розв’язання цієї задачі. Перший спосіб
— використання окремих перевірок.
У цій програмі відбувається перевірка всіх можливих випадків (більше, менше, рівне) з виведенням відповідних повідомлень. Варто
відмітити, що для перевірки 3-х взаємовиключних умов можна скористатися
методом виключення третього (якщо не перше і не друге,
то третє) і використати лише дві перевірки. Перепишемо програму. Спосіб 2. Використання
вкладених перевірок.
З наведеного коду програми можна бачити, що вона містить два оператори if-else, один з
яких вкладений в інший. Тобто оператор if-else для умови x <
0 вкладений (внутрішній)
в зовнішній оператор if-else для
умови x > 0.
Проте в мові Python передбачений спрощений запис для виконання таких
вкладених перевірок.
Оператор працює так. Обчислюється
значення логічного виразу 1. Якщо
значення логічного_виразу_1 істинне, то виконується блок_інструкцій_1. Якщо ж значення логічного_виразу_1 хибне, то відбувається
перехід до обчислення значення логічного
виразу 2. Якщо значення логічного_виразу_2
істинне, то виконується блок_інструкцій_2 і так далі. Блок_інструкцій_N буде виконаний в тому
випадку, якщо жодний з логічних виразів не був істинним. Враховуючи оператор if-elif-else, перепишемо нашу програму. Спосіб 3. Використання оператора if-elif-else.
Оператор if-elif-else
може використовуватися
для заміни оператора switch-case
або case в інших
мовах програмування. Як і в деяких
інших мовах програмування, в мові Python передбачений
тримісний оператор if/else, який в окремих випадках більш доцільно використовувати замість
оператора if-else, незважаючи на
те, що сфера його застосування більш вузька.
Часто виникає необхідність
виконувати в програмному коді різні команди, залежно від того, чи є істинною
певна умова. Взагалі така задача розв’язується
за допомогою умовного оператора, з яким ми познайомимося в наступному
розділі.
Тернарний оператор ‒ досить
складна конструкція. Спочатку вказується вираз (значення_1), який
визначає значення
тернарного оператора за істинності умови. Між цим виразом
й умовою розміщують ключове
слово if.
Після умови слідує ключове слово else, а потім ‒ вираз
(значення_2), що визначає результат тернарного оператора, якщо умова хибна. Невеликий приклад використання
тернарного оператора наведено в коді.
У цьому разі ситуація
досить проста. Спочатку користувач уводить два числа,
які записуються у змінні a і b. Для зчитування
введеного користувачем значення ми застосовуємо функцію input(). Проте, оскільки ця
функція як результат повертає введене користувачем значення в текстовому форматі, для надійності перетворюємо зчитане
значення у формат числа з рухомою крапкою,
для чого передаємо
результат виклику функції
input() як аргумент функції float(). Значення змінної res обчислюється
на основі тернарного оператора. У тернарному операторі перевіряється умова a<b. Якщо умова істинна,
то змінній res присвоюється текстове значення
змінної value_1. Якщо умова хибна, то змінній
res присвоюється значення змінної
value_2. Значення змінної res відображується
у вікні виводу за допомогою функції print(). Можливі ситуації, коли виникає
потреба у складних логічних висловах, що містять кілька базових логічних тверджень та операцій І (and), АБО (or) та НЕ (not). Оператори І
та АБО можуть мати як логічні
вирази (з логічними значеннями), так і нелогічні значення (наприклад, числа,
рядки, списки тощо). Це означає, що оператори І
та АБО можуть працювати з
будь-якими об’єктами.
Звернімося до
прикладу, де потрібно обчислити значення виразу 1/х без використання умовних операторів та
обробки винятків. Ця задача стає складною, оскільки ділення на 0 призведе до помилки. Використовуючи
властивості логічних операторів, вираз можна записати
як x and 1/x, використовуючи
те, що логічний оператор and повертає хибу, якщо х є 0.
Логічні вирази можна
комбінувати:
Для більшої
зрозумілості можна використовувати дужки.
Поміркуйте, що буде
виведене як результат виконання виразу, і чому буде отриманим саме такий
результат:
У Python можна перевіряти приналежність інтервалу:
import math a=float(input(‘Введіть коефіцієнти рівняння a,b,c:’)) b=float(input(‘‘)) c=float(input(‘‘)) d=b**2-4*a*c if d>=0: x1=(-b-math.sqrt(d))/(2*a) x2=(-b+math.sqrt(d))/(2*a)
print(‘x1={:.4},
x2={:.4}’.format(x1,x2)) else: print(‘Дійсних коренів немає’)
year=int(input(‘Введіть рік: ‘)) if (year % 4 == 0 and not year % 100 == 0) or
(year % 400 == 0): print(‘Рік високосний.’) else: print(‘Рік не високосний.’) Завдання для самоперевірки
Ø Умовний
оператор дає змогу виконувати різні блоки коду залежно від істинності або
хибності певної умови. Ø В
умовному операторі після ключового слова if вказується умова, яка перевіряється під час
виконання оператора. Якщо умова істинна,
виконується блок команд після умови. Якщо умова
хибна, виконується блок команд після
ключового слова else. Ø В
умовному операторі else-блок не
є обов’язковим. Також в умовному операторі
можуть використовуватися elif-блоки, що дає змогу
перевіряти в умовному операторі послідовно декілька умов і виконувати для кожної з них окремий блок
команд.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||