Потік керування
В програмуванні потоком керування (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 можна пояснити так:
Звичайно, наведу приклад, що рахує від 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