← Back to course

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

Умови: 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”.
Якщо число від’ємне, показати попередження.

І тут на сцену виходять умови.

Умови дозволяють програмі вибирати, що робити.

Без умов програма схожа на поїзд без стрілок.

Їде вперед.

Завжди вперед.

Навіть коли рейки закінчуються.

Не ідеально.

Що ти вивчиш

У цій лекції ти вивчиш:

До кінця цієї лекції твої програми зможуть вибирати.

Маленькі вибори.

Але важливі вибори.

Дуже 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_ticketTrue.

Інакше — 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.

Це використовує:

Багато концепцій разом.

Python-суп стає насиченішим.

Досі без смаку USB.

Сподіваємось.

Практика

Створи файл:

practice_conditions.py

Напиши програму, яка запитує:

Потім:

Приклад:

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

Програма має запитати:

Правила:

Якщо сума замовлення 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 з умовами не великі.

Зазвичай це маленькі логічні помилки.

Комп’ютер робить саме те, що ти написав.

Не те, що ти мав на увазі.

Це дратує.

Це програмування.

Ласкаво просимо.

Підсумок

Сьогодні ти вивчив:

Це величезний крок.

Твої програми тепер можуть вибирати.

Можуть реагувати.

Можуть казати так або ні.

Можуть застосовувати знижки.

Можуть перевіряти паролі.

Можуть рахувати shipping.

Можуть оцінювати числа.

Трохи.

Не морально.

Лише математично.

Добре.

Наступна лекція

У наступній лекції ми вивчимо loops.

Loops дозволяють програмі повторювати дії.

Замість того, щоб писати:

print("Hello")
print("Hello")
print("Hello")

ти напишеш щось розумніше.

Ти вивчиш:

for
while

Loops потужні.

Loops корисні.

Loops також небезпечні, якщо випадково створити такий, що ніколи не зупиняється.

Але це майбутня пригода.

Поки що твої програми можуть приймати рішення.

Дуже сильний прогрес.

Дуже Python.