Умовні оператори

Останнє оновлення 2026-06-18 | Редагувати цю сторінку

Огляд

Питання

  • Як програми можуть виконувати різні дії для різних даних?

Цілі

  • Правильно писати програми, які використовують оператори if та else, та прості булеві вирази (без логічних операторів).
  • Відстежувати виконання невкладених умовних операторів і умовних операторів всередині циклів.

Використовуйте команди if, щоб контролювати, чи виконується блок коду.


  • Оператор if (правильна назва - умовний оператор) контролює, чи буде виконано певний блок коду.
  • Його синтаксис подібний до синтаксису оператора for:
    • Перший рядок починається з `if’ і закінчується двокрапкою
    • Блок коду оператора, що містить одну або кілька команд, має відступ (зазвичай на 4 пробіли)

PYTHON

mass = 3.54
if mass > 3.0:
    print(mass, 'is large')

mass = 2.07
if mass > 3.0:
    print (mass, 'is large')

ВИВІД

3.54 is large

Умовні оператори часто використовуються всередині циклів.


  • Немає особливого сенсу використовувати умовний оператор, коли ми знаємо точне значення (як у прикладі вище).
  • Але це корисно, коли у нас є колекція, яку треба проаналізувати.

PYTHON

masses = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in masses:
    if m > 3.0:
        print(m, 'is large')

ВИВІД

3.54 is large
9.22 is large

Використовуйте else для виконання блоку коду, коли умова if не виконується.


  • else можна використовувати після if.
  • Це дозволяє вказати альтернативні дії, коли умова гілки if не виконується.

PYTHON

masses = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in masses:
    if m > 3.0:
        print(m, 'is large')
    else:
        print(m, 'is small')

ВИВІД

3.54 is large
2.07 is small
9.22 is large
1.86 is small
1.71 is small

Використовуйте elif для додаткових перевірок.


  • У разі потреби можна надати кілька альтернативних варіантів, кожен з яких має власну умову для виконання.
  • Використовуйте elif (скорочення від “else if”) та відповідну умову для перевірки.
  • Завжди асоціюється з if.
  • Має йти перед else (що починає блок, який охоплює всі інші випадки).

PYTHON

masses = [3.54, 2.07, 9.22, 1.86, 1.71]
for m in masses:
    if m > 9.0:
        print(m, 'is HUGE')
    elif m > 3.0:
        print(m, 'is large')
    else:
        print(m, 'is small')

ВИВІД

3.54 is large
2.07 is small
9.22 is HUGE
1.86 is small
1.71 is small

Умови перевіряються один раз, послідовно.


  • Python послідовно проходить гілки умовного оператора, перевіряючи кожну по черзі.
  • Отже, порядок перевірки має значення.

PYTHON

grade = 85
if grade >= 90:
    print('grade is A')
elif grade >= 80:
    print('grade is B')
elif grade >= 70:
    print('grade is C')

ВИВІД

grade is B
  • Програма не повертається назад автоматично і не переоцінює значення, якщо вони змінюються.

PYTHON

velocity = 10.0
if velocity > 20.0:
    print('moving too fast')
else:
    print('adjusting velocity')
    velocity = 50.0

ВИВІД

adjusting velocity
  • Умовні оператори часто використовуються в циклі для послідовної зміни значень змінних.

PYTHON

velocity = 10.0
for i in range(5): # execute the loop 5 times
    print(i, ':', velocity)
    if velocity > 20.0:
        print('moving too fast')
        velocity = velocity - 5.0
    else:
        print('moving too slow')
        velocity = velocity + 10.0
print('final velocity:', velocity)

ВИВІД

0 : 10.0
moving too slow
1 : 20.0
moving too slow
2 : 30.0
moving too fast
3 : 25.0
moving too fast
4 : 20.0
moving too slow
final velocity: 30.0

Створіть таблицю зі значеннями змінних для відстеження виконання програми.


i 0 . 1 . 2 . 3 . 4 .
velocity 10.0 20.0 . 30.0 . 25.0 . 20.0 . 30.0
  • Програма повинна мати оператор print поза тілом циклу, щоб вивести кінцеве значення velocity, оскільки його значення оновлюється під час останньої ітерації циклу.
Примітка

Складені логічні вирази з використанням and, or та дужок

Часто потрібно перевірити, що виконується певна сукупність умов. Логічні вирази можна комбінувати в умовному операторі за допомогою and та or. Продовжуючи попередній приклад, застосуємо комбінацію перевірок значень зі списків mass та velocity в умовному операторі:

PYTHON

mass     = [ 3.54,  2.07,  9.22,  1.86,  1.71]
velocity = [10.00, 20.00, 30.00, 25.00, 20.00]

i = 0
for i in range(5):
    if mass[i] > 5 and velocity[i] > 20:
        print("Fast heavy object.  Duck!")
    elif mass[i] > 2 and mass[i] <= 5 and velocity[i] <= 20:
        print("Normal traffic")
    elif mass[i] <= 2 and velocity[i] <= 20:
        print("Slow light object.  Ignore it")
    else:
        print("Whoa!  Something is up with the data.  Check it")

Як і в арифметичних виразах, дужки слід використовувати скрізь, де може виникнути неоднозначність. Надійне правило: завжди розставляти дужки при одночасному використанні and та or в одній умові. Таким чином, замість:

PYTHON

if mass[i] <= 2 or mass[i] >= 5 and velocity[i] > 20:

слід використовувати один з наступних варіантів:

PYTHON

if (mass[i] <= 2 or mass[i] >= 5) and velocity[i] > 20:
if mass[i] <= 2 or (mass[i] >= 5 and velocity[i] > 20):

внаслідок чого читачеві (а також інтерпретатору Python) буде цілком зрозуміло, що ви насправді маєте на увазі.

Вправа

Відстеження виконання

Що надрукує ця програма?

PYTHON

pressure = 71.9
if pressure > 50.0:
    pressure = 25.0
elif pressure <= 50.0:
    pressure = 0.0
print(pressure)

ВИВІД

25.0
Вправа

Аналіз списку

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

PYTHON

original = [-1.5, 0.2, 0.4, 0.0, -1.3, 0.4]
result = ____
for value in original:
    if ____:
        result.append(0)
    else:
        ____
print(result)

ВИВІД

[0, 1, 1, 1, 0, 1]

PYTHON

original = [-1.5, 0.2, 0.4, 0.0, -1.3, 0.4]
result = []
for value in original:
    if value < 0.0:
        result.append(0)
    else:
        result.append(1)
print(result)
Вправа

Вибіркова обробка файлів

Змініть цю програму так, щоб вона обробляла лише файли, які містять менше ніж 50 записів.

PYTHON

import glob
import pandas as pd
for filename in glob.glob('data/*.csv'):
    contents = pd.read_csv(filename)
    ____:
        print(filename, len(contents))

PYTHON

import glob
import pandas as pd
for filename in glob.glob('data/*.csv'):
    contents = pd.read_csv(filename)
    if len(contents) < 50:
        print(filename, len(contents))
Вправа

Ініціалізація

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

PYTHON

values = [...деякі тестові дані...]
smallest, largest = None, None
for v in values:
    if ____:
        smallest, largest = v, v
    ____:
        smallest = min(____, v)
        largest = max(____, v)
print(smallest, largest)

Які переваги та недоліки притаманні цьому методу визначення діапазону даних?

PYTHON

values = [-2,1,65,78,-54,-24,100]
smallest, largest = None, None
for v in values:
    if smallest is None and largest is None:
        smallest, largest = v, v
    else:
        smallest = min(smallest, v)
        largest = max(largest, v)
print(smallest, largest)

Якщо ви напишете == None замість is None, це теж працює, але програмісти Python завжди пишуть is None через особливий спосіб обробки None у цій мові.

Можна стверджувати, що перевагою цього методу є краща читабельність коду. Однак недоліком є те, що цей код не є ефективним, оскільки в кожній ітерації циклу for виконуються ще два цикли, кожен з яких опрацьовує два числа (це функції min і max). Було б ефективніше опрацьовувати кожне число лише один раз:

PYTHON

values = [-2,1,65,78,-54,-24,100]
smallest, largest = None, None
for v in values:
    if smallest is None or v < smallest:
        smallest = v
    if largest is None or v > largest:
        largest = v
print(smallest, largest)

Тепер маємо один цикл, але чотири тестові порівняння. Подальше вдосконалення можливе двома шляхами: скоротити кількість порівнянь на кожній ітерації або використати два цикли, кожен з яких містить лише одне порівняння. Найпростіше рішення часто є найкращим:

PYTHON

values = [-2,1,65,78,-54,-24,100]
smallest = min(values)
largest = max(values)
print(smallest, largest)
Ключові моменти
  • Використовуйте оператор if, щоб контролювати, чи виконується відповідний блок коду.
  • Умовні оператори часто використовуються всередині циклів.
  • Використовуйте else для виконання блоку коду, коли умова if не виконується.
  • Використовуйте elif для визначення додаткових перевірок.
  • Умови перевіряються один раз, послідовно.
  • Створюйте таблицю зі значеннями змінних для відстеження виконання програми.