Python: умовні оператори та цикли

Прикладна аналітика при розробці IT

Ігор Мірошниченко

КНУ імені Тараса Шевченка, ФІТ

Умовні оператори

Оператори порівняння

  • x < y: x строго менше y,
  • x <= y: x менше або дорівнює y,
  • x > y: x строго більше y,
  • x >= y: x більше або дорівнює y,
  • x == y: x дорівнює y,
  • x != y: x не дорівнює y.

Для того, щоб ставити запитання з використанням цих символів нам знадобиться ще одне ключове слово в Python. І це ключове слово, досить просто, як і в англійській мові - if:

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 2

if x < y:
    print('x менше y')
if x > y:
    print('x більше y')
if x == y:
    print('x дорівнює y')
x менше y

Візуалізація коду

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 2

if x < y:
    print('x менше y')
if x > y:
    print('x більше y')
if x == y:
    print('x дорівнює y')
%%{init:{"theme":"base", "flowchart": {"htmlLabels": true}}}%%

flowchart TB
    A(Початок) --> B{x < y}
    B -- True --> C["'x менше y'"]
    C --> D{x > y}
    B -- False --> D
    D -- True --> E["'x більше y'"]
    E --> F{x == y}
    D -- False --> F
    F -- True --> G["'x дорівнює y'"]
    G --> H(Кінець)
    F -- False --> H

elif

Попередній код виконує свою задачу, але він не є найкращим. Якщо ви помітите, ми використовуємо три окремі запитання, щоб визначити, яке з двох чисел є більшим. Це можна зробити краще, використовуючи ключове слово elif.

elif - це скорочення від else if.

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 2

if x < y:
    print('x менше y')
elif x > y:
    print('x більше y')
elif x == y:
    print('x дорівнює y')
x менше y

Візуалізація коду

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 2

if x < y:
    print('x менше y')
elif x > y:
    print('x більше y')
elif x == y:
    print('x дорівнює y')
%%{init:{"theme":"base", "flowchart": {"htmlLabels": true}}}%%

flowchart TB
    A(Початок) --> B{x < y}
    B -- True --> C["'x менше y'"]
    C --> H(Кінець)
    B -- False --> D{x > y}
    D -- True --> E["'x більше y'"]
    E --> H
    D -- False --> F{x == y}
    F -- True --> G["'x дорівнює y'"]
    G --> H
    F -- False --> H

else

Чи є сенс задавати третє, останнє питання x == y? Напевно ні.

І тут нам на допомогу приходить ключове слово else.

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 1

if x < y:
    print('x менше y')
elif x > y:
    print('x більше y')
else:
    print('x дорівнює y')
x дорівнює y

Візуалізація коду

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 1

if x < y:
    print('x менше y')
elif x > y:
    print('x більше y')
else:
    print('x дорівнює y')
%%{init:{"theme":"base", "flowchart": {"htmlLabels": true}}}%%

flowchart TB
    A(Початок) --> B{x < y}
    B -- True --> C["'x менше y'"]
    C --> H(Кінець)
    B -- False --> D{x > y}
    D -- True --> E["'x більше y'"]
    E --> H
    D -- False --> F["'x дорівнює y'"]
    F --> H

Логічний оператор or

Цього разу перевіримо, чи дорівнює x числу y. Для цього використаємо оператори or:

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 2

if x < y or x > y:
    print('x не дорівнює y')
else:
    print('x дорівнює y')
x не дорівнює y

Візуалізація коду

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 2

if x < y or x > y:
    print('x не дорівнює y')
else:
    print('x дорівнює y')
%%{init:{"theme":"base", "flowchart": {"htmlLabels": true}}}%%

flowchart TB
    A(Початок) --> B{x < y}
    B -- True --> C["'x не дорівнює y'"]
    C --> H(Кінець)
    B -- False --> D{x > y}
    D -- True --> C
    D -- False --> F["'x дорівнює y'"]
    F --> H

Логічний оператор or

Чи можемо ми покращити цей код? Так, за допомогою оператора заперечення !=:

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 2

if x != y:
    print('x не дорівнює y')
else:
    print('x дорівнює y')
x не дорівнює y

Візуалізація коду

x = int(input('Введіть число x: ')) # 1
y = int(input('Введіть число y: ')) # 2

