Перейти до змісту

Інструкція if

Хід виконання програми може бути лінійним, тобто таким, коли вирази виконуються, починаючи з першого і закінчуючи останнім рядком, по порядку, не пропускаючи жодного рядка коду. Але частіше буває зовсім не так. При виконанні програмного коду деякі його ділянки можуть бути пропущені.

Щоб краще зрозуміти чому, проведемо аналогію з реальним життям. Припустимо, людина живе за розкладом (можна сказати, розклад - це своєрідний "програмний код", який слід виконати). У її розкладі о 19:00 запланований онлайн-заняття з програмування на Python. Але такі заняття відбуваються не кожного дня, а тільки щочетверга. Отже однією з умов участі людини в занятті о 19 годині є те, що сьогодні четвер, інакше в цей час доцільно виконувати інші дії.

if

Схожа нелінійність дій може бути передбачена і в комп'ютерній програмі. Наприклад, частина коду повинна виконуватися лише при певному значенні конкретної змінної.

В Python для цього існує інструкція "if". Записується вона так:

if condition:
    block_of_code

Перший рядок — це заголовок інструкції. Він у свою чергу записується так:

  • ключове слово if
  • логічний вираз (у прикладі вище він позначений як condition)
  • символ двокрапки

З наступного після заголовка рядка йде блок коду (вище позначено як block_of_code). Блок коду — це одна або більше інструкцій записаних з відступом праворуч. Відступ означає те, що у кожен рядок програми з інструкцією на початку ми додаємо декілька символів пробіл. Кількість пробілів має бути однаковою. Рекомендується використовувати чотирма пробіли. Деколи у якості відступа вказуються символ табуляції, хоча такий спосіб зазвичай не є бажаним.

Усі інструкії записані з відступом і є блок кода. Коли чергова інструкція буде записана без відступа, то говорять, що блок кода закінчився, а ця інструкція знаходиться на тому ж рівні, що і заголовок інструкції if.

Тепер як це працює. Якщо логічний вираз після ключового слова if дає значення True, тоді і лише тоді виконуються усі інструкції розташовані у блоці кода.

Розглянемо приклад:

if cash >= total:
    change = cash - total

Якщо вираз

cash >= total

поверне True, або іншими словами якщо виконається вказана умова, тоді буде виконано блок коду. У наведеному прикладі блок коду складається з одної інструкції:

change = cash - total

Вищенаведений код можна прочитати так:

Якщо cash більше або дорівнює total, то change слід присвоїти різницю між cash і total.

Приклад з декільками рядками коду які будуть виконуватись при певній умові:

if cash >= total:
    print('Дякуємо за покупку')
    change = cash - total
    print('Решта:', change)
print('До побачення')

У вищенаведеному коді при виконанні умови виконається три інструкції. Але остання інструкція print('До побачення') виконається у будь-якому випадку тому що вона вже не входить в блок коду, який стосується інструкції if.

Розгалуження можуть бути вкладеними:

if cash >= total:
    print('Дякуємо за покупку')
    if cash != total:
        change = cash - total
        print('Решта:', change)
print('До побачення')

Зауважте: блок коду має містити хоча б одну інструкцію.

if cash >= total:
    # print('Дякуємо за покупку')
    # change = cash - total
    # print('Решта:', change)
print('До побачення')

У наведеному вище прикладі блок кода не містить жодної інструкції. Якщо виконати такий код, отримаємо:

  File ...
    print('До побачення')
    ^
IndentationError: expected an indented block
>>>

Помилку можна прочитати так:

Помилка відступа: очікувався блок з відступом.

У випадках, коли треба вказати, що у блоці кода нічого не потрібно виконувати, використовують інструкцію pass.

if cash >= total:
    pass
    # print('Дякуємо за покупку')
    # change = cash - total
    # print('Решта:', change)
print('До побачення')