Потік керування

В програмуванні потоком керування (control flow) називають порядок у якому виконуються команди. Існують декілька структур мови або операцій, що дозволяють змінювати (керувати) потоком виконання заданих інструкцій. Можливо Ви не чули такий термін раніше, однак самі операції використовували навіть не один раз — це if, while, for тощо.

Операції потоку керування можна поділити на базові алгоритмічні структури (далі БАС), команди безумовного переходу, підпрограми та продовження. У Python з практичних міркувань сучасних принципів програмування відсутні команди безумовного переходу, goto або jump. Також у базовій комплектації немає продовжень (зокрема співпрограм), яких не було й у Java. Ці види операцій є досить розширеними, тому не будуть покриватись цим курсом основ.

БАС забезпечують створення алгоритмів розв’язання деяких задач. Основні БАС поділяють на:

  • слідування — послідовне виконання команд
  • розгалуження
  • повторення

Розгалуження

Раніше Ви вже мали б використовувати у Java такі структури, як if-else та switch. Погляньмо, як це працює у Python.

Так як Пайтон є мовою, у якій “блоки” відокремлюють відступами, то фігурні дужки тут використовувати не треба. Для того, щоб відокремити умову від інструкцій потрібно писати двокрапку. На відміну від багатьох інших мов, замість else if тут є одне слово — elif. Загальною схемою if-else можна зобразити так:

if <умова>:
    <інструкції>
elif <умова>:
    <інструкції>
else:
    <інструкції>

Звичайно, else та elif можуть бути необов’язковими й у цій мові. Якщо інструкція лише одна, можна не переходити на новий рядок з відступами, а писати все у рядок:

if <умова>: <інструкція>

range

Один незвичайний тип даних, що є досить широко використовуваним у Python — це range. Він позначає інтервал, або послідовність певних чисел. Створити його можна функцією range(<початок>, <кінець>). Зверніть увагу: початок включений, а кінець ні — у математиці такий проміжок позначають [початок; кінець).

range(2, 6) # 2, 3, 4, 5

Ця функція може також мати один аргумент. У такому випадку рахунок починається від 0 до вказаного числа виключно. Можна надати й третій аргумент, який вказує крок.

range(4) # 0, 1, 2, 3
range(0, 8, 2) # 0, 2, 4, 6

in та ланцюгове порівняння, приклад

age = int(input("Скільки Вам років? "))
if age < 13:
    print("Ви дитина.")
elif 13 <= age < 18:
    print("Ви підліток.")
elif age in range(18, 65):
    print("Ви доросла людина.")
else:
    print("Ви пенсіонер.")

Даний код запитує ввести вік у роках у користувача та порівнює його зі значеннями для виведення вікової категорії. Тут є дві нові речі: оператор in та ланцюгове порівняння.

По-перше, у Python, на відміну від решти мов програмування, не обов’язково використовувати “І” (&& у Java) для перевірки двох умов. Замість 13 <= age && age < 18 можна писати скорочено 13 <= age < 18.

По-друге, оператор in використовується тут для перевірки, чи наявне число у діапазоні. Цей оператор має багато застосувань, але про інші його використання буде розказано пізніше.

Тернарний оператор

На відміну від багатьох мов, дизайнер Python обрав інакший синтаксис для потрійного оператора. Виглядає він так:

<істинне значення> if <умова> else <хибне значення>
oberneneChyslo = -chyslo if chyslo > 0 else chyslo

Повторення

Як і в інших мовах, у Python є цикли: while та for, а також особливі інструкції break і continue. Проте, не все може бути таким очевидним.

while

Здавалося б, while є найпростішим циклом, що виконується допоки умова є істинною, і це справді так.

while <умова>:
    <інструкції>

А втім, у Python до цього циклу можна додати ще else. Дивно, чи не так? Команди в else будуть виконані у тому випадку, якщо умова while є хибною. Зазвичай це означає виконання після завершення циклу. Тоді логічно, що якщо умова з самого початку була хибною, і цикл не виконувався взагалі, то команди в else будуть теж виконані.

Отже, Ви можете спитати: навіщо else, якщо тоді можна написати інструкції просто після циклу? Не слід забувати про break — якщо таким чином примусово вийти з циклу, тоді else не виконається. Блок схемою while-else можна пояснити так:

pythontutorial.net

Звичайно, наведу приклад, що рахує від 0 до 2, а коли умова i < 3 стає хибною, виводить “else”:

i = 0
while i < 3:
    print(i)
    i += 1
else:
    print("else")

0
1
2
else

for

На відміну від інших багатьох мов програмування, цикл for у Пайтоні — не звичайний цикл у стилі C з трьома компонентами, а скоріше як “покращений for”, або ж foreach. Він виконує дії для кожного елемента послідовності або сукупності:

for <елемент> in <контейнер>:
    <інструкції>

Раніше згадувалося про range() — послідовність чисел, та оператор in, які ми використовуємо у for для перебору кожного числа з послідовності. Наприклад, for(int i = 0; i < 5; i++) у Python можна записати так: for i in range(5).

Безперечно, “контейнер” може означати і список, і словник, і кортеж, і навіть інші деякі об’єкти. Нижче показано код, який виведе кожен фрукт на окремому рядку.

fruits = ["яблуко", "банан", "апельсин"]
for fruit in fruits:
    print(fruit)

Так само, як і while, до цього циклу можна додати else. Найчастішим застосуванням else є пошук якогось значення і виведення помилки, якщо його немає:

for el in someList:
    if el == "шукане": break
else:
    print("Такого у списку немає.")

pass

У Java для позначення “нічого не робити” ми могли використовувати крапку з комою, як-от while(obj = nextObj()) ;. У Python таке не працює. Для позначення “порожньої інструкції” можна застосувати ключове слово pass:

while obj = nextObj():
    pass

Copyleft 🄯 2020–2024 Михайло Стецюк <yaBobJonez@gmail.com>.
Сайт має ліцензію Creative Commons License.
Дякую рідній школі та вчителям!