Умовні оператори
Останнє оновлення 2026-06-18 | Редагувати цю сторінку
Приблизний час: 25 хвилин
Огляд
Питання
- Як програми можуть виконувати різні дії для різних даних?
Цілі
- Правильно писати програми, які використовують оператори
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
Умовні оператори часто використовуються всередині циклів.
- Немає особливого сенсу використовувати умовний оператор, коли ми знаємо точне значення (як у прикладі вище).
- Але це корисно, коли у нас є колекція, яку треба проаналізувати.
ВИВІД
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:
if mass[i] <= 2 or (mass[i] >= 5 and velocity[i] > 20):
внаслідок чого читачеві (а також інтерпретатору Python) буде цілком зрозуміло, що ви насправді маєте на увазі.
ВИВІД
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
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)
Тепер маємо один цикл, але чотири тестові порівняння. Подальше вдосконалення можливе двома шляхами: скоротити кількість порівнянь на кожній ітерації або використати два цикли, кожен з яких містить лише одне порівняння. Найпростіше рішення часто є найкращим:
- Використовуйте оператор
if, щоб контролювати, чи виконується відповідний блок коду. - Умовні оператори часто використовуються всередині циклів.
- Використовуйте
elseдля виконання блоку коду, коли умоваifне виконується. - Використовуйте
elifдля визначення додаткових перевірок. - Умови перевіряються один раз, послідовно.
- Створюйте таблицю зі значеннями змінних для відстеження виконання програми.