if x != y:
    print('x не дорівнює y')
else:
    print('x дорівнює y')
%%{init:{"theme":"base", "flowchart": {"htmlLabels": true}}}%%

flowchart TB
    A(Початок) --> B{x != y}
    B -- True --> C["'x не дорівнює y'"]
    C --> H(Кінець)
    B -- False --> D["'x дорівнює y'"]
    D --> H

Логічний оператор and

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

У змінну score будемо приймати значення балу. Система оцінювання в різних університетах може дещо відрізнятися, але в цілому вона виглядає так:

  • 90 <= score <= 100 - A
  • 80 <= score < 90 - B
  • 70 <= score < 80 - C
  • 66 <= score < 70 - D
  • 60 <= score < 66 - E
  • 21 <= score < 60 - FX
  • score < 20 - F
score = int(input('Введіть бал: ')) # 90

if score >= 90 and score <= 100:
    print('Оцінка: A')
elif score >= 80 and score < 90:
    print('Оцінка: B')
elif score >= 70 and score < 80:
    print('Оцінка: C')
elif score >= 66 and score < 70:
    print('Оцінка: D')
elif score >= 60 and score < 66:
    print('Оцінка: E')
elif score >= 21 and score < 60:
    print('Оцінка: FX')
else:
    print('Оцінка: F')
Оцінка: A

Логічний оператор and

Python дозволяє поміняти місцями score і відповідний бал при порівнянні. Такий код буде працювати так само, як і попередній:

score = int(input('Введіть бал: ')) # 80

if 90 <= score and score <= 100:
    print('Оцінка: A')
elif 80 <= score and score < 90:
    print('Оцінка: B')
elif 70 <= score and score < 80:
    print('Оцінка: C')
elif 66 <= score and score < 70:
    print('Оцінка: D')
elif 60 <= score and score < 66:
    print('Оцінка: E')
elif 21 <= score and score < 60:
    print('Оцінка: FX')
else:
    print('Оцінка: F')
Оцінка: B

Логічний оператор and

Або навіть об’єднувати діапазони:

score = int(input('Введіть бал: ')) # 70

if 90 <= score <= 100:
    print('Оцінка: A')
elif 80 <= score < 90:
    print('Оцінка: B')
elif 70 <= score < 80:
    print('Оцінка: C')
elif 66 <= score < 70:
    print('Оцінка: D')
elif 60 <= score < 66:
    print('Оцінка: E')
elif 21 <= score < 60:
    print('Оцінка: FX')
else:
    print('Оцінка: F')
Оцінка: C

Логічний оператор and

Якщо задуматись, то можна зробити ще краще:

score = int(input('Введіть бал: ')) # 70

if score >= 90:
    print('Оцінка: A')
elif score >= 80:
    print('Оцінка: B')
elif score >= 70:
    print('Оцінка: C')
elif score >= 66:
    print('Оцінка: D')
elif score >= 60:
    print('Оцінка: E')
elif score >= 21:
    print('Оцінка: FX')
else:
    print('Оцінка: F')
Оцінка: C

Парність та оператор %

У змінну x будемо приймати значення числа. Якщо число ділиться на 2 без остачі, то воно є парним:

x = int(input('Введіть число: ')) # 2

if x % 2 == 0:
    print('Число парне')
else:
    print('Число непарне')
Число парне

Парність та оператор %

Рішення через власну функцію:

def main():
    x = int(input('Введіть число: ')) # 2

    if is_even(x):
        print('Число парне')
    else:
        print('Число непарне')

def is_even(n):
    if x % 2 == 0:
        return True
    else:
        return False

main()
Число парне

Парність та оператор %

А можна ще краще? Так…

def main():
    x = int(input('Введіть число: ')) # 2

    if is_even(x):
        print('Число парне')
    else:
        print('Число непарне')

def is_even(n):
    return True if n % 2 == 0 else False

main()
Число парне

…або ще краще:

def main():
    x = int(input('Введіть число: ')) # 2

    if is_even(x):
        print('Число парне')
    else:
        print('Число непарне')

def is_even(n):
    return n % 2 == 0

main()
Число парне

Оператор match

match - це механізм зіставлення з шаблонами, дозволяє вам виконувати дії в залежності від значення змінної.

