Урок 9 Конструкція if-else

 

Конструкція if-else

Минулого заняття ми ознайомилися з конструкцією if. З її допомогою ми ставили умову, за якої мав виконатися код всередині неї. Якщо ж умова не виконувалась, програма пропускала код і виконувалася далі. Звісно, це дуже потужний інструмент, але можна продовжити конструкцію, використавши блок else. З його використанням функціонал конструкції розшириться і, якщо умова не спрацювала, буде виконано код всередині блоку else. Якщо ж умова виконається, то виконається код всередині if, а код в else не буде залучений. Перейдемо до прикладу й запишемо:

var_1 = 1
if var_1:
print("var_1 is not empty!")
else:
print("var_1 is empty(")

Отримаємо (відео 1):

Відео 1 

Зверніть увагу на умову "if var_1", вона аналогічна умові "if var_1 == True":

var_1 = 1
if var_1 == True:
print("var_1 is not empty!")
else:
print("var_1 is empty(")

Перевіримо (відео 2):

Відео 2

Відомо, що будь-яке число відмінне від нуля, як і інші типи даних, що не є пустими, еквівалентне True, тому умова виконується. Коли ж змінна набуває нульового значення, умова перестає виконуватись і виконується код всередині else. Звичайно, цей блок можна використати декілька разів. Але бажано, щоби ступінь вкладеності будь-яких блоків коду не перевищував трьох. В іншому випадку код стає значно важче читати.

Конструкція elif

Імпортуємо модуль random з якого візьмемо функцію randint(). Вона буде генерувати випадкове число від нуля до чотирьох, а завдяки умовам дізнаємося це число:

from random import randint

from random import randint
var_1 = randint(0,4)
res = 0
if var_1:
    if var_1 > 2:
        if var_1 == 3:
            print("We assume that var_1 is equal to 3")
            res = 3
        else:
            print("We assume that var_1 is equal to 4")
            res = 4
    else:
        if var_1 == 1:
            print("We assume that var_1 is equal to 1")
            res = 1
        else:
            print("We assume that var_1 is equal to 2")
            res = 2
else:
    print("We assume that var_1 is equal to 0")
    res = 0
print("Real value is", var_1)
if var_1 == res:
    print("The condition is correct!")
else:
    print("The condition is Incorrect!")

Результат (відео 3):

Відео 3

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

from random import randint
var_1 = randint(0,4)
res = 0
if var_1 == 1:
    print("We assume that var_1 is equal to 1")
    res = 1
elif var_1 == 2:
    print("We assume that var_1 is equal to 2")
    res = 2
elif var_1 == 3:
    print("We assume that var_1 is equal to 3")
    res = 3
elif var_1 == 4:
    print("We assume that var_1 is equal to 4")
    res = 4
else:
    print("We assume that var_1 is equal to 0")
    res = 0
print("Real value is", var_1)
if var_1 == res:
    print("The condition is correct!")
else:
    print("The condition is Incorrect!")

Результат (відео 4):

Відео 4

Можливо, ви запитаєте, навіщо використовувати elif, якщо можна ще раз прописати if? Використовуючи новий if — починаємо нову конструкцію, тому наступний else буде стосуватися лише його (відео 5):

Відео 5

Отже, й попередні if та elif не вплинуть на нього (відео 6):

Відео 6

Чорний список

Усі ми стикалися з небажаними контактами та спамом. Для розв'язання цієї проблемиє функція — чорний список, куди ми їх і відправляємо (рис 1). 

Давайте разом розробимо цей корисний додаток.

ZM2WOIf0g_AH_yhFDT4ifJ7dOGXHLwfL
Малюнок 1

Першим кроком створимо словник — телефонну книгу:

phone_book = {}

Запишемо в неї кілька контактів. Ключем буде номер телефону, а значенням — ім'я контакту:

phone_book = {"+380568591425" : "Bank", "+12054581022" : "Ann",
             "+74052153665" : "Alex", "+43056203658" : "Tony",
             "+12568254053" : "Nick", "+54145251233" : "Razor"}

Тепер створимо словник, у якому будемо зберігати заблоковані номери. Додамо:

block_list = {}

Як бачимо, зараз він пустий, тому маємо наповнити його небажаними контактами. У цей словник можуть потрапити як незнайомі номери, так і відомі контакти. Враховуючи це під час розробки, відомі контакти мають братися з телефонної книги. Якщо ж номер телефону незнайомий, значенням буде число нуль. Для того, щоби записати в чорний списокнаявнийконтакт, дістанемо з телефонної книги список номерів телефонів. Оскільки вони є ключами, скористаємося методом keys(). Для наочності, тимчасово виведемо список на екран:

