Це фрагмент книги Python з нуля, яка допоможе вам навчитися програмуванню з нуля. Ви можете знайти його на Allegro, Empik та в інтернет-книгарнях.
Умовна інструкція if
Часто буває так, що ми хочемо щось робити лише в певних випадках. Ось кілька прикладів:
ми хочемо показувати рекламу лише власникам безкоштовних облікових записів;
ми хочемо приховати повідомлення, якщо воно надійшло від заблокованої особи;
якщо публікація рекламується, вона повинна мати відповідний значок "реклама".
Щоб виконувати якусь частину коду за певної умови, ми використовуємо оператор if. Починаємо його з ключового слова if [^104_1], після чого ставимо умову (англ. condition). Умова — це вираз [^104_2], який повертає логічне значення True або False. Її можна створити, наприклад, за допомогою символу порівняння ==, < або !=. Після умови ставимо двокрапку : і з наступного рядка вказуємо інструкції, які повинні бути виконані, якщо умова виконується (повертає значення True). Ці інструкції називаються тілом умови. Перед інструкціями в тілі слід відступити чотири пробіли. Завдяки цьому відступу Python відрізнятиме інструкції від решти коду. Якщо умова не виконується (повертає False), інструкції не виконуватимуться.
ifTrue:print("Це виведеться")# Це виведетьсяifFalse:print("А це ні")tweet_type ="promotional"tweet_owner ="marcinmoskala"your_key ="yourname"if tweet_type =="promotional":print("Реклама")# Рекламаif tweet_owner == your_key:# False,# оскільки "marcinmoskala" не дорівнює "yourname"print("Твій твіт")# Виведеться:# Це виведеться# Реклама
Відступи
Відступи, тобто додаткові пробіли перед певними інструкціями, мають у Python велике значення. Подивись на код нижче:
ifFalse:print("A")print("B")
Що має бути виведено? Відповідь: тільки "B", тому що print("A") стоїть в операторі if, умова якого не виконується. Але звідки ми знаємо, що print("A") входить у тіло цієї умови, а print("B") ні? Саме завдяки відступу.
if weekday == ‘friday’:print("Вечірка!")
Ми можемо розмістити ще одну інструкцію в тілі оператора if. Для цього ми додаємо додатковий відступ до її тіла.
is_logged =Trueis_admin =Falseif is_logged:print("Користувач увійшов")if is_admin:print("Адміністратор")# Виведеться:# Користувач увійшов
Зауваж, що відступи корисні не лише для компілятора, а й для нас. Вони дозволяють легко розрізнити, що належить до тіла функції, а що ні.
Довгий період велися дискусії про те, як робити відступи: за допомогою пробілів чи знаку табуляції. Сьогодні в кодуванні пробіли є стандартом, але в деяких проєктах досі можна зустріти знаки табуляції. В будь-якому випадку ніколи не можна змішувати ці два варіанти в одному проєкті.
Набір правил, який визначає, як повинен виглядати код, називається форматуванням. У ньому вказується: які мають бути відступи, де ставити абзаци та пробіли, за якими правилами слід називати змінні тощо. Форматування може відрізнятися залежно від проєкту. У Python найчастіше використовується відступ у чотири пробіли, тому в цій книзі я дотримуюся цього ж правила. Іноді можна побачити відступи, які складаються з двох пробілів.
Порожнє тіло
Перед тілом оператора if має стояти відповідний відступ. Але що робити, якщо тіло з якихось причин порожнє? Python не бачитиме жодних інструкцій і вважатиме, що ми зробили помилку. У таких випадках в тілі умови необхідно поставити слово pass. Це ключове слово не виконує жодної операції, але має бути введене, щоби наш код працював. Це також корисна інформація для читача цього коду: вона повідомляє, що тіло умови навмисно залишене порожнім.
if is_logged:pass
На практиці я рідко бачу pass в кінцевому коді. Однак це корисно знати під час роботи, наприклад, коли ми хочемо спершу зосередитися на написанні умови, а потім — на її тілі. Ключове слово pass також використовується, коли ми хочемо залишити порожнім тіло функції else, elif, циклу for і в багатьох інших структурах, які ми обговоримо в цій книзі пізніше.
Вправа: if
Напиши код, який:
виведе "З повагою", якщо змінна is_important має значення True;
виведе "Вітаю";
виведе "Пані", якщо змінна gender має значення "female";
виведе "Пане", якщо змінна gender має значення "male".
Спочатку перерахуй усі значення, зробивши окремі виклики print, а потім подумай, як зібрати їх усі разом і записати в один рядок.
Перевір, як поводитиметься твій код при різних значеннях is_important (логічне значення True/False) і gender (значення стрінга "male", "female" або інше).
Відповіді в кінці книги.
Умовний виклик із частиною else
Тіло оператора if викликається лише тоді, коли умова виконується. Що робити, якщо ми хочемо виконати якусь іншу дію у випадку, коли умова не виконується? Припустімо, якщо твіт рекламується, то він має бути підписаний "Реклама", в іншому ж випадку — "Звичайний". Отже, ми могли б використати два умовних оператори if: один — для перевірки виконання умови, а інший — для перевірки виконання протилежної умови. Однак, оскільки це досить поширене явище, умова if дозволяє вам додати частину else [^104_3], яка визначає, що має статися, якщо умова не виконується.
tweet_type ="standard"if tweet_type =="promotional":print("Реклама")else:print("Звичайний")# Результат той самий, якби ми написали:if tweet_type =="promotional":print("Реклама")if tweet_type !="promotional":print("Звичайний")
Зауваж, що завжди викликатиметься або тіло з if, або тіло з else. Цей факт часто використовується, наприклад, при застосуванні if-else для встановлення значення змінної.
label завжди матиме певне значення: "Реклама" або "Звичайний".
Умовний виклик із частиною elif
А якщо ми маємо більше альтернативних варіантів? Наприклад, кілька умов, які ми хочемо перевірити по черзі. Щоб обробити кожне з цих значень, ми можемо використати частину elif (скорочення від "else if" або "otherwise if"). Ми ставимо цю частину після умови if, але перед else. Ця команда дозволяє вказати іншу умову, яка перевірятиметься, якщо умова з if не виконується. Якщо умова з elif виконується, то буде виконуватися її тіло. Можна додавати багато таких "elif".
Наприклад, якщо ми хочемо обробити кілька можливих значень tweet_type:
"promotional" означає твіт, який рекламується;
"followed" означає твіт із профілю, за яким користувач стежить;
"own" означає власний твіт користувача, який увійшов у систему.
if tweet_type =="promotional":print("Реклама")elif tweet_type =="followed":print("Звичайний")elif tweet_type =="own":print("Власний")else:print("Інший")# Те ж саме, щоif tweet_type =="promotional":print("Реклама")else:if tweet_type =="followed":print("Звичайний")else:if tweet_type =="own":print("Власний")else:print("Інший")
Альтернативою є використання match-case, представленого у версії 3.10, яку я вирішив не розглядати в цій книзі. Зацікавленим рекомендую дізнатися про цей спосіб більше з інших джерел.
В інструкції if Python перевіряє послідовні частини. Для першої частини, для якої умова виконується, Python викличе блок коду. Після цього перевірка закінчується. Отже, якщо у нас є блок else, завжди буде викликатися рівно одне тіло. Таким чином, умовні інструкції if та elif представляють різні взаємовиключні альтернативи.
У наведеному вище прикладі, якщо tweet_type буде "promotional", буде виведено текст "Реклама". Якщо значення дорівнюватиме "followed", буде виведено "Звичайний". Якщо воно дорівнюватиме "own", буде виведено "Власний". Якщо жодне з вищезазначених не відповідатиме дійсності —"Інший".
Слід звернути увагу, що в інструкції if може бути виконаний лише один блок. Ми використаємо цей факт у прикладі нижче. Перший блок буде викликано, коли значення percent буде 95 або більше. Другий — коли значення буде 80 або більше, але менше ніж 95. Третій — коли воно буде 50 або більше та менше ніж 80. Натомість останній — для значень до 50. У зв’язку з цим ми ніколи не побачимо більше однієї відповіді одночасно.
якщо змінна coffee_finished буде False, виведе "П’ю каву";
якщо змінна days_until_deadline менше 2, виведе "Працюю";
в іншому випадку виведе "Вчуся програмувати!".
Перевір, як Твій код поводитиметься для різних значень coffee_finished (логічне значення True/False) і days_until_deadline (числове значення).
Відповіді в кінці книги.
Вправа: Умови
Нижче я наводжу чотири варіанти значень змінних user_name і user_age та три фрагменти коду. Для кожної пари дай відповідь на запитання: як буде поводитися код для конкретних значень змінної? Всього дай 12 відповідей: для кожної комбінації варіантів і коду.
Перший варіант
user_name ="Міхал"user_age =31
Другий варіант
user_name ="Голова Марек"user_age =61
Третій варіант
user_name ="Павел"user_age =10
Четвертий варіант
user_name =""user_age =14
Перший фрагмент коду — умова if
if user_name =="Голова Марек":print("Вітаємо, Пане Голово")if user_name !="":print("Привіт, "+ user_name)if user_age <18:print("Може, цукерку?")if user_age >=18:print("Може, щось вип’єте?")
Другий фрагмент коду — умова if з else
if user_name =="Голова Марек":print("Вітаємо, Пане Голово")else:print("Привіт, "+ user_name)if user_age <18:print("Може, цукерку?")else:print("Може, щось вип’єте?")
[^104_1]: Слово "if" можна перекласти українською як "якщо".
[^104_2]: Див. Словник в самому кінці книги.
[^104_3]: Слово "else" можна перекласти українською як "в іншому випадку".
Marcin Moskala is a highly experienced developer and Kotlin instructor as the founder of Kt. Academy, an official JetBrains partner specializing in Kotlin training, Google Developers Expert, known for his significant contributions to the Kotlin community. Moskala is the author of several widely recognized books, including "Effective Kotlin," "Kotlin Coroutines," "Functional Kotlin," "Advanced Kotlin," "Kotlin Essentials," and "Android Development with Kotlin."
Beyond his literary achievements, Moskala is the author of the largest Medium publication dedicated to Kotlin. As a respected speaker, he has been invited to share his insights at numerous programming conferences, including events such as Droidcon and the prestigious Kotlin Conf, the premier conference dedicated to the Kotlin programming language.
Roman has experience in different fields: from running his own catering company to working as a professional lawyer for over 13 years. Recently working on becoming a DevOps engineer.