Напишемо код, який запитує у користувача його ім’я, а потім просто виводить гуртожиток, на якому він навчається у книгах про Гаррі Поттера:

name = input('Введіть ім\'я: ') # Драко

if name == 'Гаррі':
    print('Ґрифіндор')
elif name == 'Герміона':
    print('Ґрифіндор')
elif name == 'Рон':
    print('Ґрифіндор')
elif name == 'Драко':
    print('Слизерин')
else:
    print('Хто?')
Слизерин

Оператор match

У попередньому коді є певна повторюваність: Гаррі, Герміона та Рон належать до Гріфіндору. Давайте об’єднаємо ці умови в одну:

name = input('Введіть ім\'я: ') # Герміона

if name == 'Гаррі' or name == 'Герміона' or name == 'Рон':
    print('Ґрифіндор')
elif name == 'Драко':
    print('Слизерин')
else:
    print('Хто?')
Ґрифіндор

Оператор match

А тепер, нарешті, через match:

name = input('Введіть ім\'я: ') # Рон

match name:
    case 'Гаррі':
        print('Ґрифіндор')
    case 'Герміона':
        print('Ґрифіндор')
    case 'Рон':
        print('Ґрифіндор')
    case 'Драко':
        print('Слизерин')
    case _:
        print('Хто?')
Ґрифіндор

Зверніть увагу на те, що я використовую _ для визначення варіанту за замовчуванням. Це означає, що якщо жоден з варіантів не відповідає значенню name, то виконається варіант за замовчуванням. Це дозволяє нам уникнути використання else в кінці.

Оператор match

Можна краще? Так - об’єднання трьох операторів case ми можемо використовувати оператор |:

name = input('Введіть ім\'я: ') # Гаррі

match name:
    case 'Гаррі' | 'Герміона' | 'Рон':
        print('Ґрифіндор')
    case 'Драко':
        print('Слизерин')
    case _:
        print('Хто?')
Ґрифіндор

Варто зазначити, що Вам не потрібен оператор break для виходу з case, Ви просто використовуєте _ як паличку-виручалочку в кінці коду.

Порівняння рядків

Порівняння рядків влаштовано трохи хитріше. Почнемо з простого та розглянемо порівняння двох однакових рядків:

print('abc' == 'abc')
True

А якщо записати так:

print('abc' > 'abc')
False

Порівняння рядків у Python відбувається лексикографічно, тобто посимвольно зліва направо. Якщо символи збігаються, Python переходить до наступного символу в рядку і продовжує порівняти доти, доки не знайде різниця між символами в рядку.

str1 = 'hello'
str2 = 'world'
print(str1 < str2 ) 
True
str1 = 'apple'
str2 = 'banana'
print(str1 > str2) 
False
str1 = 'abc'
str2 = 'aba'
print(str1 > str2 ) 
True

Цикли + списки

Цикл while

Припустимо нам потрібно створити програму кота, який буде “нявкти” три рази:

print("Няв!")
print("Няв!")
print("Няв!")
Няв!
Няв!
Няв!
%%{init:{"theme":"base", "flowchart": {"htmlLabels": true}}}%%

flowchart TB
    A(Початок) --> B["'Няв!'"]
    B --> C["'Няв!'"]
    C --> D["'Няв!'"]
    D --> E(Кінець)

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

Цикл while

Ключове слово while - це конструкція, яка дозволяє ставити питання знову і знову.

i = 3
while i > 0:
    print("Няв!")
    i = i - 1
Няв!
Няв!
Няв!
%%{init:{"theme":"base", "flowchart": {"htmlLabels": true}}}%%

flowchart TB
    A(Початок) --> B["i = 3"]
    B --> C{"i > 0"}
    C -- True --> D["'Няв!'"]
    D --> E["i = i - 1"]
    E --> C
    C -- False --> F(Кінець)

Цикл while

Або можна піти від зворотного і використати “синтаксичний цукор”:

i = 0
while i < 3:
    print("Няв!")
    i += 1
Няв!
Няв!
Няв!
%%{init:{"theme":"base", "flowchart": {"htmlLabels": true}}}%%

flowchart TB
    A(Початок) --> B["i = 0"]
    B --> C{"i < 3"}
    C -- True --> D["'Няв!'"]
    D --> E["i += 1"]
    E --> C
    C -- False --> F(Кінець)

Цикл for та списки