phone_book = {"+380568591425" : "Bank", "+12054581022" : "Ann",
             "+74052153665" : "Alex", "+43056203658" : "Tony",
             "+12568254053" : "Nick", "+54145251233" : "Razor"}

contact_list = list(phone_book.keys())
print(contact_list)
block_list = {}

Результат (відео 7):

Відео 7

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

phone_book = {"+380568591425" : "Bank", "+12054581022" : "Ann",
             "+74052153665" : "Alex", "+43056203658" : "Tony",
             "+12568254053" : "Nick", "+54145251233" : "Razor"}

contact_list = list(phone_book.keys())
print(contact_list)
blocked_1 = contact_list[0]
blocked_2 = contact_list[-1]
print(blocked_1)
print(blocked_2)
block_list = {}

Запустимо код (відео 8):

Відео 8

Настав час наповнювати чорний список. Для цього як ключі передамо ці змінні. А як значення до них візьмемо відповідні з телефонної книги. Також додамо невідомий номер і відповідне йому нульове значення:

phone_book = {"+380568591425" : "Bank", "+12054581022" : "Ann",
             "+74052153665" : "Alex", "+43056203658" : "Tony",
             "+12568254053" : "Nick", "+54145251233" : "Razor"}

contact_list = list(phone_book.keys())
blocked_1 = contact_list[0]
blocked_2 = contact_list[-1]
block_list = {blocked_1 : phone_book[blocked_1], "+19295894824" : 0,
              blocked_2 : phone_book[blocked_2]}
print(block_list)

Запустимо код (відео 9):

Відео 9

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

phones = {"+380568591425", "+53145551433", "+330568597598", "+68952125478",
         "+410500291443", "+13145547853", "+12054581022", "+54145251233",
         "+43056203658", "+19295894824", "+200568591425", "+57632143519",
         "+380568591425", "+53145551433"}

Створимо змінну, в якій буде випадковий номер телефону. А для реалізації випадкового дзвінка скористаємось методом pop(). Також виведемо змінну на екран, щоби перевірити роботу генератора:

phone_book = {"+380568591425" : "Bank", "+12054581022" : "Ann",
             "+74052153665" : "Alex", "+43056203658" : "Tony",
             "+12568254053" : "Nick", "+54145251233" : "Razor"}

contact_list = list(phone_book.keys())
blocked_1 = contact_list[0]
blocked_2 = contact_list[-1]

block_list = {blocked_1 : phone_book[blocked_1], "+19295894824" : 0,
             blocked_2 : phone_book[blocked_2]}

phones = {"+380568591425", "+53145551433", "+330568597598", "+68952125478",
         "+410500291443", "+13145547853", "+12054581022", "+54145251233",
         "+43056203658", "+19295894824", "+200568591425", "+57632143519",
         "+380568591425", "+53145551433"}
incoming_call = phones.pop()
print(incoming_call)

Результат роботи генератора (відео 10):

Відео 10

Тепер, маючи вхідний дзвінок і список блокованих контактів необхідно створити логіку, яка зіставлятиме їх між собою. Якщо номер у чорному списку, відповімо "Вибачте, [ім'я контакту/номер] не сьогодні". Коли ж буде надходити дзвінок від інших номерів, виведемо напис "Вам дзвінок від [номер телефону/ім'я контакту]".

Готовий код:

phone_book = {"+380568591425" : "Bank", "+12054581022" : "Ann",
             "+74052153665" : "Alex", "+43056203658" : "Tony",
             "+12568254053" : "Nick", "+54145251233" : "Razor"}

contact_list = list(phone_book.keys())
blocked_1 = contact_list[0]
blocked_2 = contact_list[-1]

block_list = {blocked_1 : phone_book[blocked_1], "+19295894824" : 0,
             blocked_2 : phone_book[blocked_2]}
phones = {"+380568591425", "+53145551433", "+330568597598", "+68952125478",
         "+410500291443", "+13145547853", "+12054581022", "+54145251233",
         "+43056203658", "+19295894824", "+200568591425", "+57632143519",
         "+380568591425", "+53145551433"}
incoming_call = phones.pop()
    if incoming_call in contact_list:
        if incoming_call in block_list.keys():
            print("Sorry,", block_list[incoming_call], "not today")
    else:
        print("You call from", phone_book[incoming_call])
else:
    if incoming_call in block_list.keys():
        print("Sorry,", incoming_call, "not today")
    else:
        print("You call from", incoming_call)

Запустимо код і впевнимось у коректній роботі програми (відео 11):

Відео 11

Отже, сьогодні ми повністю розглянули умовні конструкції if, elif, else, а отримані навички допомогли в розробці чорного списку. 

На наступних заняттях дізнаємось про інші потужні можливості Python.