# Основні поняття мови Python

## Вкладені розгалуження

У попередньому параграфі ми розглянули алгоритми і програми, що містять одну структуру розгалуження. Але часто в алгоритмі потрібно декілька разів вибирати, які дії виконати. Важливо відзначити, що в алгоритмах і програмах розгалуження можуть бути послідовними (розташованими одне за іншим) і вкладеними (одне всередині іншого). Вкладені розгалуження застосовуються, якщо при виконанні (або невиконанні) деякої умови знову необхідно робити вибір. У такій ситуації в умовному операторі по гілці True (після двокрапки) або по гілці False (після службового слова еlse) використовують оператор іf.

Вкладені розгалуження

Розглянемо задачу: знайти найбільше значення серед трьох чисел: a, b, c. Результат присвоїти змінній max. Алгоритмічна структура розгалуження має тільки дві гілки, а у нас три варіанти (найбільшим може бути будь-яке з чисел: a, b, c), тому використаємо вкладення розгалужень.

Поміркуємо: якщо a>b, то найбільшим є більше з чисел а і с; інакше найбільшим є більше з чисел b і с. Таким чином, після вибору більшого з чисел a і b знов потрібно вибрати більше з чисел а і с, а по гілці False – вибрати більше з чисел b і с. Блок-схема алгоритму представлена на малюнку:

Запишемо програмний код даного алгоритму:

Відступи

В мові Python велике значення мають відступи команди від лівого краю вікна програми. Команди, вкладені в гілки оператора if, об'єднуються в блоки по величині відступів. Відступ може бути будь-яким, головне, щоб в межах одного вкладеного блоку відступ був однаковий.

Приклад 29.1. Програма запитує у користувача кількість кутів у багатокутника.

· Якщо кількість кутів не дорівнює 3 або 4, видається повідомлення «Помилка в кількості кутів»;

· Інакше: якщо кількість кутів дорівнює 3, то малюється трикутник, інакше малюється квадрат.

from turtle import *

print('Накреслимо багатокутник')

n = input('Кількість кутів? (3 або 4) ')

a = int(n)

if not (a == 3 or a == 4):

print('Помилка в кількості кутів')

else:

if a == 3:

forward(100)

right(120)

forward(100)

right(120)

forward(100)

print('Це трикутник')

else:

forward(100)

right(90)

forward(100)

right(90)

forward(100)

right(90)

forward(100)

print('Це чотирикутник')

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

Множинний вибір

Для реалізації такого алгоритму використовують оператор elif.

x = input('Введіть будь-яке ціле число')

x = int(x)

if x <0:

print(“Це від’ємне число”)

elif x > 0:

print(“Це додатнє число”)

else:

print(“Це нуль”)

Зверніть увагу! Використовуючи оператор print, ми використали подвійні лапки, аби уникнути помилки при виведенні на екран тексту, що містить апостроф, який інтерпретується як одинарні лапки. (Пригадайте, що в Python для відображення тексту можна використовувати два види лапок).

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

Для тих, хто хоче знати більше

1. Перевірка істинності в Python

· Будь-яке число, яке не дорівнює 0, або непустий об’єкт – істина;

· Числа, котрі дорівнюють 0, пусті об’єкти або значення None – хиба;

· Операції порівняння повертають значення True або False;

· Логічні оператори or та and повертають істинний або хибний операнд:

· X and Y – істина, якщо обидва об’єкти X та Y істині (and – оператор «і»);

· X and Y – істина, якщо хоча б одне зі значень X або Y істинне (or – оператор «або»);

· not X – істина, якщо X хибне (not означає заперечення).

2. Тримісний вислів if/else.

Пригадуєте «синтаксичний цукор»? Для спрощення запису розгалужень у Python можна використовувати певні хитрощі. Розглянемо приклад:

if X:

A = 'Hello!'

else:

A = 'Good-bye!'

Якщо значення X істинне, то A присвоюється значення 'Hello!', якщо ні – то 'Good-bye!'

Наведена вище конструкція доволі коротка, але займає 4 рядки. А має вивести один результат. Тож було б непогано і вираз записати в один рядок.

Саме для таких випадків і придумали тримісний вислів if/else:

A = 'Hello!' if X else 'Good-bye!'

В даній конструкції інтерпретатор присвоїть змінній A значення 'Hello!', якщо значення X є істиною, інакше виконається вираз після else.

Ще один приклад: A = B if X = 0 else C