list - це структура даних, яка дозволяє зберігати декілька значень у одній змінній.

Списки в Python створюються за допомогою квадратних дужок [] і можуть містити будь-які значення, в тому числі інші списки.

Принцип роботи циклу for полягає в тому, що він дозволяє ітераційно перебирати список елементів, наприклад так:

for i in [0, 1, 2]:
    print("Няв!")
Няв!
Няв!
Няв!

Цикл for та списки

Що в попередньому варіанті коду не так? Якщо ми захочемо змінити кількість нявкань, нам доведеться змінювати список. Це не дуже зручно. Щоб цього уникнути, ми можемо скористатися функцією range(), яка дозволяє створити список послідовності чисел:

for i in range(3):
    print("Няв!")
Няв!
Няв!
Няв!

Pythonic варіант:

for _ in range(3):
    print("Няв!")
Няв!
Няв!
Няв!

А можна ще?

print("Няв!\n" * 3, end="")
Няв!
Няв!
Няв!

while + for

Давайте запитаємо користувача, скільки разів цей кіт має нявкнути:

while True:
    n = int(input("Скільки разів кіт має нявкнути? ")) # 3
        if n > 0:
            break

for _ in range(n):
    print("Няв!")
Няв!
Няв!
Няв!

while + for + власна функція

Давайте ще трошки попрактикуємо писати власні функції:

def main():
    number = get_number()
    cat(number)

def get_number():
    while True:
        n = int(input("Скільки разів кіт має нявкнути? "))
        if n > 0:
            break
    return n

def cat(n):
    for _ in range(n):
        print("Няв!")

main()

Індексація списків

Потренуємося працювати з індексами списків.

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

students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

Як роздрукувати список студентів? Для цього я можу скористатися індексом, який вказує на позицію елемента у списку за допомогою квадратних [] дужок після назви змінної:

students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

print(students[0])
print(students[1])
print(students[2])
Гаррі Поттер
Герміона Грейнджер
Рон Уізлі

Індексація списків

Але ж має бути кращий спосіб, чи не так?

students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

for student in students:
    print(student)
Гаррі Поттер
Герміона Грейнджер
Рон Уізлі

А що, якщо я хочу крім імені студента вивести його номер у списку? Для цього я можу скористатися функцією enumerate(), яка дозволяє мені отримати індекс елемента у списку:

students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

for i, student in enumerate(students):
    print(f"{i + 1}: {student}")
1: Гаррі Поттер
2: Герміона Грейнджер
3: Рон Уізлі

Індексація списків

Можна робити зрізи списків:

students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

print(students[0:2])
['Гаррі Поттер', 'Герміона Грейнджер']

Методи списків

Методи - це функції, які можна викликати для списків. Методи списків дозволяють виконувати різні дії зі списками.

  • append() - додає елемент у кінець списку
students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

students.append("Драко Малфой")
print(students)
['Гаррі Поттер', 'Герміона Грейнджер', 'Рон Уізлі', 'Драко Малфой']
  • clear() - видаляє всі елементи списку
students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

students.clear()
print(students)
[]
  • copy() - повертає копію списку
students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

students_copy = students.copy()
print(students_copy)
['Гаррі Поттер', 'Герміона Грейнджер', 'Рон Уізлі']

Методи списків

  • count() - повертає кількість елементів списку
house = ["Ґрифіндор", "Ґрифіндор", "Ґрифіндор", "Слизерин"]

print(house.count("Слизерин"))
1
  • extend() - додає елементи іншого списку до поточного
students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

new_students = ["Драко Малфой", "Невілл Лонгботтом"]
print(students.extend(new_students))
None
  • index() - повертає індекс першого елемента зі списку
students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

print(students.index("Герміона Грейнджер"))
1

Методи списків

  • insert() - додає елемент у список за індексом
students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі"]

students.insert(1, "Драко Малфой")
print(students)
['Гаррі Поттер', 'Драко Малфой', 'Герміона Грейнджер', 'Рон Уізлі']
  • pop() - видаляє та повертає елемент із заданим індексом
students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі", "Драко Малфой"]

removed_student = students.pop(1)
print(removed_student)
print(students)
Герміона Грейнджер
['Гаррі Поттер', 'Рон Уізлі', 'Драко Малфой']
  • remove() - видаляє елемент із списку за значенням
