Умови: if, else та elif

Повертаємось до Python.
У попередній лекції ти навчився використовувати input().
Твої програми навчилися ставити питання.
Дуже ввічливо.
Дуже інтерактивно.
Трохи підозріло.
Ти писав програми типу:
name = input("What is your name? ")
age = int(input("How old are you? "))
print(f"Hello, {name}!")
print(f"Next year you will be {age + 1}.")
Добре.
Тепер твоя програма може запитувати інформацію в користувача.
Але вона ще не може приймати рішення.
Вона завжди робить одне й те саме.
Справжнім програмам потрібен вибір.
Наприклад:
Якщо користувач достатньо дорослий, дозволити доступ.
Якщо пароль правильний, увійти в систему.
Якщо продукт доступний, показати “Buy now”.
Якщо число від’ємне, показати попередження.
І тут на сцену виходять умови.
Умови дозволяють програмі вибирати, що робити.
Без умов програма схожа на поїзд без стрілок.
Їде вперед.
Завжди вперед.
Навіть коли рейки закінчуються.
Не ідеально.
Що ти вивчиш
У цій лекції ти вивчиш:
- що таке умови;
- як працює
if; - як працює indentation з умовами;
- як працюють оператори порівняння;
- як використовувати
else; - як використовувати
elif; - як порівнювати числа;
- як порівнювати strings;
- як booleans працюють з умовами;
- як поєднувати умови через
and; - як поєднувати умови через
or; - як використовувати
not; - типові помилки початківців;
- як будувати прості програми, які приймають рішення.
До кінця цієї лекції твої програми зможуть вибирати.
Маленькі вибори.
Але важливі вибори.
Дуже Python.
Дуже потужно.
Трохи небезпечно.
Ідеально.
Що таке умова?
Умова — це питання, на яке Python може відповісти:
True
або:
False
Приклад:
age = 20
print(age >= 18)
Output:
True
Python перевіряє:
Чи age більше або дорівнює 18?
Відповідь:
True
Інший приклад:
age = 15
print(age >= 18)
Output:
False
Умова неправдива.
Користувачу немає 18 або більше.
Python не стає емоційним.
Він просто перевіряє умову.
Без драми.
Тільки логіка.
Переважно.
Твій перший if
Створи файл:
conditions.py
Напиши:
age = 20
if age >= 18:
print("You are an adult.")
Запусти:
python conditions.py
або:
python3 conditions.py
Output:
You are an adult.
Це означає:
Якщо age більше або дорівнює 18, виведи повідомлення.
Умова правдива.
Тому Python виконує рядок з відступом.
Дуже просто.
Дуже важливо.
Програма щойно прийняла рішення.
Маленьке рішення.
Велика ідея.
Коли умова false
Тепер зміни код:
age = 15
if age >= 18:
print("You are an adult.")
Запусти.
Output:
Нічого не сталося.
Чому?
Бо умова false.
Python перевіряє:
15 більше або дорівнює 18?
Відповідь:
False
Тому Python пропускає рядок з відступом.
Так працює if.
Якщо умова true, виконуємо код.
Якщо умова false, пропускаємо код.
Дуже прямо.
Дуже Python.
Дуже “без квитка не заходиш”.
Indentation має значення
У Python indentation дуже важлива.
Це працює:
age = 20
if age >= 18:
print("You are an adult.")
Рядок:
print("You are an adult.")
має відступ.
Це означає, що він належить до if.
Python використовує indentation, щоб розуміти блоки коду.
Блок — це група рядків, які належать одне до одного.
У багатьох мовах використовують {}.
У Python ми використовуємо indentation.
Python побачив фігурні дужки й сказав:
Ні, дякую. Я люблю рівне розставлення меблів.
Дуже Python.
Неправильна indentation
Це неправильно:
age = 20
if age >= 18:
print("You are an adult.")
Python покаже помилку:
IndentationError
Чому?
Бо після if Python очікує блок з відступом.
Правильно:
age = 20
if age >= 18:
print("You are an adult.")
Використовуй послідовну indentation.
Більшість Python-коду використовує 4 пробіли.
Не змішуй tabs і spaces.
Змішування tabs і spaces — це шлях, яким маленькі програми перетворюються на будинки з привидами.
Двокрапка обов’язкова
Рядок з if потребує двокрапки:
if age >= 18:
Двокрапка означає:
Тут починається блок коду.
Неправильно:
if age >= 18
print("You are an adult.")
Python поскаржиться.
Правильно:
if age >= 18:
print("You are an adult.")
Маленький символ.
Велика відповідальність.
Двокрапка крихітна.
Але без неї Python зупиняє вечірку.
Оператори порівняння
Оператори порівняння дозволяють Python порівнювати значення.
Поширені оператори:
== дорівнює
!= не дорівнює
> більше ніж
< менше ніж
>= більше або дорівнює
<= менше або дорівнює
Приклади:
age = 20
print(age == 20)
print(age != 18)
print(age > 18)
print(age < 30)
print(age >= 20)
print(age <= 21)
Output:
True
True
True
True
True
True
Ці оператори — основа умов.
Вони ставлять питання.
Python відповідає True або False.
Дуже корисно.
Дуже строго.
Як маленький суддя з клавіатурою.
== — це не те саме, що =
Дуже важливо:
=
означає присвоєння.
Воно зберігає значення.
Приклад:
age = 20
Це означає:
Збережи 20 у age.
Але:
==
означає порівняння.
Приклад:
age == 20
Це означає:
Чи age дорівнює 20?
Не плутай їх.
Неправильна ідея:
if age = 20:
print("Age is 20.")
Правильно:
if age == 20:
print("Age is 20.")
Один = зберігає значення.
Два == ставлять питання.
Крихітна різниця.
Величезна драма.
Класичне програмування.
Використання else
else виконується тоді, коли умова if є false.
Приклад:
age = 15
if age >= 18:
print("You are an adult.")
else:
print("You are not an adult yet.")
Output:
You are not an adult yet.
Умова:
age >= 18
є false.
Тому Python пропускає блок if і виконує блок else.
Це означає:
Якщо це правда, зроби одне.
Інакше зроби інше.
Дуже корисно.
Дуже поширено.
Дуже “двері A або двері B”.
if та else з input
Створи файл:
age_check.py
Напиши:
age = int(input("How old are you? "))
if age >= 18:
print("You can enter.")
else:
print("You cannot enter yet.")
Запусти.
Приклад 1:
How old are you? 20
Output:
You can enter.
Приклад 2:
How old are you? 15
Output:
You cannot enter yet.
Тепер твоя програма реагує по-різному залежно від input користувача.
Це важливо.
Один і той самий код може давати різні результати.
Бо дані змінюються.
Саме тут програмування починає виглядати живим.
Не занадто живим.
Досі без повстання роботів.
Використання elif
Іноді двох варіантів недостатньо.
Може бути кілька можливостей.
Приклад:
Якщо score 90 або більше, grade A.
Якщо score 80 або більше, grade B.
Якщо score 70 або більше, grade C.
Інакше grade D.
Для цього використовують elif.
elif означає:
else if
Приклад:
score = 85
if score >= 90:
print("Grade: A")
elif score >= 80:
print("Grade: B")
elif score >= 70:
print("Grade: C")
else:
print("Grade: D")
Output:
Grade: B
Python перевіряє зверху вниз.
Перша умова:
score >= 90
False.
Друга умова:
score >= 80
True.
Тому Python виводить:
Grade: B
Потім пропускає решту.
Дуже ефективно.
Дуже рішуче.
Дуже “я знайшов відповідь, до побачення”.
Порядок має значення з elif
Порядок має значення.
Подивись на це:
score = 95
if score >= 70:
print("Grade: C or better")
elif score >= 80:
print("Grade: B or better")
elif score >= 90:
print("Grade: A")
Output:
Grade: C or better
Чому?
Бо Python перевіряє зверху вниз.
score >= 70 є true.
Тому Python виконує цей блок і пропускає решту.
Навіть якщо score >= 90 теж true.
Саме тому порядок має бути логічним.
Краще:
score = 95
if score >= 90:
print("Grade: A")
elif score >= 80:
print("Grade: B")
elif score >= 70:
print("Grade: C")
else:
print("Grade: D")
Output:
Grade: A
Став найсильнішу або найконкретнішу умову першою.
Інакше програма може бути технічно правильною, але логічно смішною.
Python тебе не зупинить.
Python дозволяє дурниці, якщо синтаксис легальний.
Дуже небезпечна свобода.
Порівняння strings
Можна порівнювати strings.
Приклад:
password = input("Password: ")
if password == "secret":
print("Access granted.")
else:
print("Access denied.")
Приклад 1:
Password: secret
Output:
Access granted.
Приклад 2:
Password: banana
Output:
Access denied.
Python порівнює текст точно.
Це означає:
secret
не те саме, що:
Secret
або:
secret
або:
secret
Пробіли й великі літери мають значення.
Python строгий.
Як охоронець, який ще й любить граматику.
Case sensitivity зі strings
Спробуй:
word = input("Type yes: ")
if word == "yes":
print("You typed yes.")
else:
print("That was not yes.")
Якщо користувач введе:
yes
Output:
You typed yes.
Якщо користувач введе:
Yes
Output:
That was not yes.
Чому?
Бо "yes" і "Yes" — це різні strings.
Пізніше ти зможеш зробити input гнучкішим.
Поки що запам’ятай:
Python порівнює strings точно.
Точно означає точно.
Без емоційної інтерпретації.
Використання lower()
Можна полегшити порівняння strings через .lower().
Приклад:
answer = input("Do you like Python? ")
answer = answer.lower()
if answer == "yes":
print("Excellent choice.")
else:
print("Python will try not to be offended.")
Якщо користувач введе:
YES
або:
Yes
або:
yes
.lower() перетворить це на:
yes
Це робить порівняння простішим.
Можна також написати коротше:
answer = input("Do you like Python? ").lower()
Це поширено.
Дуже корисно.
Python пробачає великі літери, якщо ти поясниш йому як.
Booleans в умовах
Booleans природно працюють з if.
Приклад:
is_logged_in = True
if is_logged_in:
print("Welcome back!")
else:
print("Please log in.")
Output:
Welcome back!
Оскільки is_logged_in вже є True, не потрібно писати:
if is_logged_in == True:
Це працює, але зайве.
Краще:
if is_logged_in:
Зрозуміло.
Просто.
Pythonic.
Дуже добре.
Перевірка False через not
Можна використовувати not, щоб перевернути boolean.
Приклад:
is_logged_in = False
if not is_logged_in:
print("Please log in.")
else:
print("Welcome back!")
Output:
Please log in.
Це означає:
Якщо користувач не увійшов у систему, виведи це повідомлення.
not перевертає умову.
not True
стає:
False
А:
not False
стає:
True
Маленьке слово.
Велика сила.
Використовуй обережно.
Занадто багато not змушує мозок робити гімнастику.
Поєднання умов через and
Використовуй and, коли обидві умови мають бути true.
Приклад:
age = 25
has_ticket = True
if age >= 18 and has_ticket:
print("You can enter the event.")
else:
print("You cannot enter the event.")
Output:
You can enter the event.
Обидві умови true:
age >= 18
і:
has_ticket
Тому доступ дозволено.
Якщо хоча б одна з них false, вся умова false.
and строгий.
Як серйозний охоронець на вході.
Вік підходить?
Квиток є?
Тоді заходь.
Немає квитка?
До побачення.
Поєднання умов через or
Використовуй or, коли хоча б одна умова має бути true.
Приклад:
is_admin = False
is_owner = True
if is_admin or is_owner:
print("You can edit this page.")
else:
print("You cannot edit this page.")
Output:
You can edit this page.
Тільки одна умова true:
is_owner
Але цього достатньо.
or означає:
Це або те, або обидва.
Дуже корисно.
Дуже поширено.
Дуже “одного ключа достатньо, щоб відкрити двері”.
Поєднання input і and
Створи файл:
event_access.py
Напиши:
age = int(input("Age: "))
has_ticket_answer = input("Do you have a ticket? yes/no: ").lower()
has_ticket = has_ticket_answer == "yes"
if age >= 18 and has_ticket:
print("You can enter the event.")
else:
print("You cannot enter the event.")
Приклад 1:
Age: 25
Do you have a ticket? yes/no: yes
Output:
You can enter the event.
Приклад 2:
Age: 25
Do you have a ticket? yes/no: no
Output:
You cannot enter the event.
Цей рядок важливий:
has_ticket = has_ticket_answer == "yes"
Він створює boolean.
Якщо відповідь "yes", тоді has_ticket — True.
Інакше — False.
Дуже корисно.
Дуже чисто.
Дуже Python.
Вкладені if
Можна поставити один if всередину іншого if.
Це називається nesting.
Приклад:
age = int(input("Age: "))
if age >= 18:
has_ticket = input("Do you have a ticket? yes/no: ").lower()
if has_ticket == "yes":
print("You can enter.")
else:
print("You need a ticket.")
else:
print("You are too young.")
Це працює.
Але будь обережним.
Занадто багато nesting може зробити код важким для читання.
Вкладений код — це як коробки в коробках у коробках.
У якийсь момент ти вже не пам’ятаєш, де шкарпетки.
Використовуй nesting, коли це має сенс.
Але не будуй лабіринт, якщо не любиш страждати.
Плоский код часто простіший
Ця версія простіша:
age = int(input("Age: "))
has_ticket = input("Do you have a ticket? yes/no: ").lower()
if age >= 18 and has_ticket == "yes":
print("You can enter.")
else:
print("You cannot enter.")
Вона коротша.
Але дає менш конкретний feedback.
Вкладена версія може сказати:
You are too young.
або:
You need a ticket.
Тому обидва підходи можуть бути корисними.
Найкращий вибір залежить від ситуації.
Програмування часто не є:
одна правильна відповідь
А більше:
яке рішення зрозуміліше для цієї проблеми?
Дратує.
Але правда.
Типова помилка: забути двокрапку
Неправильно:
if age >= 18
print("Adult")
Правильно:
if age >= 18:
print("Adult")
Двокрапка починає блок.
Немає двокрапки — немає блоку.
Немає блоку — немає щастя.
Типова помилка: неправильна indentation
Неправильно:
age = 20
if age >= 18:
print("Adult")
Правильно:
age = 20
if age >= 18:
print("Adult")
Код усередині if має бути з відступом.
Python використовує indentation, щоб розуміти структуру.
Твої пробіли — не декорація.
Вони архітектура.
Дуже серйозні пробіли.
Типова помилка: використовувати = замість ==
Неправильно:
password = input("Password: ")
if password = "secret":
print("Access granted.")
Правильно:
password = input("Password: ")
if password == "secret":
print("Access granted.")
Запам’ятай:
= присвоєння
== порівняння
Один зберігає.
Два порівнюють.
Маленька різниця, яка може зіпсувати весь день.
Типова помилка: порівнювати числовий input як текст
Неправильно:
age = input("Age: ")
if age >= 18:
print("Adult")
Це не спрацює, бо age — string.
Правильно:
age = int(input("Age: "))
if age >= 18:
print("Adult")
Якщо хочеш числове порівняння, конвертуй input у число.
Python не порівнює "20" і 18 як людина.
Python каже:
Текст і число? Абсолютно ні.
Строго.
Але розумно.
Типова помилка: неправильний порядок elif
Неправильно:
score = 95
if score >= 60:
print("Passed")
elif score >= 90:
print("Excellent")
Output:
Passed
Друга умова ніколи не виконається, бо score >= 60 вже true.
Краще:
score = 95
if score >= 90:
print("Excellent")
elif score >= 60:
print("Passed")
else:
print("Failed")
Output:
Excellent
Коли використовуєш elif, порядок має значення.
Подумай, перш ніж ставити умови.
Програма не подумає замість тебе.
Грубо.
Але очікувано.
Міні-програма: перевірка числа
Створи файл:
number_checker.py
Напиши:
number = int(input("Enter a number: "))
if number > 0:
print("The number is positive.")
elif number < 0:
print("The number is negative.")
else:
print("The number is zero.")
Спробуй:
10
Output:
The number is positive.
Спробуй:
-5
Output:
The number is negative.
Спробуй:
0
Output:
The number is zero.
Це класична вправа на умови.
Проста.
Зрозуміла.
Корисна.
Не glamorous.
Але викрутка теж не glamorous.
А викрутки важливі.
Міні-програма: перевірка пароля
Створи файл:
password_check.py
Напиши:
password = input("Enter password: ")
if password == "python123":
print("Access granted.")
else:
print("Access denied.")
Спробуй правильний пароль.
Потім неправильний.
Це проста ідея login.
Дуже базова.
Не використовуй це для справжньої безпеки.
Справжня безпека набагато серйозніша.
Це навчання.
Не захист банку.
Будь ласка, не захищай банк лекцією 4.
Міні-програма: проста знижка
Створи файл:
discount.py
Напиши:
total = float(input("Order total: "))
if total >= 100:
discount = total * 0.10
final_total = total - discount
print(f"Discount: {discount:.2f}")
print(f"Final total: {final_total:.2f}")
else:
print("No discount.")
print(f"Final total: {total:.2f}")
Приклад 1:
Order total: 150
Output:
Discount: 15.00
Final total: 135.00
Приклад 2:
Order total: 50
Output:
No discount.
Final total: 50.00
Це близько до справжньої business logic.
Якщо замовлення достатньо велике, застосувати знижку.
Інакше — без знижки.
Маленька логіка магазину.
Дуже корисно.
Дуже реально.
Міні-програма: калькулятор оцінок
Створи файл:
grade_calculator.py
Напиши:
score = int(input("Score: "))
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"Grade: {grade}")
Спробуй різні scores:
95
85
75
65
50
Програма має давати різні grades.
Це використовує:
- input;
- конвертацію типів;
if;elif;else;- змінні;
- output.
Багато концепцій разом.
Python-суп стає насиченішим.
Досі без смаку USB.
Сподіваємось.
Практика
Створи файл:
practice_conditions.py
Напиши програму, яка запитує:
- username;
- age;
- чи користувач є student.
Потім:
- якщо age менше 18, виведи
"You are young."; - якщо age між 18 і 64, виведи
"You are an adult."; - якщо age 65 або більше, виведи
"You are a senior."; - якщо користувач student, виведи
"Student mode activated.".
Приклад:
username = input("Username: ")
age = int(input("Age: "))
student_answer = input("Are you a student? yes/no: ").lower()
print(f"Hello, {username}!")
if age < 18:
print("You are young.")
elif age < 65:
print("You are an adult.")
else:
print("You are a senior.")
if student_answer == "yes":
print("Student mode activated.")
Зверни увагу на цей рядок:
elif age < 65:
Нам не потрібно писати:
age >= 18 and age < 65
Чому?
Бо якщо Python дійшов до цього elif, він уже знає, що:
age < 18
було false.
Отже, age вже 18 або більше.
Порядок допомагає.
Красива логіка.
Дуже Python.
Міні-завдання
Створи файл:
shipping_calculator.py
Програма має запитати:
- ім’я клієнта;
- суму замовлення;
- country;
- чи клієнт VIP.
Правила:
Якщо сума замовлення 100 або більше, shipping безкоштовний.
Якщо клієнт VIP, shipping безкоштовний.
Якщо country — "italy", shipping коштує 5.
Інакше shipping коштує 15.
Потім виведи:
Customer: Anna
Order total: 80.00
Shipping: 5.00
Final total: 85.00
Приклад рішення:
customer_name = input("Customer name: ")
order_total = float(input("Order total: "))
country = input("Country: ").lower()
vip_answer = input("VIP customer? yes/no: ").lower()
is_vip = vip_answer == "yes"
if order_total >= 100 or is_vip:
shipping = 0
elif country == "italy":
shipping = 5
else:
shipping = 15
final_total = order_total + shipping
print("----- Order Summary -----")
print(f"Customer: {customer_name}")
print(f"Order total: {order_total:.2f}")
print(f"Shipping: {shipping:.2f}")
print(f"Final total: {final_total:.2f}")
Протестуй з різними значеннями.
Спробуй:
Order total: 120
VIP: no
Спробуй:
Order total: 50
VIP: yes
Спробуй:
Country: italy
Order total: 80
VIP: no
Спробуй:
Country: france
Order total: 80
VIP: no
Програма має вибирати різну вартість shipping.
Це реальна логіка.
Маленька.
Але реальна.
Програма тепер приймає рішення.
Дуже добре.
Дуже Python.
Checklist для початківців
Коли твоя програма з умовами не працює, перевір:
Я зберіг файл?
Я використав двокрапку після if, elif та else?
Код усередині умови має indentation?
Я використав == для порівняння?
Я використав = тільки для присвоєння?
Я конвертував input у int або float перед числовим порівнянням?
Мої elif-умови в правильному порядку?
Я написав True і False з великої літери?
Я порівняв strings точно?
Я використав .lower(), коли хотів гнучкіший текстовий input?
Більшість bugs з умовами не великі.
Зазвичай це маленькі логічні помилки.
Комп’ютер робить саме те, що ти написав.
Не те, що ти мав на увазі.
Це дратує.
Це програмування.
Ласкаво просимо.
Підсумок
Сьогодні ти вивчив:
- умови дозволяють програмам приймати рішення;
- умови повертають
TrueабоFalse; ifвиконує код, коли умова true;elseвиконує код, коли умоваiffalse;elifперевіряє іншу умову;- Python перевіряє
ifтаelifзверху вниз; - indentation визначає блоки коду;
- двокрапка
:починає блок; ==порівнює значення;=присвоює значення;- strings порівнюються точно;
.lower()допомагає з гнучким текстовим input;- booleans природно працюють в умовах;
andвимагає, щоб обидві умови були true;orвимагає, щоб хоча б одна умова була true;notперевертає умову;- порядок має значення в
elifchains.
Це величезний крок.
Твої програми тепер можуть вибирати.
Можуть реагувати.
Можуть казати так або ні.
Можуть застосовувати знижки.
Можуть перевіряти паролі.
Можуть рахувати shipping.
Можуть оцінювати числа.
Трохи.
Не морально.
Лише математично.
Добре.
Наступна лекція
У наступній лекції ми вивчимо loops.
Loops дозволяють програмі повторювати дії.
Замість того, щоб писати:
print("Hello")
print("Hello")
print("Hello")
ти напишеш щось розумніше.
Ти вивчиш:
for
while
Loops потужні.
Loops корисні.
Loops також небезпечні, якщо випадково створити такий, що ніколи не зупиняється.
Але це майбутня пригода.
Поки що твої програми можуть приймати рішення.
Дуже сильний прогрес.
Дуже Python.