Питання для самоперевірки

1. Поясніть схему виконання оператора if, в якому застосовані вкладені оператори розгалуження.

2. Яке значення мають відступи команди від лівого краю вікна програми?

3. Яких значень набудуть змінні а і b після виконання умовного оператора іf для наведених наборів початкових значень (див. таблицю)? Перевірте це на практиці.

Практичні завдання

1. Напишіть програму, яка для двох чисел а і b виводить відповідь «a>b», «b>a» або «a=b».

2. Напишіть програму, яка запитує вік школяра і за допомогою операторів розгалуження визначає, в якій ланці він навчається: початкова школа (1-4 класи), основна (5-9 класи) або старша (10-11 класи).

Міні-шпаргалка по Python:

1. Множинний вибір:

if X == 0:

print('X = 0')

elif X > Y:

print('X > Y')

elif X < Y:

print('X < Y')

else:

print('X = Y')

2. При порівнянні вважають, що будь-яке число, яке не дорівнює 0, або непустий об’єкт – істина. Операції порівняння повертають значення True або False.В складних виразах можуть використовуватися логічні оператори and, or, not («і», «або», «не»).

3. Тримісний вислів if/else: A = B if X = 0 else C

Алгоритми з повтореннями. Цикл for

Повторення (цикл) – це алгоритмічна структура, за допомогою якої та сама послідовність дій виконується кілька разів. Для запису алгоритмів із повторенням (циклів) мовою Python використовують 2 види операторів циклу: з параметром та з умовою. Серію команд, що повторюється під час виконання циклу, називають тілом циклу. Кожне виконання тіла циклу називають ітерацією.

Повторення команд

Цикл for повторює блок команд (тіло циклу) задану кількість разів, позбавляючи необхідності декілька разів писати одні і ті самі команди. Синтаксис, або правила запису циклу for, виглядає наступним чином:

for х in range(n):

<тіло циклу>

В першу чергу ми вказуємо ключове слово for, після чого указуємо змінну х, яка буде лічильником циклу.

Примітка: не думайте, що треба обирати саме змінну x. Це все – питання смаку програміста. Дехто, наприклад, полюбляє i, j, t, k, n тощо. Це може бути і ціле слово – наприклад, flag або count. Головне – аби ім’я змінної не суперечило синтаксису.

Питання: а навіщо потрібна змінна? Це очевидно – десь же треба зберігати інформацію про те, скільки разів «прокрутився» цикл. Так що, по суті, ця змінна нічим не відрізняється від решти. Її можна прочитати, проаналізувати, а отже, знати, на якій стадії виконання знаходиться цикл.

Ключове слово in наказує Python по черзі надати змінній x всі значення в діапазоні від 0 до n-1. Не забувайте, що комп'ютер зазвичай починає рахувати з 0, а не з 1, як люди. Вбудована функція range повертає безперервну зростаючу послідовність цілих чисел, які можна використовувати в якості індексів всередині циклу. Щоб дати зрозуміти комп'ютеру, які команди слід повторити, використовуються відступи (пригадайте, те саме вимагали записи алгоритмів з розгалуженням). Можна зробити відступ для кожної повторюваної в тілі циклу команди, натискаючи для цього клавішу Tab у вікні нового файлу.

Приклад. Створимо цикл, що виконуватиме якісь дії, наприклад, 4 рази. Де це може знадобитися? Ну, наприклад, при малюванні чотирикутника (до черепашачої графіки ще повернемося).

for x in range(4):

print (x)

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

Виконавши цей цикл у середовищі інтерпретатора, отримаємо послідовність цифр від 0 до 3. Чому ж у кінці маємо 3, а не 4? Адже ми записали range(4) і повинні розраховувати на 4? Все дуже просто – порахуйте кількість виведених цифр. Їх рівно чотири – 0, 1, 2, 3! Нагадуємо, що Python веде рахунок не з 1, а з 0. Функція range(4) задає список значень, що вписуються у цей діапазон. У нашому випадку це список чисел [0, 1, 2, 3]

Лічильник циклу for

Крім найпростішого циклу, описаного вище, де змінна з кожним «кроком» змінює своє значення на 1, існує ще і інший цикл з лічильником. Змінна-лічильник циклу веде відлік, скільки разів повторився цикл, почергово набуваючи всіх значень з указаного діапазону. Діапазон значень може бути заданий у вигляді текстового рядка. Лічильник почергово приймає значення літер, з яких складається указаний рядок.