students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі", "Драко Малфой"]

students.remove("Драко Малфой")
print(students)
['Гаррі Поттер', 'Герміона Грейнджер', 'Рон Уізлі']

Методи списків

  • reverse() - змінює порядок елементів у списку на зворотний
students = ["Гаррі Поттер", "Герміона Грейнджер", "Рон Уізлі", "Драко Малфой"]

students.reverse()
print(students)
['Драко Малфой', 'Рон Уізлі', 'Герміона Грейнджер', 'Гаррі Поттер']
  • sort() - сортує елементи списку
students = ["Герміона Грейнджер", "Гаррі Поттер", "Драко Малфой", "Рон Уізлі"]

students.sort()
print(students)
['Гаррі Поттер', 'Герміона Грейнджер', 'Драко Малфой', 'Рон Уізлі']

List comprehension

List comprehension в Python - це компактний спосіб створення нового списку на основі наявного списку або іншої ітерованої послідовності, наприклад, рядка.

Загальний синтаксис для створення list comprehension виглядає наступним чином:

new_list = [expression for item in iterable if condition]

де:

  • expression - вираз, який застосовуватиметься до кожного елемента списку або послідовності
  • item - змінна, що представляє поточний елемент послідовності, що ітерується;
  • iterable - список або інша послідовність, що ітерується;
  • condition (необов’язково) - умова, за якою буде фільтруватися вихідна послідовність.

List comprehension

  1. Припустимо, у нас є список із числами, ми хочемо створити новий список із квадратами цих чисел. Варіант рішення:
numbers = [1, 2, 3, 4, 5]
squares = []
for i in numbers:
    squares.append(i**2)

print(squares)
[1, 4, 9, 16, 25]

А ось так виглядало б рішення за допомогою list comprehension:

numbers = [1, 2, 3, 4, 5]
squares = [x ** 2 for x in numbers]

print(squares)
[1, 4, 9, 16, 25]

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

List comprehension

  1. Створення нового списку, що містить тільки парні числа з вихідного списку:

Стандартний розв’язок:

numbers = [1, 2, 3, 4, 5]
even_numbers = []
for i in numbers:
    if i % 2 == 0:
        even_numbers.append(i)

print(even_numbers)
[2, 4]

List comprehension:

numbers = [1, 2, 3, 4, 5]
even_numbers = [x for x in numbers if x % 2 == 0]

print(even_numbers)
[2, 4]

List comprehension

  1. Створення нового списку, що містить довжини слів із вихідного списку:
words = ["hello", "world", "python", "list"]
word_lengths = [len(word) for word in words]

print(word_lengths)
[5, 5, 6, 4]

Словники

Словники

Словники - це структура даних, яка дозволяє зберігати пари ключ-значення у одній змінній. Словники в Python створюються за допомогою фігурних дужок {} і можуть містити будь-які значення, в тому числі інші словники.

Припустимо, що ми хочемо відстежувати, хто до якого гуртожитку відноситься в Гоґвортсі. Для прикладу візьмемо чотирьох учнів:

Герміона Грейнджер Гаррі Поттер Рон Уізлі Драко Малфой
Ґрифіндор Ґрифіндор Ґрифіндор Слизерин


students = {
    "Герміона Грейнджер": "Ґрифіндор",
    "Гаррі Поттер": "Ґрифіндор",
    "Рон Уізлі": "Ґрифіндор",
    "Драко Малфой": "Слизерин"
}

print(students)
{'Герміона Грейнджер': 'Ґрифіндор', 'Гаррі Поттер': 'Ґрифіндор', 'Рон Уізлі': 'Ґрифіндор', 'Драко Малфой': 'Слизерин'}

Словники

Тепер давайте виведемо на екран ім’я та гуртожиток кожного учня. Для цього ми можемо скористатися циклом for:

students = {
    "Герміона Грейнджер": "Ґрифіндор",
    "Гаррі Поттер": "Ґрифіндор",
    "Рон Уізлі": "Ґрифіндор",
    "Драко Малфой": "Слизерин"
}

for student in students:
    print(student)
Герміона Грейнджер
Гаррі Поттер
Рон Уізлі
Драко Малфой

Щоб вивести ім’я та гуртожиток кожного учня, ми можемо скористатися індексацією словника за ключем:

students = {
    "Герміона Грейнджер": "Ґрифіндор",
    "Гаррі Поттер": "Ґрифіндор",
    "Рон Уізлі": "Ґрифіндор",
    "Драко Малфой": "Слизерин"
}

for student in students:
    print(f"{student}: {students[student]}")
Герміона Грейнджер: Ґрифіндор
Гаррі Поттер: Ґрифіндор
Рон Уізлі: Ґрифіндор
Драко Малфой: Слизерин

Словники

Давайте ускладнимо задачу і додамо ще одину характеристику до кожного учня - його Патронуса:

Ім’я Гуртожиток Патронус
Герміона Грейнджер Ґрифіндор Видра
Гаррі Поттер Ґрифіндор Олень
Рон Уізлі Ґрифіндор Тер’єр
Драко Малфой Слизерин


students = [
    {
        "ім'я": "Герміона Грейнджер",
        "гуртожиток": "Ґрифіндор",
        "патронус": "Видра"
    },
    {
        "ім'я": "Гаррі Поттер",
        "гуртожиток": "Ґрифіндор",
        "патронус": "Олень"
    },
    {
        "ім'я": "Рон Уізлі",
        "гуртожиток": "Ґрифіндор",
        "патронус": "Тер'єр"
    },
    {
        "ім'я": "Драко Малфой",
        "гуртожиток": "Слизерин",
        "патронус": None
    }
]

Зверніть увагу, що згідно канонічного варіанту Драко Малфой не має Патронуса. Тому ми вказали його значення як None - це спеціальне значення, яке означає “нічого”.

Словники

Для виводу інформації про учнів ми можемо скористатися циклом for:

students = [
    {
        "ім'я": "Герміона Грейнджер",
        "гуртожиток": "Ґрифіндор",
        "патронус": "Видра"
    },
    {
        "ім'я": "Гаррі Поттер",
        "гуртожиток": "Ґрифіндор",
        "патронус": "Олень"
    },
    {
        "ім'я": "Рон Уізлі",
        "гуртожиток": "Ґрифіндор",
        "патронус": "Тер'єр"
    },
    {
        "ім'я": "Драко Малфой",
        "гуртожиток": "Слизерин",
        "патронус": None
    }
]

for student in students:
    print(student["ім'я"], student["гуртожиток"], student["патронус"], sep=", ")
Герміона Грейнджер, Ґрифіндор, Видра
Гаррі Поттер, Ґрифіндор, Олень
Рон Уізлі, Ґрифіндор, Тер'єр
Драко Малфой, Слизерин, None

Словники

Альтернативний варіант створення словника students - це використання вкладених словників:

students = {
    "Герміона Грейнджер": {
        "гуртожиток": "Ґрифіндор",
        "патронус": "Видра"
    },
    "Гаррі Поттер": {
        "гуртожиток": "Ґрифіндор",
        "патронус": "Олень"
    },
    "Рон Уізлі": {
        "гуртожиток": "Ґрифіндор",
        "патронус": "Тер'єр"
    },
    "Драко Малфой": {
        "гуртожиток": "Слизерин",
        "патронус": None
    }
}

for student in students:
    print(student, students[student]["гуртожиток"], students[student]["патронус"], sep=", ")
Герміона Грейнджер, Ґрифіндор, Видра
Гаррі Поттер, Ґрифіндор, Олень
Рон Уізлі, Ґрифіндор, Тер'єр
Драко Малфой, Слизерин, None

Створення словників

У Python є кілька способів створення словників:

  1. Літерали словника
my_dict = {'ім\'я': 'Аліса', 'вік': 25, 'місто': 'Київ'}
print(my_dict)
{"ім'я": 'Аліса', 'вік': 25, 'місто': 'Київ'}
  1. Вбудована функція dict()
empty_dict = dict()
print(empty_dict)
{}
fruit_dict = dict([('яблуко', 5), ('банан', 3), ('апельсин', 2)])
print(fruit_dict)
{'яблуко': 5, 'банан': 3, 'апельсин': 2}

Створення словників

  1. Генератор словників

Генератори словників дозволяють створювати словники на основі інших послідовностей. Наприклад:

fruit_list = ['яблуко', 'банан', 'апельсин']
fruit_dict = {fruit: len(fruit) for fruit in fruit_list}
print(fruit_dict)
{'яблуко': 6, 'банан': 5, 'апельсин': 8}
  1. Метод fromkeys()