Приклад:

a = "Україна"

for x in a:

print("Буква: ", x)

Результат: на екран будуть почергово виведені літери, з яких складається слово «Україна».

Зверніть увагу: у записі відсутня функція range! Замість неї використовується змінна, яка є текстовим рядком. Тобто кількість літер відповідає за кількість ітерацій (кількість виконань команд циклу). Взагалі-то можна було б записати і так, щоправда, в такому випадку цикл «прив’язаний до конкретного рядка («Україна»):

for x in "Україна":

print("Буква: ", x)

А якщо у циклі один рядок, то і всю конструкцію теж можна записати в один рядок:

for x in "Україна": print("Буква: ", x)

Чи згодні ви з тим, що синтаксис Python дуже гнучкий?

Для тих, хто хоче знати більше

Використання списків.

Крім рядків або числових значень змінна може містити списки.

Список – це набір значень, розділених комами, взятий у квадратні дужки. У списках можна зберігати значення будь-якого типу, будь то числа або рядки. Скажімо, name = ["Саша", "Маша", "Вася", "Петя"]

Лічильник почергово приймає значення зі списку.

b = [2, 4, 6, 8, 10]

for x in b:

print ("Число: ", x)

Задання кроку і напрямку циклу.

Повний запис циклу for має такий синтаксис:

for х in range(<Від>, <До>, <Крок>):

<тіло циклу>

for х in range(1, 20, 2):

print(x)

Результат – ми отримаємо послідовність чисел від 1 до 20 з кроком 2, тобто 1, 3, 5 … 19 (непарні числа). Замінимо 1 на 2 – і отримаємо список парних чисел.

Якщо потрібно вести зворотній відлік (в бік зменшення значень), укажіть значення «від» більшим, ніж значення «до», а «крок» повинний бути від’ємним.

for х in range(5, 1, -1):

print("Число: ", x)

Результат – ми отримаємо послідовність чисел у зворотному порядку, тобто 5, 4, 3, 2.

Оператор continue.

Оператор continue починає наступний "прохід" циклу, минаючи решту тіла циклу for.

a = ""

for i in "Hello children":

if i == "o":

continue

a = a + i

print(a)

Результат: замість фрази "Hello children" ("Привіт діти") отримуємо фразу "Hell children" ("Пекельні діти"). Чому так сталося? Причина проста – коли значення i == "o", оператор continue пропустив команду a = a + i, не додавши літеру «о» до змінної a, результатом чого і стала зміна фрази.

Оператор b reak.

Оператор break, на відміну від оператора continue достроково перериває виконання циклу for.

a = ""

for i in "Hello world":

if i == "o":

break

a = a + i

print(a)

Результат: замість фрази "Hello world" ("Привіт світ") отримуємо лаконічну фразу "Hell" ("Пекло"). Коли значення i == "o", оператор break достроково перервав цикл, залишивши нам «обрубок» фрази.

Чарівне слово else.

Слово else, якщо його використати у циклі for, перевіряє, чи було виконано достроковий вихід з циклу інструкцією break, чи це відбулося "природнім" шляхом, без усіляких насильницьких переривань. Блок інструкцій усередині else виконується лише у тому випадку, якщо вихід з циклу відбувся без використання break.

a = "Hello Україна"

for i in a:

if i == "ы":

print("Знайдено ы. Перериваю цикл")

break

else:

print("Букву ы знайдено не було")

Результат: якщо рядок міститиме літеру «ы», програма повідомить про це і достроково перерве цикл. Якщо цього не сталося і цикл «добіг до кінця», буде виконано те, що міститься усередині else.

Питання для самоперевірки

1. Поясніть правила виконання циклу for.

2. Яких значень набуває змінна х в ході виконання циклу for х in range(5)?

3. Яких значень набуває змінна х в ході виконання циклу for х in range(0, 10, 2)?

4. Що буде надруковано в ході виконання циклу:

s = "цикл"

for х in s:

print (x)

5. Що буде надруковано в ході виконання циклу:

b = [1,3,5,7,9]

for х in b:

print (x)

6. Чому дорівнює s після виконання циклу:

Словничок по Python

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

Тіло циклу – cерія команд, що повторюється під час виконання циклу.

Ітерація – кожне виконання тіла циклу.

Список – це набір значень, розділених комами, взятий у квадратні дужки.