Метод fromkeys() дає змогу створити словник із зазначеними ключами й одним і тим самим значенням для всіх ключів. Наприклад:

fruit_list = ['яблуко', 'банан', 'апельсин']
fruit_dict = {}.fromkeys(fruit_list, 0)
print(fruit_dict)
{'яблуко': 0, 'банан': 0, 'апельсин': 0}

Методи словників

  1. get() - дає змогу отримати значення за ключем, але на відміну від звернення через [], не викликає виняток KeyError, якщо ключ відсутній у словнику:
my_dict = {"one": 1, "two": 2, "three": 3}
print(my_dict.get("two"))
print(my_dict.get("four", "Key not found"))
2
Key not found
  1. keys() - дає змогу отримати список ключів словника:
my_dict = {"one": 1, "two": 2, "three": 3}
print(my_dict.keys())
dict_keys(['one', 'two', 'three'])
  1. values() - дає змогу отримати список значень словника:
my_dict = {"one": 1, "two": 2, "three": 3}
print(my_dict.values())
dict_values([1, 2, 3])

Методи словників

  1. items() - дає змогу отримати список пар ключ-значення словника:
my_dict = {"one": 1, "two": 2, "three": 3}
print(my_dict.items())
dict_items([('one', 1), ('two', 2), ('three', 3)])
  1. pop() - дає змогу видалити пару ключ-значення за ключем. Якщо ключ відсутній, викликає виняток KeyError або повертає другий аргумент, якщо він переданий:
my_dict = {"one": 1, "two": 2, "three": 3}
print(my_dict.pop("two"))
print(my_dict.pop("four", "Key not found"))
2
Key not found
  1. clear() - дає змогу видалити всі пари ключ-значення зі словника:
my_dict = {"one": 1, "two": 2, "three": 3}
my_dict.clear()
print(my_dict)
{}

Методи словників

  1. update() - дає змогу оновити словник із іншого словника або із послідовності пар ключ-значення:
my_dict = {"one": 1, "two": 2, "three": 3}
new_dict = {"two": 22, "four": 4}
my_dict.update(new_dict)
print(my_dict)
{'one': 1, 'two': 22, 'three': 3, 'four': 4}
  1. copy() - дає змогу створити копію словника:
my_dict = {"one": 1, "two": 2, "three": 3}
new_dict = my_dict.copy()
print(new_dict)
{'one': 1, 'two': 2, 'three': 3}

Оператори continue та break

Оператор continue і оператор break є керуючими операторами в циклах, їх використовують для зміни поведінки виконання циклу.

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

for i in range(1, 6):
    if i == 3:
        continue
    print(i)
1
2
4
5

Оператори continue та break

Оператор break використовується для переривання виконання циклу. Якщо зустрінеться оператор break, виконання циклу буде припинено і відбувається вихід із циклу:

for i in range(1, 6):
    if i == 3:
        break
    print(i)
1
2

Оператори continue та break

Приклад спільного використання:

employees = [
    {'name': 'John', 'qualification': 'low'},
    {'name': 'Alice', 'qualification': 'high'},
    {'name': 'Bob', 'qualification': 'medium'},
    {'name': 'Eva', 'qualification': 'low'},
    {'name': 'Mike', 'qualification': 'high'},
    {'name': 'Lisa', 'qualification': 'medium'}
]

found_high_qualification_employee = False

for employee in employees:
    qualification = employee['qualification']
    if qualification == 'low':
        continue # Пропускаємо працівника з низькою кваліфікацією
    elif qualification == 'high':
        found_high_qualification_employee = True
        high_qualification_employee = employee
        break # Знайдено працівника з високою кваліфікацією, припиняємо пошук
if found_high_qualification_employee:
    print("Працівника з високою кваліфікацією знайдено!")
    print(high_qualification_employee)
else:
    print("Працівника з високою кваліфікацією не знайдено.")
Працівника з високою кваліфікацією знайдено!
{'name': 'Alice', 'qualification': 'high'}

Дякую за увагу!



Матеріали курсу

ihor.miroshnychenko@kneu.ua

Data Mirosh

@ihormiroshnychenko

@aranaur

aranaur.rbind.io