You are on page 1of 145

Центральноукраїнський державний педагогічний університет

імені Володимира Винниченка

Рєзіна О.В., Дроговоз Н.А.

Програмув
ання
Навчально-методичний посібник
мовою
Python.
Структурн
ий підхід

Кропивницький – 2020
Рецензенти:
Авраменко О.В. – доктор фізико-математичних наук, професор кафедри
прикладної математики, економіки та статистики ЦДПУ імені В. Винниченка
Паращук С.Д. – кандидат фізико-математичних наук, доцент кафедри
інформатики та інформаційних технологій ЦДПУ імені В. Винниченка
Баранюк О.Ф. – кандидат технічних наук, доцент кафедри інформатики та
інформаційних технологій ЦДПУ імені В. Винниченка

Рєзіна О.В., Дроговоз Н.А. Програмування мовою Python. Структурний


підхід: навчально-методичний посібник. – Кропивницький, 2020. – 140 с.

У посібнику розглянуті основні питання структурного програмування –


введення / виведення даних, структури керування порядком обчислень та
структури даних. Як засіб створення програм обрано мову програмування
Python.
У роботі наведені теоретичні відомості, приклади та численні практичні
завдання. Практичним завданням приділяється значна увага: до кожної теми
пропонується набір завдань, виконання яких передбачає індивідуальну роботу
студента. Акцент зроблено на розв’язуванні завдань з математичною
тематикою – побудова таблиць значень функцій, створення функцій
користувача, опрацювання списків та файлів з числовими елементами,
обробка матриць, використання можливостей математичного модуля math.
Один розділ присвячено створенню графічних об’єктів та анімації із
застосуванням модуля tkinter.
Матеріал посібника може бути використаний у процесі вивчення
програмування студентами фізико-математичного факультету педагогічного
університету.
ЗМІСТ

Розділ І. Структури управління порядком обчислень................................4


Тема №1. Мова програмування Python. Інтерактивний інтерпретатор Python Shell..................4
Тема №2. Оператори введення / виведення даних...........................................................................9
Тема №3. Умовні оператори............................................................................................................16
Тема №4. Циклічні оператори.........................................................................................................27
Розділ ІІ. Функції користувача та структури даних.................................35
Тема №5. Функції користувача........................................................................................................35
Тема №6. Кортежі. Списки..............................................................................................................41
Тема №7. Списки Python з числовими елементами. Модуль random.........................................50
Тема №8. Вкладені 2D-списки в матричних задачах....................................................................58
Тема №9. Словники..........................................................................................................................65
Тема №10. Рядки...............................................................................................................................73
Тема №11. Текстові файли...............................................................................................................82
Тема №12. Рекурсивні функції........................................................................................................90
Тема № 13. Алгоритми сортування. Бінарний пошук...................................................................95
Розділ ІІІ. Графіка у Python. Модуль tkinter............................................105
Тема № 14. Програмування графіки з використанням модуля tkinter. Базові фігури.............105
Тема № 15. Відображення тексту та імпортованих зображень..................................................123
Тема № 16. Створення анімації.....................................................................................................126
Тема № 17. Використання модуля random при створенні графічних зображень.....................131
Рекомендовані джерела.............................................................................140

3
Розділ І. Структури управління порядком обчислень
Тема №1. Мова програмування Python.
Інтерактивний інтерпретатор Python Shell
Мета: навчитися: 1) використовувати інтерактивний інтерпретатор Python Shell
для виконання простих обчислень 2) використовувати інтегроване середовище
Python для розробки програм.
Теоретичні питання
План
1. Поняття мови програмування.
2. Середовище програмування та його складові.
3. Мова програмування Python.
4. Інтегроване середовище розробки Python. Інтерактивний інтерпретатор
Python Shell.

1. Поняття мови програмування

Основними засобами створення програм є мови і середовища програмування.

Мова програмування – це штучна (формальна) мова, призначена для запису


алгоритмів, орієнтованих на виконання їх комп’ютером. Записи алгоритмів
мовою програмування називаються програмами.

Компоненти мови програмування:


 алфавіт – сукупність символів, які використовуються при написанні
програми;
 словник – набір спеціальних (зарезервованих, ключових) слів.
 синтаксис – правила складання та запису мовних конструкцій;
 семантика – встановлене однозначне тлумачення мовних конструкцій,
правил їх виконання.

Оператор мови програмування – це символ, який вказує компілятору або


інтерпретатору на виконання певної математичної, порівняльної або логічної
операції для отримання результату.

2. Середовище програмування та його складові

Середовище програмування, або інтегроване середовище розробки (Integrated


development environment, IDE) – це система програмних засобів, що
використовується для розробки програм. Складовими середовища
програмування є:
4
 текстовий редактор;
 компілятор або інтерпретатор;
 засоби автоматизації збирання програмних проектів;
 налагоджувач.

3. Мова програмування Python


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

Python підтримує об'єктно-орієнтоване програмування (вона і розроблялася як


об’єктно-орієнтована мова).
Python вільно поширюється на підставі ліцензії GNU (General Public License).

4. Інтегроване середовище розробки. Інтерактивний інтерпретатор Python


Shell
Інтерпретатор Python (Python Shell) можна використовувати як калькулятор.
Послідовність знаків >>> є рядком запрошення.
Арифметичні оператори мови Python наведені у табл. 1.1.

Таблиця 1.1. Арифметичні оператори мови Python

Оператор Опис Синтаксис


+ Додавання 15 + 4 == 19
- Віднімання 15 - 4 == 11
* Множення 15 * 4 == 60
/ Ділення 15 / 4 == 3.75
** Піднесення до степеня 15 ** 4 == 50625
% Остача від ділення 15 % 4 == 3
// Ціла частина від ділення 15 // 4 == 3

Дужки (()) можуть бути використані для групування.


Застосувати ці оператори до даних типів integer (ціле число), float (дійсне
число) та string (рядок). Для цього в середовищі Python Shell увести
послідовно наступні команди, натискаючи Enter для отримання результату:
5
>>> 88 + 4
92
>>> 45 * 4
180
>>> 17 / 3
5.666666666666667
>>> 78 - 42
36
>>>2 + (3 * 5)
17
>>>(2 + 3) * 5
25
>>> 2.0**3.0
8.0
>>> 11 % 3
2
>>> 11 // 3
3
>>>5.9 % 2.3
1.3000000000000007
>>> "inter" + "net"
'internet'
>>> "computer" + " " + "science"
'computer science'
>>> "Python" * 5
'PythonPythonPythonPythonPython'
>>> "module math#"*3
'module math# module math# module math#'

Практичні завдання
Завдання 1. Завантажити IDE (інтегроване середовище розробки) мови
програмування Python. Наступні завдання виконати у вікні Python Shell
(Оболонка Python), що забезпечує інтерактивний режим роботи Python.
Виконати обчислення:
>>>121 + 11
>>>7 * 3
>>>20 / 3
>>>21.0 + 3.0 * 4.0
6
>>>(21.0 + 3.0) * 4.0
>>>(31 + 4) / 5 + 10.05
>>>5 ** 3
>>>81.0**0.5
>>>(81.0**0.5)**0.5

Результати записати до текстового файлу (створити у текстовому редакторі


Блокнот).
Завдання 2. Порівняти результати наступних операторів ділення:

>>>12.0/4.0
>>>12/4
>>>7.0/2.0
>>>7./2.
>>>7./2
>>>7/2
>>>1./2.
>>>1/2

Результати проаналізувати та записати до текстового файлу.


Завдання 3. Порівняти результати наступних операторів ділення:

>>>(27 / 3)
>>>(27 // 3)
>>>(27 % 3)

Результати проаналізувати та записати до текстового файлу.


Завдання 4. Знайти результат виконання операторів:

>>> "Фізико-" + "математичний "+"факультет."


>>> "Термін навчання " + "4 " + " роки."
>>> "Перший " + "семестр."
>>> "Вітаю, " + "студенте. " + "Які питання виникли?"

Результати записати до текстового файлу.


Завдання 5. Записати команду з використанням оператора *, результатом
виконання якої є рядок:
' Inform Inform Inform Inform Inform Inform '
'net\\ net\\ net\\ net\\ '

Результати записати до текстового файлу.

7
Завдання 6. Вибрати завдання відповідно до номера прізвища у журналі.
Знайти результат обчислення виразу, використовуючи інтерактивний
інтерпретатор Python Shell:

12−1.1+3∗4
1¿ −5.6 ;
1.1+10.4

( 24−0.2 )∗( 88+23.3 )


2 ¿ 2.3+ ;
107.34−1.2

211.1 2.2
3¿ + ;
211.1−400.4 14.2+12.3

11−21/3
4 ¿ 23.1+ ;
85−30.2

21.1 12.2
5¿ + ;
21.1+ 40.4 14.2−12.3

2.1
4−
8 3
6¿ − ;
7 21.3+ 90

21+ 2.1/7
7¿ −23.7 ;
15.4+30

( 34 +11.7 )∗( 45−200.2 )


8¿ −3.3;
4.7−111.5

211.1 14.2+12.3
9¿ + ;
211.1−400.4 22.2

15−9.1/ 3
10 ¿ +3.3 ;
112 +9.2

115+ 4 /8
11 ¿ ;
20+ 17.5−3.82

167−2.1/7
12 ¿ −8.82 ;
20.2+177.3

12−1.1+ 3/ 4
13 ¿ −4.8 ;
1.1+10.4

167−2.1∗3
14 ¿ + 1.12 ;
20.2+177.3

17+ 9.1/3
15 ¿ +5.3 .
112−9.5
8
Контрольні запитання
1. Назвіть основні засоби створення програм.
2. Що називають мовою програмування? Назвіть компоненти мови
програмування.
3. Що називають комп’ютерною програмою?
4. Яке призначення середовища програмування? Назвіть складові
середовища програмування.
5. З якою метою програма, написана мовою високого рівня, перетворюється
на машинний код? Яка складова середовища програмування виконує цей
процес?
6. Чим програми-компілятори відрізняються від програм-інтерпретаторів?
7. Які помилки називають синтаксичними? Яка складова системи
програмування виявляє синтаксичні помилки?
8. За допомогою якої складової системи програмування можна виправити
синтаксичну помилку?
9. Які помилки називають семантичними (логічними)? Як виявити та
виправити семантичні помилки?
10. Назвіть особливості мови програмування Python.
11. Яким є призначення інтерактивного інтерпретатора Python Shell?

Тема №2. Оператори введення / виведення даних


Мета: навчитися використовувати функцію виведення даних; функцію
введення для різних типів даних.
Теоретичні питання
План
1. Функція виведення даних. Форматування виведення.
2. Функція введення даних.
3. Математичні функції мови Python. Модуль math.

Уведення даних – це процес їх передачі із зовнішніх носіїв або пристроїв


введення до комірок оперативної пам’яті.
Виведення даних – це процес передачі їх з оперативної пам’яті на зовнішній
носій або пристрій виведення.

1. Функція виведення даних. Форматування виведення.

9
У Python використовується функція print()для виведення даних на екран
комп’ютера:

Оператор Результат
print() порожній рядок
print("Hello, World!") Hello, World!
print(2 + 2 * 2) 6
print("100 - 1 is", 100 - 1) 100 - 1 is 99
print("(33 + 2) / 5 + 11.5 (33 + 2) / 5 + 11.5) (33 + 2) /
is", 5 + 11.5 is 18.5

Для функції print() передбачено використання параметрів:


sep – роздільник, що використовується між значеннями (за замовченням –
пробіл);
end – символ, що виводиться наприкінці друку (за замовченням – новий рядок).

Наприклад:

# Виведення значень 1 2 3 41
print(1,2,3,4)

# Використання роздільника ";"


print(1,2,3,4,sep=";")

# Використання роздільника ";" та кінцевого символа "#"


print(1,2,3,4,sep=":",end="#")

Результати:
1 2 3 4
1;2;3;4
1:2:3:4#

Використання спеціальних символів


При опрацюванні рядків можна застосовувати спеціальні символи. Розглянемо
\n та \t.
Сукупність символів \n використовується для переведення курсора на новий
рядок:

# Виведення рядка
print("Розробити алгоритм.\nСтворити
програму.\nПротестувати програму.")

1
Знак # означає коментар до програми. Коментарі не опрацьовуються програмою.
10
Результати:
Розробити алгоритм.
Створити програму.
Протестувати програму.

Сукупність символів \t використовується для створення горизонтального


відступу (табуляції):

# Табуляція зліва
print("'\tStartOver'")

# Табуляція справа
print("'StartOver\t'")

# Табуляція по центру
print("'Start\tOver'")

Результати:
' StartOver'
'StartOver '
'Start Over'

Форматування виведення
Доцільно використовувати метод str.format як параметр функції print():

# без використання методу format


name = "Влад"
age = 19
print("Привіт,", name,". Тобі ",age,"років." )

# із використанням методу format


name = "Влад"
age = 19
print("Привіт, {}. Тобі {} років.".format(name, age))

Результати:
Привіт, Влад . Тобі 19 років.
Привіт, Влад. Тобі 19 років.

Фігурні дужки і символи всередині них замінюються об’єктами, переданими в


метод str.format().
x = 2
11
y = 3
print("x = {}, y = {}".format(x,y))

# для цілих чисел


print('{:d}'.format(42))
#визначення ширини виведення
print('{:4d}'.format(42))

# для дійсних чисел


print('{:f}'.format(3.141592653589793))

#визначення ширини виведення та кількості знаків після коми


print('{:06.2f}'.format(3.141592653589793))

Результати:
x = 2, y = 3
42
42
3.141593
003.14

2. Функція введення даних

У Python використовується функція input() для отримання користувацьких


даних. Наприклад:
country = input("Уведіть назву країни-> ")

Функція введення надає можливість представити користувачеві рядок-підказку


(у наведеному прикладі – " Уведіть назву країни -> "). Користувач має
можливість ввести назву і натиснути клавішу Enter. Далі введений текст
надається змінній country.

Функція input() передає змінній рядкове значення. Якщо програмою


передбачено опрацювання чисел, то необхідно перетворити введений рядок у
ціле чи дійсне число за допомогою функцій int() або float().
У цілі числа:

a = int(input(“Enter number a->”))


b = int(input(“Enter number b->”))
c = a + b
print('c=', c)

У дійсні числа:
12
a = float(input(“Enter number a->”))
b = float(input(“Enter number b->”))
c = a + b
print('c=', c)

3. Математичні функції мови Python. Модуль math.

Модуль math – надає широкі можливості для розв’язання математичних


задач. Його основними функціями та константами є:
math.acos(x) – арккосинус x. У радіанах.
math.asin(x) – арксинус x. У радіанах.
math.atan(x) – арктангенс x. У радіанах.
math.atan2(y, x) – арктангенс y/x. У радіанах. З урахуванням чверті, в якій
знаходиться точка (x, y).
math.cos(x) – косинус x (x задається у радіанах).
math.sin(x) – синус x (x задається у радіанах).
math.tan(x) – тангенс x (x задається у радіанах).
math.degrees(x) – конвертує радіани у градуси.
math.radians(x) – конвертує градуси у радіани.
math.fabs(x) – модуль x.
math.factorial(x) – факторіал числа x.
math.trunc(x) – усікє значення x до цілого.
math.exp(x) – ex.
math.fmod(x, y) – остаток від ділення x на y.
math.pi – pi = 3,1415926...
math.e – e = 2,718281...

Практичні завдання
Завдання 1. Відкрити вікно Редактора файлів (File → New File або
натиснути Ctrl + N). Наступні завдання виконати у цьому вікні. Набрати
такий код:

print("ЦДПУ ім. В. Винниченка")


print("Фізико-математичний ", "факультет")
a = "Інформатика"
print(a)
b = 6.9
print("b = ",b)

13
Проаналізувати отримані результати.
Завдання 2. У вікні браузера перейти до сторінки
http://courses.ischool.berkeley.edu/i90/f11/resources/chapter02/game_over2.py.
Скопіювати код програми Game Over - Version 2 у вікно Редактора файлів
(ім’я файла – game_over2.py). Також код програми можна отримати у файлі
game_over2.txt. Запустити програму на виконання. Проаналізувати
результат, звернути увагу на використання лапок.
Завдання 3. Розглянути програму знаходження суми 2-х чисел:

a = 1
b = 2
c = a + b
print('c=', c)

Розглянути другий варіант програми знаходження суми 2-х чисел:

a = input(“Enter number a->”)


b = input(“Enter number b->”)
c = a + b
print('c=', c)

Порівняти програмні коди, виправити логічну помилку у другому варіанті


програмного коду.

Завдання 4. У вікні браузера перейти до сторінки


http://courses.ischool.berkeley.edu/i90/f11/resources/chapter02/trust_fund_bad.p
y. Скопіювати код програми Trust Fund Buddy – Bad у вікно Редактора
файлів (ім’я файла – trust_fund_bad.py). Також код програми можна
отримати у файлі trust_fund_bad.txt. Запустити програму на виконання.
Проаналізувати результат, з’ясувати причину неправильної роботи
програми. Виправити логічні помилки, отримати правильний результат,
зберегти програму.
Завдання 5. Вибрати завдання відповідно до номера прізвища у журналі.
Знайти результат обчислення, якщо значення змінної вводиться з
клавіатури. При виведенні значення використати метод format.

11−2 / y + 4.1 11−x / y


5.1 . x + ; 5.4 . 7.1∗x + ;
12.4+ z 70− y
x 2 +2.2 x y
5.2 . −23.1∗z ; 5.5 . + ;
y−21.1 y−11.2 z +11.2
z y x + y∗z
5.3 . + ; 5.6 . x3 − ;
x−11.2 x+11.2 40+ y
14
7.1−x∗y
5.7 . −1.1∗x ;
10+ z
( 2 x +17.2 )∗y
5.8 . ¿ −2.4 ;
17.4+ z
x z−11.7
5.9 . + ;
y−112.5 x2
21+ x∗y
5.10 . +7∗z ;
100+ y 2
x +8 y z
5.11 . − ;
12.8−13.2∗y 5
100−x /8+5.5 2
5.12 . −z ;
10.2+ x
x∗z−7.5 z +11.7
5.13 . − ;
y−112.5 45
21.2+ x / y 2
5.14 . +y ;
100+ z
x+ 8.8∗y
5.15 .5∗x 2− .
40.2+ z

Завдання 6. Знайти в інтернеті відомості про призначення модуля math.


Набрати такий код:
import math
a = math.pow(5, 3)
b = 5 ** 3
print(a)
print(b)

Проаналізувати результати, зробити висновки.


Завдання 7. Набрати програмний код:

import math
value1 = 5
value2 = 25
value3 = 100
print(math.sqrt(value1))
print(math.sqrt(value2))
print(math.sqrt(value3))

Проаналізувати результати, зробити висновки.


Завдання 8. Набрати програмний код:

import math
print(math.e)
15
print(math.pi)
print(math.cos(math.pi))
print(math.sin(math.pi))

Проаналізувати результати, зробити висновки.


Завдання 9. Вибрати задачу відповідно до номера прізвища у журналі.
Написати алгоритм розв’язку задачі, реалізувати написаний алгоритм
мовою Python:
1. Дано сторони трикутника, обчислити його площу.
2. Дано висоту та радіус основи конуса, обчислити його об’єм.
3. Дано повну поверхню та радіус основи циліндра, обчислити його
висоту.
4. Дано сторони трикутника, обчислити його середню лінію.
5. Дано сторони трикутника, знайти одну із його висот.
6. Дано сторони ромба та кут між сторонами, знайти його площу.
7. Дано сторони та висоту трапеції, знайти її площу.
8. Дано висоту та сторону правильної чотирикутної піраміди, обчислити
її об’єм.
9. Дано висоту та сторону правильної трикутної призми, знайти її повну
поверхню.
10. Дано сторони прямокутника знайти його площу.
11. Дано сторони та висоту паралелограма, знайти його площу.
12. Дано радіус кола, знайти його довжину та площу.
13. Дано площу основи та висоту циліндра, знайти його повну поверхню.
14. Дано довжину кола, знайти його діаметр.
15. Дано сторони трикутника, знайти одну із його бісектрис.

Контрольні запитання
1. Який синтаксис функції виведення даних у мові Python?
2. Як використовуються параметри sep та end у функції виведення даних?
3. Як використовуються спеціальні символи \n та \t у функції виведення даних?
4. Яким є призначення методу str.format?
5. Який синтаксис функції виведення даних у мові Python?
6. Значення якого типу передає функція input() змінній? Які функції треба
використати, щоб увести в пам’ять комп’ютера ціле число? Дійсне число?
7. Які можливості використання надає модуль math? Як його підключити?

16
Тема №3. Умовні оператори
Мета: навчитися 1) будувати логічні вирази з використанням логічних
операторів; 2) використовувати оператори if, if-else, if-elif при розв’язанні
практичних завдань.
Теоретичні питання
План
1. Оператори порівняння і логічні оператори у Python.
2. Умовні оператори:
2.1.оператор if;
2.2.оператор if-else;
2.3.оператор if-elif.

1. Оператори порівняння і логічні оператори у Python

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

Таблиця 1.2. Оператори порівняння мови Python


Оператор Назва Приклад
== Дорівнює 5 == 5 – True
!= Не дорівнює 8 != 5 – True
> Більше 3 > 10 – False
< Менше 5 < 8 – True
>= Більше або дорівнює 5 >= 10 – False
<= Менше або дорівнює 5 <= 5 – True

Наприклад:
a = 13
b = 33

# a > b is False
print(a > b)

17
# a < b is True
print(a < b)

# a == b is False
print(a == b)

# a != b is True
print(a != b)

# a >= b is False
print(a >= b)

# a <= b is True
print(a <= b)

Результати:

False
True
False
True
False
True

Не рекомендується порівнювати дійсні числа:


>>> x = 1.1 + 2.2
>>> x == 3.3
False

Важливо! При перевірці на рівність розповсюдженою помилкою є


використання одного знака дорівнює (=) замість двох (==). Необхідно
пам’ятати, що знак = є оператором надання значення, а сукупність знаків == є
оператором порівняння.
Логічні оператори
Логічні оператори not, or, and об’єднують прості булеві вирази для створення
більш складних логічних умов. Інтерпретація логічних виразів, що містять
оператори not, or, and, наведена у табл. 1.3.
Таблиця 1.3. Логічні оператори мови Python
Оператор Значення Приклад

18
not завжди дає результат, протилежний not x
значенню операнда
or дає результат True тоді і тільки тоді, коли x or y
хоча б один операнд має значення True
and дає результат True тоді і тільки тоді, коли x and y
обидва операнди мають значення True

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


a = True
b = False

# Print a and b is False


print(a and b)

# Print a or b is True
print(a or b)

# Print not a is False


print(not a)

Результати:
False
True
False

2. Умовні оператори
2.1. Оператор if
Синтаксис умовного оператора if є таким:

if <умова>:
<оператор>

Де
<умова> – логічний вираз;
<оператор> – допустимий оператор Python, який має відступ.
Якщо <умова> має значення True, то виконується <оператор>. Якщо <умова>
має значення False, то <оператор> пропускається і не виконується.
Двокрапка (:) після <умова> є обов’язковою.
Наприклад:
# Використання оператора "if"
19
x = 0
y = 5
if x < y: # Істинно
print('yes')
if y < x: # Хибно
print('no')

Результат:
yes

Відступи та блоки
Припустимо, що необхідно виконати більше, ніж один оператор, якщо умова в
конструкції if є істинною. У таких випадках у більшості мов програмування
використовується синтаксичний засіб, що групує декілька операторів в один
складений оператор, або блок. Оператори, що входять до блоку, синтаксично
є єдиним цілим. Якщо <умова> в конструкції if є істинною, то всі оператори
блока виконуються. Якщо <умова> в конструкції if є хибною, то всі оператори
блока не виконуються.
У Python для визначення складених операторів використовуються відступи. У
програмі суміжні оператори, що мають відступ однакового рівня, є
операторами одного блоку. Складений оператор у конструкції if є таким:
if <умова>:
<оператор>
<оператор>
...
<оператор>
<наступний_оператор>

Приклад 1.1. Розробити програму, в якій визначається загальна вартість


деякого товару, якщо такий товар є в наявності.

# Уведення даних
price = 14.27
n = input('Уведіть кількість товару -> ')

if n!=0:
cost=n*price
print('Загальна вартість товару {:.2f}
грн'.format(cost))
print('Обчислено.')

20
# Оператор наступний після умовного
print('After conditional')

2.2. Оператор if-else

Припустимо, що при використанні конструкції if необхідно виконати деякі


оператори, якщо умова є істинною, а також альтернативні оператори, якщо
умова є хибною. У таких випадках використовують конструкцію if-else. Її
синтаксис є таким:
if <умова>:
<оператор(и)>
else:
<оператор(и)>

Якщо <умова> має значення True, то перший блок операторів виконується, а


другий пропускається. Якщо <умова> дорівнює False, то перший блок
операторів пропускається, а другий виконується. У будь-якому випадку далі
виконується оператор наступний після умовного. Обидва блоки операторів
визначені відступами.

Приклад 1.2. У магазині діє система знижок. Якщо вартість покупки не


перевищує 1000 грн., сума знижки становить 0,05%. У протилежному випадку –
0,1%. Розробити програму обчислення суми знижки та загальну суму до сплати
за введеною вартістю покупки.

# уведення даних
amount = float(input("Уведіть вартість покупки -> "))

# перевірка умови та обчислення знижки


if amount<1000:
discount = amount*0.05
print ("Знижка складає {:.2f} грн".format(discount))
else:
discount = amount*0.10
print ("Знижка складає {:.2f} грн".format(discount))

# обчислення суми до сплати


to_pay = amount-discount

# виведення результату
print ("До сплати {:.2f} грн".format(to_pay))
21
Результати:
Уведіть вартість покупки -> 830
Знижка складає 41.50 грн
До сплати 788.50 грн

Уведіть вартість покупки -> 1200


Знижка складає 120.00 грн
До сплати 1080.00 грн

2.3. Оператор if-elif


У Python також існує умовний оператор, що базується на виборі з декількох
альтернатив. У ньому використовуються одна чи декілька умов elif
(скорочено від else if). При виконанні програми почергово обчислюється
значення кожної умови і виконуються оператор(и), що відповідають умові, яка
першою набуває значення True. Якщо жодна з умов не є істинною, то
виконуються оператори після службового слова else (якщо воно вказане):

if <умова>:
<оператор(и)>
elif <умова>:
<оператор(и)>
elif <умова>:
<оператор(и)>
...
[else:
<оператор(и)>]

Приклад 1.3. Розробити програму переведення кількості набраних студентом


балів у буквену шкалу «A», «B», «C», «D», «Fх» або «F».
score = int(input('Уведіть кількість балів -> '))
if score >= 90 and score <=100:
letter = 'A'
print('Твій рівень - ', letter)
elif score >= 82 and score < 90:
letter = 'B'
print('Твій рівень - ', letter)
elif score >= 74 and score < 82:
letter = 'C'
print('Твій рівень - ', letter)
22
elif score >= 64 and score < 74:
letter = 'D'
print('Твій рівень - ', letter)
elif score >= 60 and score < 64:
letter = 'E'
print('Твій рівень - ', letter)
elif score >= 35 and score < 60:
letter = 'Fx'
print('Твій рівень - ', letter)
elif score >= 0 and score < 35:
letter = 'F'
print('Твій рівень - ', letter)
else:
print('Такого рівня не існує')
Результати:

Уведіть кількість балів -> 114


Такого рівня не існує
Уведіть кількість балів -> 68
Твій рівень - D
Уведіть кількість балів -> 95
Твій рівень - A

Практичні завдання
Завдання 1. Увести коди та протестувати програми з прикладів 1.1 – 1.3.
Завдання 2. Виконати у вікні Python Shell (Оболонка Python). Знайти
значення логічних виразів:

>>> 2 < 5
>>> 3 > 7
>>> x = 11
>>> x > 10
>>> 2 * x < x
>>> type(True)

Проаналізувати отримані результати.


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

23
a = int(input('Enter number a->'))
b = int(input('Enter number b->'))
if a>=b:
max=a
else:
max=b
print('max=', max)

Проаналізувати програмний код та отримані результати.


Завдання 4. Вибрати задачу відповідно до номера прізвища у журналі.
Написати алгоритм розв’язку задачі, реалізувати написаний алгоритм
мовою Python:
4.1. На площині дано дві точки (x1;y1) та (x2;y2). Визначити, яка з них
лежить далі від початку координат.
4.2. Визначити, чи є неспадною послідовність цілих чисел x, y, z.
4.3. Визначити, чи попадають значення цілих величин a, b, c у відрізок
[x;y], де x, y – цілі числа.
4.4. Дано значення цілих величин a, b, c. Визначити максимальне.
4.5. Дано значення цілих величин a, b, c. Визначити, чи є серед них хоча б
одне парне.
4.6. Для входу до деякого комп’ютерного середовища необхідно ввести
пароль. Розробити програму, в якій за введеним паролем визначається, чи
має користувач доступ до комп’ютерного середовища.
4.7. Час роботи працівника понад 40 годин на тиждень є понаднормовим та
оплачується в 1,5 рази від звичайної норми. Відомі час роботи працівника
за тиждень і регулярна погодинна оплата. Розробити програму, що
розраховує загальну оплату за тиждень, взявши до уваги понаднормову
роботу.
4.8. Дано початкові та кінцеві показники спожитої електроенергії. Вартість
1кВт·год електроенергії становить 0,9грн, якщо обсяг споживання не
перевищив 100 кВт·год. Для понаднормових витрат тариф становить
1,68 грн. Обчисліть кількість спожитої електроенергії за та поза нормою,
суму до сплати. 
4.9. Визначити вартість дзвінка по телефону. Ціна за хвилину розмови
2,30 грн. По суботам та неділям надається знижка 20%.
4.10. Підприємство набирає робітників у штат. Умова прийому потребує не
менше 5 років робочого стажу та вік не більше 40 років. Визначити, чи
підходить кандидатура по цим параметрам чи ні.

24
4.11. З'ясувати, чи знаходяться будинки з номерами n та m на одній стороні
вулиці (1 ≤ n, m ≤ 100).
4.12. Обчислити
2 x2
y=

x+ 5
4.13. Обчислити

2
y=¿ {cos x⋯якщо⋯0<x<2 ¿ ¿¿¿
4.14. Обчислити

y=¿ {1+√ cosx⋯якщо⋯x<−0.5 ¿ ¿¿¿


4.15. Обчислити

2
{
y=¿ x +5x−6⋯якщо⋯x≥0 ¿ ¿¿¿
Завдання 5. Вибрати задачу відповідно до номера прізвища у журналі.
Реалізувати її мовою Python з використання оператора elif:
5.1. Написати програму, в якій при введенні значення температури
води виводиться назва її стану.
5.2. Написати програму, в якій при введенні назви місяця виводиться
кількість днів у місяці.
5.3. Написати програму, в якій при введенні пори року виводяться
назви місяців, які належать до цієї пори.
5.4. Дано список дисциплін та номер семестру, коли вони вивчаються.
Написати програму, в якій при введенні номера семестру (не менше 4
семестрів) виводиться список дисциплін, що вивчаються.
5.5. Написати програму, в якій при введенні цифри виводиться
словесна назва цієї цифри.
5.6. Написати програму, в якій при введенні числа від 10 до 20
виводиться словесна назва цього числа.
5.7. Дано перелік континентів. Написати програму, в якій при
введенні назви континенту виводиться список країн (2-5 назв), що
розташовані на цьому континенті.
5.8. Написати програму, в якій за значенням змінної X, що позначає
деяку довжину в метрах, виводиться ця довжина в таких одиницях
вимірювання: дециметр, кілометр, метр, міліметр, сантиметр.

25
5.9. Написати програму, в якій при введенні часу доби виводиться
відповідне привітання.
5.10. Написати програму, в якій при введенні числа (40, 50, 60, 70, 80, 90,
100) виводиться відповідне число римськими цифрами.
5.11. Дано перелік категорій: оператор (+, -, *, =, <, >, /), знак пунктуації
(кома, крапка з комою, деяка дужка), цифра. Написати програму, в якій
при введенні категорії виводиться список елементів, що належать цій
категорії.
5.12. Написати програму, в якій при введенні номера місяця виводиться
його назва.
5.13. Розробити програму, яка за введеним значенням радіуса
пропонуватиме послуги в обчисленні: 1 – довжини кола, 2 – площі
круга, 3 – об’єму кулі, 4 – площі поверхні кулі.
5.14. Розробити програму, яка за введеним значенням сторони
пропонуватиме послуги в обчисленні: 1 – периметра квадрата, 2 –
площі квадрата, 3 – об’єму куба, 4 – площі поверхні куба.
5.15. Розробити програму, яка за введеними значеннями двох чисел
пропонуватиме послуги в обчисленні: 1 – суми, 2 – добутку, 3 – частки,
4 – середнього арифметичного, 5 – середнього геометричного.
Контрольні запитання
1. Яких значень можуть набувати змінні логічного (булевого) типу?
2. Які вирази називаються логічними? Наведіть приклади логічних виразів.
3. Для чого призначені логічні оператори? Наведіть приклади їх використання.
4. Що буде виведено на екран у результаті виконання операторів:
a = 6
b = 7
print(a == 6)
print(a == 7)
print(a == 6 and b == 7)
print(a == 7 and b == 7)
print(not a == 7 and b == 7)
print(a == 7 or b == 7)
print(a == 7 or b == 6)
print(not (a == 7 and b == 6))
print(not a == 7 and b == 6)
5. Наведіть синтаксис оператора if. Який принцип його роботи?
6. Що буде виведено на екран у результаті виконання програмного коду:
n = 0
26
if n > 0:
result = n // 3
print(result)
7. Наведіть синтаксис оператора if-esle. Який принцип його роботи?
8. Що буде виведено на екран у результаті виконання програмного коду:
n = 15
if n % 2 == 0:
print("число парне")
else:
print("число непарне")
9. Наведіть синтаксис оператора if-elif. Який принцип його роботи?
10.Що буде виведено на екран у результаті виконання програмного коду:
n=-1
if n == 0:
print("None")
elif n < 0:
print("Low")
else:
print("High")
11.Який оператор називається складеним? Як у Pyhon визначається складений
оператор?

Тема №4. Циклічні оператори


Мета: навчитися 1) використовувати функцію range() для організації циклу for;
2) використовувати цикл for при розв’язанні практичних завдань, у тому числі
для накопичення (акумуляції) даних; 3) використовувати цикл із передумовою
при розв’язанні практичних завдань, у тому числі для знаходження суми із
заданою точністю.
Теоретичні питання
План
1. Організація ціклу for.
2. Використання функції range() у циклах for.
3. Цикл for для накопичення даних.
4. Цикл із передумовою у Python.

1. Організація ціклу for

27
Цикли for є циклами з визначеною кількістю повторень (ітерацій).
У Python реалізовано підхід, що базується на послідовному опрацюванні
сукупності об’єктів, наприклад, рядка, списку або кортежу2.

Синтаксис циклу for є таким:

for <змінна> in <послідовність>:


<оператор(и)>

Де
<послідовність> – сукупність (колекція) об’єктів;
<оператор(и)> – допустимий оператор Python, який визначається відступом і
виконується один раз для кожного елемента в <послідовність>;
<змінна> – змінна циклу, яка набуває значення наступного елемента в
<послідовність> з кожною ітерацією циклу.

2. Використання функції range() у циклах for


Одним із способів організації циклу for є використання функції range() для
управління кількістю повторів циклу.
Функція range() генерує послідовність цілих чисел у заданому діапазоні.
Узагалі ця функція приймає три аргументи:
start: ціле число, з якого починається послідовність;
stop: ціле число, перед яким закінчується послідовність;
step: цілочислове значення, яке визначає різницю між числами у
послідовності.
Використаємо функцію з одним аргументом – range(stop):
for i in range(10):
print(i, end = " ")

Результат:
0 1 2 3 4 5 6 7 8 9

Використаємо функцію з двома аргументами – range(start, stop):

for i in range(14,20):
print(i, end = " ")

Результат:
14 15 16 17 18 19
2
Ці структури даних будуть розглянуті у розділі 3
28
Використаємо функцію з трьома аргументами – range(start, stop, step):
for i in range(0, 50, 5):
print(i, end = " ")

Результат:
0 5 10 15 20 25 30 35 40 45

Надамо аргументу step від’ємного значення:

for i in range(25, 2, -2):


print(i, end =" ")

Результат:

25 23 21 19 17 15 13 11 9 7 5 3

Аргументи функції range() не можуть бути дійсними числами:

for i in range(3.3):
print(i, end =" ")

Результат:
TypeError: 'float' object cannot be interpreted as an
integer

3. Цикл for для накопичення даних

Одним із загальних програмних шаблонів є шаблон опрацювання послідовності


даних для накопичення значень, наприклад, для обчислення підсумкової суми
або добутку, формування рядка за певною умовою тощо.
Послідовність дій накопичення даних у циклі:
 ініціалізація змінної-накопичувача початковим значенням, наприклад, 0
при накопиченні суми, '' (порожній рядок) при формуванні рядка;
 повторення – опрацювання елементів послідовності;
 оновлення змінної-накопичувача на кожній ітерації, тобто при
опрацюванні кожного елемента в послідовності.
Розглянемо програмний код, за допомогою якого обчислюється сума перших
десяти натуральних чисел:
# ініціалізація змінної-накопичувача значенням 0
sum = 0
29
# генерація перших десяти натуральних чисел
for i in range(1, 11):
# накопичення суми
sum += i

# виведення результату
print('sum =', total)

Результат:
sum = 55

Оператор sum+= i накопичення суми є еквівалентним оператору sum =


sum+i.

4. Цикл із передумовою у Python


У мові Python синтаксис циклу з передумовою є таким:

while <умова>:
<оператор(и)>

Де
<оператор(и)> – блок операторів, що повторно виконуються, так зване тіло
циклу; визначається відступом;
<умова> – логічний вираз, що містить одну або декілька змінних, які
ініціалізуються до початку циклу та змінюються в тілі циклу, так звані
параметри циклу. Оператори тіла циклу виконуються, якщо умова є істинною.
Коли умова набуває значення False, виконання програми переходить до
першого оператора після тіла циклу.
Приклад 1.4. Розробити програму обчислення суми із заданою точністю 
(>0). Необхідна точність досягнута, якщо додавання наступного доданка

змінює суму на величину меншу за . Сума задана формулою: ∑ 41i


i=1

# уведення точності
eps = float(input('Уведіть необхідну точність -> '))

# ініціалізація суми та ітераційної змінної


s = 0
i = 1

# обчислення першого доданку


add = 1/(4**i)
30
# цикл обчислення
while add >= eps:
s+= add
i+= 1
add= 1/(4**i)

# виведення результату
print('s= {:.6f}'.format(s))

Результати:

Уведіть необхідну точність -> 0.01


s= 0.328125
Уведіть необхідну точність -> 0.001
s= 0.332031
Уведіть необхідну точність -> 0.0001
s= 0.333252

Практичні завдання
Завдання 1. Увести код та протестувати програму з прикладу 1.4.
Завдання 2. За допомогою функції range() вивести на екран такі
послідовності чисел:
a) 0, 1, 2, 3, 4,
b) 5, 6, 7, 8, 9,
c) 1, 3, 5, 7, 9,
d) -2, -1, 0, 1, 2, 3, 4,
e) 100, 80, 60, 40, 20,

Проаналізувати отримані результати.


Завдання 3. Вибрати задачу відповідно до номера прізвища у журналі.
Розробити програму, що виводить на екран таблицю значень функції на
проміжку [1..10] з кроком 1, використовуючи цикл for та цикл із
передумовою. Порівняти створені програми.

3.1. y=√ 1+x 2 3.4. y=√|1−x|


y=
1
3.5. y=√ x 2 +4
3.2. √ 1+x 2 x
y=
3.3. y=√|x−10| 3.6. x+2

31
y=x 3 −x
3.7.
y= 2
1 3.12.
y=
√ |5−x|
2
1
3.8. x +1 y=
3.13. x4
3.9. y=√|5−x|+1
x−1
x y=
y= 3.14. х+1
2
3.10. x +1
3.15. y=√|x|−1
x−1
y= 2
3.11. x +1
Завдання 4. Вибрати задачу відповідно до номера прізвища у журналі.
Розробити відповідну програму (числа a, b задаються користувачем з
клавіатури):
4.1.Вивести цілі числа з проміжку [a,b] в прямому порядку та знайти їх суму.
4.2.Вивести цілі числа з проміжку [a,b] в зворотному порядку та знайти їх
суму.
4.3.Вивести цілі числа з проміжку [a,b] в прямому порядку, а також їх
значення піднесені до другого степеню.
4.4.Вивести цілі числа з проміжку [a,b] в прямому порядку, а також їх
значення збільшені на 0,2.
4.5.Вивести цілі числа з проміжку [a,b] в прямому порядку, а також їх
значення збільшені у 2 рази.
4.6.Вивести цілі числа з проміжку [a,b] з кроком 3 та знайти їх добуток.
4.7.Вивести цілі числа з проміжку [a,b] з кроком -3 та знайти їх добуток.
4.8.Вивести цілі числа з проміжку [a,b], а також їх значення піднесені до
третього степеню.
4.9.Вивести цілі числа з проміжку [a,b] в прямому порядку, а також їх
значення збільшені на 1,5.
4.10. Вивести цілі числа з проміжку [a,b] в прямому порядку, а також їх
значення збільшені у 5 разів.
4.11. Вивести цілі числа з проміжку [a,b] в прямому порядку, а також
значення квадратного кореня модуля суми з цих чисел.
4.12. Вивести цілі числа з проміжку [a,b] в прямому порядку та знайти їх
середнє арифметичне.
4.13. Вивести цілі числа з проміжку [a,b] в зворотному порядку та знайти
їх добуток.
4.14. Вивести цілі числа з проміжку [a,b] з кроком 3 та знайти їх середнє
арифметичне.
4.15. Вивести цілі числа з проміжку [a,b] з кроком 2 та знайти їх добуток.
32
Завдання 5. Вибрати задачу відповідно до номера прізвища у журналі. Розро-
бити програму, що виводить на екран таблицю значень функції на
проміжку [a,b] з кроком 1 (числа a, b задаються користувачем з клавіатури,
a<b):
e x +e− x
5.1. y=
2
x
5.2.

y= cos 2
2
e x +e− x
5.3. y=
ln 3
x x
5.4. | || |
y= cos + sin
2 2

5.5. y=3−4 sin 2 ( π2 −x)


3
5.6. y= (cos ( 60 °−x ) +cos (x−90 ° ))
2
|x|
5.7. y= −2 sin|x|
3
1−cos x
5.8. y=
√ 2
π π
5.9. y=4 sin( + x)sin( x− )
6 6
π
5.10. ( )
y=9 sin 5 x+ −4 cos (7 x +2)
3
5.11. y=2arctg ( x +1 )−cos 35 °
π
5.12. y=2cos ( −3 x )−√ 2
4
5.13. y=4 cos 2 (4 x )cos (8 x)

5.14. y=sin| x|+|sin x|

1 π
5.15. y= sin( −x )
3 2
Завдання 6. Вибрати задачу відповідно до номера прізвища у журналі.
Вивести таблицю значень функції на вказаному проміжку із заданим
кроком. Написати алгоритм розв’язку задачі, реалізувати його мовою
Python (виконати завдання, використовуючи цикли із передумовою):
x+cos 2 x
y=
6.1. 3x , 2,3≤x≤10 ,3 , Δx=0,8
tg 0,5 x
y=
6.2. x 3 +7,5 , 0,1≤x≤1,2 , Δx=0,1

33
e 2 x +3
y=
6.3. x+1 , 0,8≤ x≤9,8 , Δx=0,9
x+sin 3 x
y=
6.4. x+2 , 0,2≤x≤8,2, Δx=0,8
2
x +2 x
y=
6.5. 3 cos x+1 , 0,1≤x≤4,1 , Δx=0,4
x+sin 2 x
y= 2
6.6. x −3 , 2,4≤x≤6,4 , Δx=0,4
x 3−2
y=
6.7. 3 ln x , 4,5≤x≤26 , 5 , Δx=2,2
2,3 x+8
y=
6.8. |2cos x|+1 , 0,1≤x≤11 ,1 , Δx=1,1
5 tg( x +7 )
y=
6.9. ( x+3 )2 , 2,5≤x≤11,3, Δx=0,8
1,5 x−ln 2 x
y=
6.10. 3 x+1 , 2,5≤x≤9,7 , Δx=0,8
2,5 x 3
y=
6.11. e 2 x +2 , 0,1≤x≤0,9 , Δx=0,1
3 x−2
y=
6.12. 2 arctgx+1 , 3,2≤x≤7,6, Δx=0,4
2
(3 x +2 )
y=
6.13. sin 2 x+3 , 4,8≤x≤8,8, Δx=0,4
tg2 x−3 x
y=
6.14. x+3 , 0,2≤x≤2,4 , Δx=0,2
( x +2)2
y=
6.15. √ x 2 +1 , 2,4≤x≤9 , Δx=0,6
Завдання 7. Під час обчислення результатів деяких експериментів виникає
потреба отримання результату із заданою точністю. Нехай результатом є
нескінченна сума, що задається певною формулою, і відома точність  для
знаходження наближеного значення результату. Вважатимемо, що
необхідна точність досягнена, якщо додавання наступного доданка змінює
суму на величину, меншу за . Вибрати задачу відповідно до номера
прізвища у журналі. Обчислити:
∞ ∞
1 n+ 1
7 .1 . ∑ 2
7.3 . ∑ n
n=2 n +n−2 n=1 ( n+ 2 ) ∙ 2
∞ ∞
1 1
7.2 . ∑ n 7.4 . ∑ 2
n =1 3 +3 n n=1 4 n + 4 n+5

34
∞ ∞
2n 3 n−2
7.5 . ∑ 4 7.10 . ∑
n=1 n +4 n=1 n (n+1)(n+2)
∞ ∞
14 1
7.6 . ∑ 2
7.11 . ∑ 2
n=1 49 n −42n−40 n=1 9 n + 3 n−20
∞ ∞
3 n−1 8 n−10
7.7 . ∑ 7.12 . ∑
n=2 n(n2−1) n=3 (n−1)(n+1)(n−2)

3

9 7.13 . ∑ 2
7.8 . ∑ 2 n=1 9 n −3 n−2
n=1 9 n +21 n−8 ∞
1
7.14 . ∑

4 n−2 n=2 n(n2 −1)
7.9 . ∑ 2 ∞
n=3 (n −1)(n−2) 1
7.15 . ∑
n=1 √n
Контрольні запитання
1. Чим циклічні оператори відрізняються від послідовних та умовних
операторів?
2. У яких випадках можна використовувати цикл for?
3. Яке призначення функції range()? Скільки параметрів має функція range()?
Чи всі вони обов’язкові?
4. Які послідовності чисел будуть згенеровані, якщо функція range() має такі
параметри:
a) range()
b) range(8)
c) range(0, 3)
d) range(12, 16)
e) range(0,15,3)
f) range(5,0,-1)
g) range(5,0,1)
5. Наведіть синтаксис циклу із for у Python.
6. Що буде надруковано в результаті виконання програмного коду:
p = 1
for i in range(10, 30, 10):
p *= i
print('p =', p)
7. Яким повинно бути значення умови циклу, щоб виконувалися оператори
тіла циклу із передумовою?
8. Які змінні називаються параметрами циклу?
9. Наведіть синтаксис циклу із передумовою у Python.
10.Що буде надруковано в результаті виконання програмного коду:
n = 6
35
while n > 0:
n -= 3
print(n, end = ' ')
11. Чи можна перетворити будь-який цикл for у цикл while?

Розділ ІІ. Функції користувача та структури даних


Тема №5. Функції користувача
Мета: навчитися створювати та використовувати власні функції.
Теоретичні питання
План
1. Поняття функції користувача у Python.
2. Область видимості та час життя змінних.

1. Поняття функції користувача у Python


Типи функцій:
 вбудовані (print(), input(), int() тощо)
 створені користувачем.
Функція – це блок програмного коду, призначений для виконання
певних задач і який може бути використаний повторно. Функції
розбивають програму на невеликі фрагменти, роблять програму більш
організованою та більш керованою.
Синтаксис:
def function_name (parameters ):
["function_docstring"]
statements, i.e. the function body
return [expression]

Компоненти функції користувача:


1. Ключеве слово def визначає початок заголовка функції.
2. Ім’я функції для однозначної її ідентифікації.
3. Параметри (аргументи), через які передаються дані до функції (не є
обов’язковими).
4. Двокрапка (:)визначає кінець заголовка функції.
5. Додатковий рядок документації (docstring), щоб описати, що робить
функція.
6. Один чи декілька операторів Python, що складають тіло функції.
Оператори повинні мати однаковий рівень відступів.
7. Необов’язковий оператор return для повернення значення з функції.

36
Розглянемо функцію square(x), яка підносить число x до другого
степеню. Функція square(x) приймає одне число як параметр і
повертає квадрат цього числа як результат. Діаграма роботи функції
показана на рисунку 2.1:

Рис. 2.1. Діаграма роботи функції square

Програмний код є таким:


def square(x):
y = x * x
return y

Для виклику функції необхідно набрати її ім’я в тексті програми з


відповідними параметрами:

result=square(10)
print(result)

або
print(square(10))

Приклад 2.1. Створити функцію sum_of_integer(n), яка повертає


суму всіх цілих чисел до n включно. Використати формулу (n * (n +
1)) / 2.

# опис функції
def sum_of_integer(n):
result = (n * (n + 1)) / 2
return result

# виклик функції для деяких аргументів


print(sum_of_integer(0))
print(sum_of_integer(10))
print(sum_of_integer(5))

Результати:
0.0
55.0
15.0
37
2. Область видимості та час життя змінних

Область видимості змінної – це частина програми, в якій


розпізнається змінна. Усі параметри, оголошені всередині функції,
називаються локальними (є невидимими зовні функції). Мета локалізації
– надати доступ лише до тих даних, які потрібні для формулювання
задачі, що розв’язує функція. Параметри, оголошені в зовнішніх
програмних блоках, називаються глобальними. Якщо глобальне і
локальне ім’я збігаються, то локальне перекриває глобальне і робить його
недоступним у підпрограмі. Цей ефект демонструє наступний
програмний код:

def my_func():
x = 10
print("Змінна всередині функції -> ",x)

x = 20
my_func()
print("Змінна поза функцією -> ",x)

Output

Змінна всередині функції -> 10


Змінна поза функцією -> 20

Час життя змінної – це часовий інтервал виконання програми, на


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

Практичні завдання
Завдання 1. Вибрати задачу відповідно до номера прізвища у журналі.
Написати функцію і програму для розв’язку задачі (не використовувати
вбудовані функції min, max):
min ( x , z ) +min ⁡( x+ y , y + z)
1.1.Дано дійсні числа x, y, та z. Обчислити: u=
min ⁡( y , z )

38
1.2.За даними дійсними числами a, b обчислити: u=f ( 0.5 , a ) + f ( a+b , a−b ) ,

де
x 2 + xy− y2 x− y
f ( x , y )= + 2 2 .
1+ x + y x + y +2
p ( a ) + p ( b ) + p ( c ) + p (d )
1.3.Дано дійсні числа a, b, c, d. Обчислити: y= , де
4

p ( x ) =4 x 4 + 3 x 3 +2 x2 + x +0,5.
1.4.Дано три довільні числа. Перевірити, чи можна побудувати трикутник з
такими довжинами сторін. Скласти програму, в якій використовується
функція для виконання перевірки. Функція повинна повертати значення
True або False.
1.5.Дано дійсні числа u та v. Визначити значення:
z=f (u , v )+ f ( u+ v , uv ) +f ( u2 , v 2 ) + f ( 0.1, 0.1 ) , де
x+ y x y
f ( x , y )= + + .
x + xy + y 1+ y 1+ x 2
2 2 2

1.6.Дано дійсні значення a та b. Обчислити: u=f ( 1.7 , a ) + f ( b , a ) +f ( a+ b , b−a ) ,


x 2 + xy− y2
де f ( x , y ) = .
1+ x2 + y 2
1.7.Написати функцію, яка за заданою стороною квадрата визначає його
периметр та діагональ.
1.8.Написати функцію обчислення факторіалу натурального числа n
(добуток всіх чисел від 1 до n).
1.9.Дано дійсні числа х і у. Обчислити: z=f ( y ,−2 x , x+ y −1.17 ) + f ( 2.2, y , x 2− y2 ) ,
2 a−b−sin c
де f ( a ,b ,c ) =
5+ ¿ c∨¿ ¿

1.10. Дано дійсні числа х і у. Обчислити:


z=g ( 1.2 , x ) + g ( y , x )−g ( 2 x−1 , xy ) ,
де
a2 +b2
g ( a , b )= .
a 2+2 ab+ 3 b2 +4
1.11. Написати функцію, яка за заданими сторонами прямокутника
визначає його периметр та площу.
max ( x , y )+ max( x + y , xz )
1.12. Дано дійсні числа x, y, та z. Обчислити: u=
max 2 (0.5 , x + z)

39
1.13. Дано дві трійки чисел a1, b1, c1, та a2, b2, c2. Обчислити вирази
max ( a1 , b 1 , c 1 ) + max ( a2 , b2 , c 2 )
S=
2
1.14. Дано дві трійки чисел a1, b1, c1, та a2, b2, c2. Обчислити вираз
d= min ( a1 , b 1 , c 1 ) +min ( a2 ,b 2 , c 2 )
√ .

1.15. Дано дійсні числа a,b, c. Обчислити:


max (a , a+b)+max (a , b+ c)
u= .
1+max( a+bc ,b−c , 25)

Завдання 2. Вибрати задачу відповідно до номера прізвища у журналі.


Обчислити значення функції з точністью |ɛ|<10-4, використовуючи ряди:

( ln 2)n n
2. 1. f ( x ) =2x =∑ x , x∈R.
n=0 n!

1 1
2.2 . f ( x ) = = (−2)n x 2 n ,∨x∨¿
2 ∑
.
1+2 x n=0 √2

3 (−1 )n (4 n−26n ) 2 n+1
2.3 . f ( x )=sin3 2 x= ∑ x ,x ∈R.
2 n=0 (2n+ 1)!

( x+2)n
2.4 . f ( x )=e x =e−2 ∑ , x∈ R.
n=0 n!

4 1
2.5 . f ( x )=√ e=∑ .
n
n=0 4 n!

x
2.6 . f ( x )=cos =∑ (−1)n ¿ ¿ ¿
2 n=0

x 2n +1
2.7 . f ( x )=sh(x )=∑ , x∈R.
n=0 (2 n+1)!

x n+1 n
2.8 . f ( x )=x ∙ cos √ x=∑ (−1) n x , x∈¿.
n=0 (2 n)!

x2 n
2.9 . f ( x )=ch(x )=∑ ,x∈ R.
n=0 (2n) !

2 n +1 (x−π )2 n
2.10 . f ( x )=sin x=∑ (−1) , x∈R.
n=1 (2 n)!

(ln 2)n
2.11 . f ( x )=2 x+1=∑ 4 ( x−1)n , x ∈ R .
n=0 n!

( 2n ) !
2.12 . f ( x ) =arcsin ( x )=∑ n 2
x 2 n+ 1 ,|x|<1.
n=0 4 ( n ! ) (2 n+1 )

n−1 (x)2 n−1
2.13 . f ( x )=sin x=∑ (−1) , x∈R.
n=1 (2 n−1)!

22 n−1 ∙ x 2n
2.14 . f ( x )=cos 2 x=1+ ∑ (−1)n ,x ∈R.
n=1 (2n) !

40

32 n ∙ x 2 n+1
2.15 . f ( x )=x cos 3 x=x + ∑ (−1)n , x∈R.
n=1 (2 n)!

Контрольні запитання
1. Що називають функцією користувача у Python? Для чого вони
використовуються?
2. Наведіть синтаксис функції користувача. Яке призначення її компонентів?
3. Яким чином відбувається виклик функції користувача?
4. Що називають областю видимості змінної?
5. Які аргументи називаються локальними? У чому полягає мета локалізації?
6. Які аргументи називаються глобальними?
7. Що називають часом життя змінної? Скільки триває час життя локальної
змінної?
8. Що буде виведено на екран у результаті виконання операторів:

x = 1
def f1():
y = x + 2
print(y)

f1()
print(x)

Тема №6. Кортежі. Списки


Мета: навчитися створювати і опрацьовувати кортежі та списки.
Теоретичні питання
План
1. Кортежі та операції над ними.
2. Списки та операції над ними.

1. Кортежі та операції над ними

Кортеж – це індексована послідовність значень, що не змінюється у


процесі роботи програми. Записується у круглих дужках.
Створення кортежу:

# порожній кортеж
a = ()
# кортеж з одного елемента

41
b = ("one",)
# кортеж з двох елементів
c = ("one", "two")

Визначення довжини кортежу відбувається за допомогою функції


len():

print(len(a))
print(len(b))
print(len(c))

Результати:
0
1
2

Доступ до окремого елемента кортежу відбувається за його індексом:

t = ('cat', 'dog', 'mouse')


print(t[0])

Результат:
cat

Заміна значення елемента кортежу в процесі виконання програми є


неможливою:

t[0] = 'lion'
Results
TypeError: 'tuple' object does not support item assignment

Додавання та множення кортежів за допомогою операторів (+) та (*):

checks = (10, 20, 30)

# додавання двох кортежів


more = checks + checks
print(more)

42
# множення двох кортежів
total = checks * 3
print(total)

Результати:

(10, 20, 30, 10, 20, 30)


(10, 20, 30, 10, 20, 30, 10, 20, 30)

Знаходження максимального та мінімального елементів кортежу за


допомогою функцій max() і min()

# для кортежу з числовими елементами


numbers = (1000, 2000, 500, 4000)
print(max(numbers))
print(min(numbers))
print()

# для кортежу з рядковими елементами


friends = ("sandy", "michael", "aaron", "stacy")
print(max(friends))
print(min(friends))

Результати:

4000
500

stacy
aaron

Знаходження суми елементів кортежу за допомогою функції sum()

# для кортежу з числовими елементами


numbers = (1000, 2000, 500, 4000)
print(sum(numbers))

Результат:
7500

43
Перевірка приналежності за допомогою оператора in

pair = ("dog", "cat")

# перевірка приналежності
if "cat" in pair:
print("Cat found")

# перевірка приналежності
if "bird" not in pair:
print("Bird not found")

Результати:

Cat found
Bird not found

Використання методу index() для визначення індексу елемента

items = ("cat", "dog", "bird")

# отримання індексу елемента зі значенням "dog"


i = items.index("dog")
print(i, items[i])

Результат:
1 dog

Використання методу count() для підрахунку кількості входжень


елемента
values = (1, 2, 2, 3, 3, 3)

# підрахунок кількості елементів із заданим значенням


print(values.count(1))
print(values.count(3))
print(values.count(100))

Результати:
1
44
3
0

2. Списки та операції над ними


Список – це індексована послідовність значень, що змінюється у
процесі роботи програми. Записується у квадратних дужках. Може
містити вкладені списки.
Створення списків:
переліченням елементів:
s = [15, 16, 17, 18, 19]
l = ['s', 'p', ['isok'], 2]

за допомогою методу append()


Python program that uses append
lst = []
lst.append(1)
lst.append(2)
lst.append(6)
lst.append(3)

print(lst)

Результати:

[1, 2, 6, 3]

Вставка елемента за допомогою методу insert()

lst = ["World", " Web"]

# вставка для індекса 1.


lst.insert(1, " Wide")
print(lst)

Результати:

['World', 'Wide', 'Web']

45
Дописування списку до заданого списку за допомого методу
extend()

a = [1, 2, 3]
b = [4, 5, 6]

# додавання всіх елементів списку b до списку a


a.extend(b)
print(a)

Результат:

[1, 2, 3, 4, 5, 6]

Такі оператори як:


 приналежність in
 додавання +
 множення *
 звернення до i-го елемента за індексом s[i]
функції:
 визначення довжини len()
 визначення мінімального елемента min()
 визначення максимального елемента max()
 визначення суми елементів (для числових послідовностей) sum()
є загальними для списків та кортежів.

Сортування та обернення списку за допомогою методів sort() та


reverse()

lst = [400, 500, 100, 2000]

# обернення
lst.reverse()
print(lst)

# сортування
lst.sort()
print(lst)

# сортування та обернення
lst.reverse()
46
print(lst)

Результати:

[2000, 100, 500, 400]


[100, 400, 500, 2000]
[2000, 500, 400, 100]

Виключення повторів за допомогою методу remove() та видалення


елементів за допомогою оператора del

names = ["Tommy", "Bill", "Janet", "Bill", "Stacy"]

# видалення першого входження елемента зі значенням "Bill"


names.remove("Bill")
print(names)

# видалення всіх елементів, крім перших двох


del names[2:]
print(names)

# видалення всіх елементів, крім останнього


del names[:1]
print(names)

Результати:

['Tommy', 'Janet', 'Bill', 'Stacy']


['Tommy', 'Janet']
['Janet']

Використання методу count() для підрахунку кількості входжень


елемента
letters = ['a', 'a', 'b', 'c', 'a']

# Count the letter a.


n = letters.count('a')
print(n)

Результат:
47
3

Поелементне виведення списку на екран за допомогою циклу for


elements = ["spider", "moth", "butterfly", "lizard"]

for element in elements:


print(element)

Результат:
spider
moth
butterfly
lizard

Практичні завдання
Завдання 1. Вибрати предметну область для елементів кортежу відповідно до
номера прізвища в журналі. Створити кортеж, що містить не менше 10
елементів, деякі значення елементів повторюються. Вивести на екран
створений кортеж та значення його довжини. Предметна область:
1.1. числа;
1.2. одиниці вимірювання довжини;
1.3. одиниці вимірювання маси;
1.4. жіночі імена;
1.5. чоловічі імена;
1.6. назви кольорів;
1.7. назви мов програмування;
1.8. марки автомобілів;
1.9. назви світових валют;
1.10. назви країн;
1.11. назви міст;
1.12. назви предметів меблів;
1.13. назви професій;
1.14. види спорту;
1.15. родинні зв'язки.
Завдання 2. Вивести на екран значення k-го елемента кортежу (k задається з
клавіатури).

48
Завдання 3. Створити кортеж, що містить 3 елемента. Додати його до
створеного раніше. В отриманому кортежі знайти максимальний та
мінімальний елементи.
Завдання 4. Деяке значення задається з клавіатури. Знайти та вивести:
a) чи є таке значення серед елементів кортежу;
b) індекс елемента із заданим значенням за допомогою методу index;
c) кількість елементів із заданим значенням за допомогою методу count.
Завдання 5. За допомогою функції list() перетворити кортеж на список.
Отриманий список вивести на екран.
Завдання 6. Створити список, що містить не менше 7 елементів, деякі
значення елементів повторюються. Вибрати предметну область для
елементів списку відповідно до номера прізвища в журналі
6.1. назви тварин;
6.2. назви рослин;
6.3. назви фруктів;
6.4. назви навчальних дисциплін;
6.5. назви канцелярського приладдя;
6.6. марки мобільних телефонів;
6.7. назви футбольних клубів;
6.8. назви торговельних марок;
6.9. назви музичних інструментів;
6.10. назви космічних об’єктів;
6.11. назви предметів одягу;
6.12. назви річок;
6.13. назви рептилій;
6.14. назви корисних копалин;
6.15. прізвища письменників.
Завдання 7. За допомогою методу append() додати до списку 3 елемента.
Отриманий список та його довжину вивести на екран.
Завдання 8. За допомогою методу insert() вставити у список 1 елемент. Індекс
і значення елемента задаються з клавіатури. Отриманий список та його
довжину вивести на екран.
Завдання 9. Створити список, що містить 3 елемента. За допомогою методу
extend дописати його до створеного раніше. Отриманий список та його
довжину вивести на екран. В отриманому списку знайти максимальний та
мінімальний елементи.
Завдання 10. Деяке значення задається з клавіатури. Знайти та вивести на
екран отриманий результат:
a) чи є таке значення серед елементів списку;
49
b) кількість елементів із заданим значенням за допомогою методу count();
c) індекс елемента із заданим значенням за допомогою методу index().
Завдання 11. За допомогою методів sort() та reverse() відсортувати список від
найменшого значення до найбільшого і навпаки. Отримані результати
вивести на екран.
Завдання 12. Деяке значення задається з клавіатури. За допомогою методу
remove() видалити перше входження елемента із вказаним значенням.
Отриманий список та його довжину вивести на екран.
Завдання 13. За допомогою оператора del видалити:
a) перші два елементи списку, отриманий список та його довжину вивести
на екран;
b) останні два елементи списку, отриманий список та його довжину вивести
на екран;
c) усі елементи, що мають непарні індекси, отриманий список та його
довжину вивести на екран.
Завдання 14. Відновити список. За допомогою циклу for вивести список на
екран поелементно.
Завдання 15. Прибрати зі списку усі дублі елементів. За допомогою функції
tuple() перетворити список на кортеж. Отриманий кортеж вивести на екран.

Контрольні запитання
1. Яка структура даних називається кортежем? Яким видом дужок вона
визначається?
2. Як здійснити доступ до окремого елемента кортежу?
3. За допомогою яких операторів можна здійснити додавання та множення
кортежів?
4. Яка структура даних називається списком? Яким видом дужок вона
визначається?
5. Які є способи створення списків? Яке призначення методу append()?
6. Яке призначення методу insert()?
7. Яке призначення методу extend()? Чим він відрізняється від append()?
8. Яке призначення методів sort() та reverse()?
9. Яке призначення методів remove() та del? Що вони мають спільного та
відмінного?
10.Як визначити довжину кортежу або списку?
11.Як знайти мінімальне і максимальне значення кортежу або списку?
12.Як з’ясувати, чи міститься заданий елемент у кортежі або списку?
13.Яке призначення методів index() та count()?
14.Що є спільного і відмінного між кортежем та списком? Чи можливе їх
взаємне перетворення?

50
15.У змінній letters міститься список ['a', 'b', 'c', 'd']. Яке значення виразу
letters[int('3' * 2) // 11]?
16.У змінній letters міститься список ['a', 'b', 'c', 'd']. Яке
значення виразу letters[-1]?
17.У змінній letters міститься список ['a', 'b', 'c', 'd']. Яке
значення виразу letters[:2]?
18.У змінній letters міститься список [2, 4, 6, 8, 10]. Як присвоїти
значення 'zero' в якості третього елемента даного списку?
19.У змінній metering міститься список [3.14, 'inch', 2.54, 'inch',
True]. Яке значення виразу metering.index('inch')?
20.Як буде виглядати список, який зберігається у змінній metering = [3.14,
'inch', 2.54, 'inch', True], після виконання команди
metering.append(99)?
21.Як буде виглядати список, який зберігається у змінній metering = [3.14,
'inch', 2.54, 'inch', True], після виконання команди
metering.remove('inch')?
22.В чому різниця між функціями append() та insert(), передбаченими для
списків?
23.Як створити кортеж, який міститиме єдине значення у вигляді цілого
числа 24?

Тема №7. Списки Python з числовими елементами.


Модуль random.
Мета: навчитися 1) створювати та опрацьовувати списки, елементами яких є
цілі числа; 2) використовувати функції модуля random для заповнення списків
випадковими числами.
Теоретичні питання
План
1. Базові операції обробки списків з числовими елементами. Автоматичне
створення списків.
2. Модуль random. Заповнення списків випадковими цілими числами.
3. Заміна та перестановка елементів списку.

1. Базові операції обробки списків з числовими елементами. Автоматичне


створення списків

Базові операції обробки списків з числовими елементами:


 пошук максимального або мінімального елемента;
 обчислення узагальнювальних характеристик (сум елементів, їх
добутків);
 пошук заданого елемента;
51
 заміна, перестановка елементів або обмін значеннями між елементами
списку;
 вставка та видалення елемента.

Автоматичне створення списків з числовими елементами

# 1 варіант – множення списку з одного елемента на число


n = 5
l = [0] * n
print(l)

# 2 варіант – використання методу append()


l = []
for i in range(5):
l.append(1)
print(l)

# 3 варіант – використання функції range()


l = list(range(5))
print(l)

# 4 варіант – більш просунутий спосіб створення списку


l = [0 for i in range(5)]
print(l)

# 5 варіант – з використанням формули


l = [i*2 for i in range(5)]
print(l)

# 6 варіант – з використанням формули та умови


l = [2*i for i in range(10) if i > 5]
print(l)

l_odd = [i for i in range(20) if i % 2 == 1]


print(l_odd)

Результати:

[0, 0, 0, 0, 0]
[1, 1, 1, 1, 1]
[0, 1, 2, 3, 4]
52
[0, 0, 0, 0, 0]
[0, 2, 4, 6, 8]
[12, 14, 16, 18]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

2. Модуль random. Заповнення списків випадковими цілими числами

Модуль random реалізує генерацію псевдовипадкових чисел для


різних розподілів. Для цілих чисел існує рівномірний вибір з діапазону.
До послідовностей (списків, кортежів) можна застосувати рівномірний
вибір випадкового елемента, до списків – функцію для генерування
випадкової перестановки.
Для підключення модуля в програмному коді необхідно набрати
оператор import random.

Розглянемо деякі функції модуль random:

import random

# генерація дійсного числа в діапазоні від 0 до 1:


x = random.random()
print(x)

# генерація цілого числа в діапазоні від 0 до 50:


x = random.randint(0,50)
print(x)

# генерація цілого числа в діапазоні від -10 до 10:


x = random.randint(0,50)
print(x)

Результати:

0.06916083822830588
8
45

Тепер розглянемо можливість створення списку з 10 випадкових


цілочислових елементів, значення яких знаходиться в діапазоні від -10 до
10:

53
import random
l = []
for i in range(10):
l.append(random.randint(-10,10))
print(l)

або
l = [random.randint(-10,10) for i in range(10)]
print(l)

Результат:

[-7, -3, -9, -9, 1, 4, -5, 0, -8, -7]

3. Заміна та перестановка елементів списку

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

enumerate(iterable[, start=0])
де
iterable - послідовність, ітератор або об’єкти, що підтримують ітерацію
start (необов'язковий аргумент) – лічильник починає нумерацію з цього числа
(за замовченням – 0 ).
Наприклад:
fruits = ['apple', 'banana', 'grapes', 'pear']

# застосування функції enumerate() до списку


enumerate_fruits = enumerate(fruits)

# виведення типу результату на екран


print(type(enumerate_fruits))

# перетворення на список
print(list(enumerate_fruits))

# зміна початкового значення нумератора


enumerate_fruits = enumerate(fruits, 10)
print(list(enumerate_fruits))
54
# поелементне опрацювання пронумерованого об’єкта
for i, value in enumerate(fruits):
print(i, value)

Результати:
<class 'enumerate'>
[(0, 'apple'), (1, 'banana'), (2, 'grapes'), (3, 'pear')]
[(10, 'apple'), (11, 'banana'), (12, 'grapes'), (13,
'pear')]
0 apple
1 banana
2 grapes
3 pear

Знаходження та заміна елемента списку


За допомогою функції enumerate() можна змінювати значення
елементів списку:
for i, value in enumerate(fruits):
if value=='pear':
fruits [i]='plum'

print(fruits)

Результати:

['apple', 'banana', 'grapes', 'plum']

Перестановка елементів або обмін значеннями між елементами


списку
Перестановку двох елементів списку можна здійснити з
використанням тимчасової (temporary) змінної для зберігання значення
одного з елементів. Процес перестановки відбувається так, як показано на
рисунку 2.2:

55
Рис. 2.2. Процес перестановки двох елементів списку з
використанням тимчасової змінної

Програмний код є таким:

l = [36, 81, 20, -68, 6, -6, 88, 83, 45, -62]


print(l)

# перестановка 2-го та 8-го елементів


temp = l[2]
l[2] = l[8]
l[8] = temp

# виведення списку зі здійсненним обміном


print(l)

Результат:

[36, 81, 20, -68, 6, -6, 88, 83, 45, -62]


[36, 81, 45, -68, 6, -6, 88, 83, 20, -62]

Python надає можливість переставити два елементи списку без


використання тимчасової змінної:

l = [36, 81, 20, -68, 6, -6, 88, 83, 45, -62]


print(l)

# перестановка 2-го та 8-го елементів


l[2], l[8] = l[8], l[2]

# виведення списку зі здійсненним обміном


print(l)
56
Результат:

[36, 81, 20, -68, 6, -6, 88, 83, 45, -62]


[36, 81, 45, -68, 6, -6, 88, 83, 20, -62]

Якщо індекси елементів невідомі, то можна скористатися методом

l = [36, 81, 20, -68, 6, -6, 88, 83, 45, -62]


print(l)

# знаходження індексів елементів зі значеннями 20 та 45


i, j = l.index(20), l.index(45)

# перестановка елементів
l[i], l[j] = l[j], l[i]

# виведення списку зі здійсненним обміном


print(l)

Результат:

[36, 81, 20, -68, 6, -6, 88, 83, 45, -62]


[36, 81, 45, -68, 6, -6, 88, 83, 20, -62]

Практичні завдання
Завдання 1. Написати функцію для заповнення списку випадковими цілими
числами. Функція повинна приймати три аргументи – довжину списку та
межі діапазону, в якому генерується випадкове число. Функція повинна
повертати готовий список в основну програму.
Завдання 2. Для створеного списку (вибрати задачу відповідно до номера
прізвища у журналі, розв’язати задачу мовою Python):
2.1. Визначити середнє арифметичне всіх елементів списку та відхилення від
середнього значення.
2.2. Створити два нових списки, що містять окремо додатні та окремо
від’ємні елементи заданого списку.
2.3. Визначити кількість елементів, значення яких більше за середнє
арифметичне всіх елементів списку.
2.4. Знайти суму всіх додатних елементів.

57
2.5. Визначити скільки разів максимальний елемент зустрічається в
заданому списку.
2.6. Визначити яких елементів більше – максимальних чи мінімальних.
2.7. «Стиснути» список, вилучивши з нього всі від’ємні елементи.
2.8. Створити новий список, в якому спочатку розташовані всі додатні
елементи заданого списку, далі – всі від’ємні елементи заданого списку.
2.9. Створити два нових списки, що містять окремо елементи заданого
списку з парними індексами та окремо елементи заданого списку з
непарними індексами.
2.10. Розділити список на два нові так, щоб у першому опинилися парні
елементи, а в другому – непарні.
2.11. Знайти добуток всіх від’ємних елементів.
2.12. Знайти суму елементів з парними номерами.
2.13. Знайти суму всіх елементів, значення яких не більше за задане число n.
2.14. Створити новий список, що містить тільки ті елементи заданого
списку, які діляться націло на 5 і на 7.
2.15. Знайти індекси першого мінімального та першого максимального
елементів. Переставити елементи списку у зворотному порядку.
Завдання 3. Для створеного списку (вибрати задачу відповідно до номера
прізвища у журналі, розв’язати задачу мовою Python):
3.1. Визначити кількість сусідств двох додатних чисел.
3.2. Визначити кількість сусідств двох чисел різного знаку.
3.3. Поміняти місцями найменший елемент з елементом, що має індекс k.
3.4. Збільшити всі відмінні від максимального елементи списку на значення
мінімального елемента.
3.5. Поміняти місцями найбільший елемент з першим по порядку (якщо їх
індекси збігаються – повідомити про це).
3.6. Замінити від’ємні елементи їх квадратами.
3.7. Поміняти місцями найбільший та найменший елементи. Якщо
найбільших та найменших декілька, залишити тільки їх перше
входження.
3.8. Замість і-го елемента записати суму чисел від першого по порядку
елемента до і-го включно.
3.9. Замінити елементи зі значенням 2 на 5, З на 4, 4 на 3, 5 на 2.
3.10. Усі від’ємні значення елементів списку замінити мінімальним
значенням, а всі додатні – максимальним.
3.11. Усі значення елементів списку, менші за середнє арифметичне,
замінити мінімальним значенням, а всі більші – максимальним.
3.12. Усі значення елементів списку, більші за середнє арифметичне,
збільшити на 12%.
3.13. Визначити кількість сусідств двох нульових елементів.
3.14. Перевірити, чи впорядковані елементи списку за зростанням.
3.15. Переставити у зворотному порядку елементи, які розташовані між
мінімальним та максимальним елементами списку.
58
Контрольні запитання
1. Назвіть базові операції обробки списків з числовими елементами.
2. Що буде виведено на екран у результаті виконання програмного коду:
l = [18 for i in range(4)]
print(l)
3. Що буде виведено на екран у результаті виконання програмного коду:
l = [i**2 for i in range(4)]
print(l)
4. Що буде виведено на екран у результаті виконання програмного коду:
l = [i*3 for i in range(15) if i < 3]
print(l)
5. Для чого призначений модуль random? Як підключити його до програми?
6. Яке призначення методу random.random()? Який його результат?
7. Яке призначення методу random.randint(a,b)? Що визначають
параметри a, b цього методу? Який його результат?
8. Яке призначення функції enumerate()? Який результат вона повертає?
Як за допомогою цієї функції замінити значення елемента списку?
9. Як здійснити перестановку двох елементів списку?

Тема №8. Вкладені 2D-списки в матричних задачах


Мета: навчитися використовувати вкладені 2D-списки при опрацюванні
матриць.
Теоретичні питання
План
1. Створення матриці та виведення її елементів на екран.
2. Базові операції опрацювання матриць.

1. Створення матриці та виведення її елементів на екран

Ініціалізувати матрицю можна як двовимірний список:


a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Доступ до елементів матриці відбувається так:


# звернення до рядка матриці з індексом 1
print(a[1])

# звернення до елемента матриці з індексом 1,2


print(a[1][2])
59
Результати:
[4, 5, 6]
6

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


вкладених циклів:

for i in range(len(a)):
for j in range(len(a[i])):
print(a[i][j], end=' ')
print()

Результати:

1 2 3
4 5 6
7 8 9

Розглянемо програмний код створення матриці розміром m×n з нульовими


елементами, де
m – кількість рядків
n – кількість стовпчиків

З використанням методу append():

# ініціалізація розмірності матриці


m=3
n=4

# створення порожнього списку


matrix = []

# цикл формування матриці


for i in range(0,m):
matrix.append([])
for j in range(0,n):
matrix[i].append(0)

#виведення створеної матриці на екран

60
for i in range(0,m):
for j in range(0,n):
print(matrix[i][j], end=' ')
print()

З використанням «розуміння списку»:

# ініціалізація розмірності матриці


m=3
n=4

# цикл формування матриці


matrix = [[0 for j in range(n)] for i in range(m)]

# виведення створеної матриці на екран


for i in range(0,m):
for j in range(0,n):
print(matrix[i][j], end=' ')
print()

Результат використання обох способів є однаковим:

0 0 0 0
0 0 0 0
0 0 0 0

2. Базові операції опрацювання матриць


Пошук максимального елемента
Розглянемо матрицю, представлену у вигляді 2D-списку:
b=[[3,2], [1,4]]

Для пошуку максимального елемента спробуємо скористатися вбудованою


функцією max():

print(max(b))

Результат:
[3, 2]

61
Такий підхід не дає правильного результату тому, що послідовності [3,2] та
[1,4] порівнюються лексикографічно: зіставляються перші елементи, тільки
якщо вони збігаються, порівнюватимуться інші елементи. Тому послідовність
[3,2] виводиться як максимальний елемент.
Можна використати «розуміння списку», щоб досягти бажаного результату:
print(max([max(row) for row in b]))

Результат:
4

Узагальнення:
maxed = [max(sub_list) for sub_list in list]

Приклад 2.2. Нехай дано матрицю розміром n×n. Необхідно елементам, що


знаходяться на головній діагоналі, (тобто елементам a[i][j], для яких i==j)
надати значення 1, елементам, що знаходяться над головною діагоналлю –
значення -2, елементам, що знаходяться під головною діагоналлю – значення 2.
Тобто необхідно отримати таку матрицю (для n==4):

1 -2 -2 -2
2 1 -2 -2
2 2 1 -2
2 2 2 1

# cтворення матриці з нульовими елементами


n = 4
a = [[0] * n for i in range(n)]

# надання значення елементам головної діагоналі:


for i in range(n):
a[i][i] = 1

# надання значення елементам над головною діагоналлю


for i in range(n):
for j in range(i + 1, n):
a[i][j] = -2
# надання значення елементам над головною діагоналлю
for i in range(n):
for j in range(0, i):
62
a[i][j] = 2

# виведення створеної матриці на екран


for i in range(n):
for j in range(n):
print('{:3d}'.format(a[i][j]), end=' ')
print()

Можна об’єднати зовнішні цикли:


n = 4
a = [[0] * n for i in range(n)]
for i in range(n):
for j in range(0, i):
a[i][j] = 2
a[i][i] = 1
for j in range(i + 1, n):
a[i][j] = 0
for i in range(n):
for j in range(n):
print('{:3d}'.format(a[i][j]), end=' ')
print()

Практичні завдання
Завдання 1. Вибрати задачу відповідно до номера прізвища у журналі,
розв’язати задачу мовою Python:
1.1. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Вивести на екран індекси всіх максимальних
елементів.
1.2. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Обчислити та вивести на екран кількість
входжень заданого елемента x та індекси його входжень.
1.3. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Обчислити суму елементів кожного
стовпчика.
1.4. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Обчислити середнє арифметичне елементів
кожного рядка.
1.5. Дано натуральне число n. Визначити кількість додатних і кількість
від’ємних елементів таблиці аij, де i, j=1, 2,…, n, якщо aij =
sin(i + j) .
63
1.6. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Обчислити кількість парних та непарних
елементів.
1.7. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Знайти та вивести на екран максимальні
елементи кожного стовпчика.
1.8. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Обчислити добуток від’ємних елементів та їх
кількість.
1.9. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Обчислити суму додатних елементів та їх
кількість.
1.10. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Знайти та вивести на екран елементи, значення
яких дорівнюють сумі їх індексів (i+j).
1.11. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Знайти та вивести на екран елементи кратні
числу 3 та їх індекси.
1.12. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Обчислити суму елементів, розташованих над
головною діагоналлю.
1.13. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Знайти максимальний серед елементів,
розташованих під головною діагоналлю.
1.14. Елементи цілочислової квадратної матриці розміром n ×n
задано випадковим чином. Знайти мінімальний серед елементів,
розташованих на головній діагоналі.
1.15. Дано натуральне число n. Обчислити елементи квадратної таблиці
аij, де i, j=1, 2,…, n, за такою формулою: aij=i3 + sin(j) – 5
.
Завдання 2. В заданій квадратній матриці розміром n х n знайти найменший
елемент, що знаходиться у відповідній заштрихованій області:

2.1. 2.4. 2.7.

2.2. 2.5. 2.8.

2.3. 2.6. 2.9.


64
2.10. 2.12. 2.14.

2.11. 2.13. 2.15.

Завдання 3. Дано координати першої фігури на шаховій дошці. Позначити на


шахівниці усі можливі положення другої фігури за умови, що жодна з фігур
не знаходяться під ударом іншої. Скласти програму для фігур відповідно до
номера прізвища у журналі:
3.1. білий і чорний ферзі;
3.2. біла тура і чорна тура;
3.3. білий і чорний слони;
3.4. біла тура і чорний слон;
3.5. білий кінь і чорний кінь;
3.6. білий і чорний пішаки;
3.7. чорна тура і білий ферзь;
3.8. білий кінь і чорна тура;
3.9. чорний слон і білий ферзь;
3.10. білий кінь і чорний слон;
3.11. біла тура і чорний пішак;
3.12. білий кінь і чорний ферзь;
3.13. білий ферзь і чорний пішак;
3.14. чорний слон і білий пішак;
3.15. білий пішак і чорний кінь.

Контрольні запитання
1. Як використовуються списки при опрацюванні матриць?
2. Якими способами задаються елементи матриць?
3. Як здійснюється доступ до елементів матриці?
4. Які особливості використання вкладених циклів?
5. Як знайти максимальний / мінімальний елемент матриці?
6. Як визначити елементи матриці, що знаходяться на головній діагоналі?
7. Як визначити елементи матриці, що знаходяться над головною діагоналлю?
8. Як визначити елементи матриці, що знаходяться під головною діагоналлю?

Тема №9. Словники


Мета: формування вмінь створення словників і множин та виконання операцій
над ними.

65
Теоретичні питання
План
1. Словники та операції над ними.

1. Словники та операції над ними

Словник – це неупорядкована множина пар «ключ:значення». Ключ у


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

Створення словників:
1 спосіб

plants = {"radish":2,"squash":4,"carrot":7}
print(plants, "\n")

Результат:

{'radish': 2, 'carrot': 7, 'squash': 4}

2 спосіб

plants = {}

# додавання пар ключ:значення до словника


plants["radish"] = 2
plants["squash"] = 4
plants["carrot"] = 7
print(plants, "\n")

Результат:

{'radish': 2, 'carrot': 7, 'squash': 4}

Доступ до значення окремого елемента


1 спосіб за допомогою ключа

print(plants["radish"])

Результат:

66
2

2 спосіб за допомогою функції get()

print(plants.get("radish"))
print(plants.get("tuna"))

Результати:

2
None

Функція get() повертає значення елемента за заданим значенням ключа.


Якщо такого елемента у словнику немає, повертається значення None.
Якщо використати оператор
print(plants["tuna"]),
буде виведено повідомлення про помилку.

Перевірка приналежності за допомогою оператора in

animals = {}
animals["monkey"] = 1
animals["tuna"] = 2
animals["giraffe"] = 4

# перевірка приналежності
if "tuna" in animals:
print("Has tuna")
else:
print("No tuna")

# використання оператора in для неіснуючого ключа


if "elephant" in animals:
print("Has elephant")
else:
print("No elephant")

Результати:

Has tuna
67
No elephant

Визначення числа пар у словнику за допомогою функції len()

animals = {"parrot": 2, "fish": 6}

print("Length:", len(animals))

Результат:

Length: 2

Створення списку ключів та списку значень за допомогою методів keys та


values

hits = {"home": 125, "sitemap": 27, "about": 43}


keys = hits.keys()
values = hits.values()

print("Keys:")
print(keys)
print(len(keys))

print("Values:")
print(values)
print(len(values))

Результати:

Keys:
dict_keys(['home', 'about', 'sitemap'])
3
Values:
dict_values([125, 43, 27])
3
Сортування словника за значенням ключа. Функція sorted()

hits = {"home": 124, "sitemap": 26, "about": 32}

68
# сортування ключів словника
keys = sorted(hits.keys())

print(keys)

Результати:

['about', 'home', 'sitemap']

Функція sorted() повертає відсортований список.

Перетворення словника на список двоелементних кортежів за допомогою


методу items()

rents = {"apartment": 1000, "house": 1300}

# перетворення в список кортежів


rentItems = rents.items()

# поелементне опрацювання і виведення на екран елементи


кортежу
for rentItem in rentItems:
print("Place:", rentItem[0])
print("Cost:", rentItem[1])
print("")

Результати:

Place: house
Cost: 1300
Place: apartment
Cost: 1000

«Розпаковка» словника

data = {"a": 1, "b": 2, "c": 3}

# поелементне опрацювання і розпаковка кожної пари


ключ:значення

69
for k, v in data.items():
# виведення на екран ключа і значення
print(k, v)

Результати:

a 1
c 3
b 2

Доступ до ключів словника:

plants = {"radish": 2, "squash": 4, "carrot": 7}

# поелементне опрацювання з доступом тільки до ключів


for plant in plants:
print(plant)

Результати:

radish
carrot
squash

Видалення елементів (кортежів) словника за допомогою оператора del

systems = {"mac": 1, "windows": 5, "linux": 1}

# видалення елемента зі значенням "windows"


del systems["windows"]
print(systems)

Результат:

{'mac': 1, 'linux': 1}

Оновлення словника за допомогою методу update()

# перший словник
pets1 = {"cat": "feline", "dog": "canine"}
70
# другий словник
pets2 = {"dog": "animal", "parakeet": "bird"}

# оновлення першого словника другим


pets1.update(pets2)

print(pets1)
print(pets2)

Результати:

{'parakeet': 'bird', 'dog': 'animal', 'cat': 'feline'}


{'dog': 'animal', 'parakeet': 'bird'}

Створення копії словника за допомогою методу copy

original = {"box": 1, "cat": 2, "apple": 5}

# створення копії словника


modified = original.copy()

# зміна тільки копії


modified["cat"] = 200
modified["apple"] = 9

# заданий словник залишається без змін


print(original)
print(modified)

Результати:

{'box': 1, 'apple': 5, 'cat': 2}


{'box': 1, 'apple': 9, 'cat': 200}

Перетворення списку на словник за допомогою методу fromkeys

# список ключів
keys = ["bird", "plant", "fish"]
71
# створення словника із заданих ключів
d = dict.fromkeys(keys, 5)

print(d)

Результат:

{'plant': 5, 'bird': 5, 'fish': 5}

Практичні завдання
Завдання 1. У вікні браузера перейти до сторінки
http://courses.ischool.berkeley.edu/i90/f11/resources/chapter05/geek_translator.py
. Скопіювати код програми Geek Translator у вікно Редактора файлів (ім’я
файла – geek_translator.py). Також текст програми міститься у файлі
\\Netstorm\stuff\Rezina\applied
linguistics\2_kurs\progr_computation\examples\geek_translator.txt
Запустити програму на виконання. У запропонованому меню протестувати
всі пункти. Проаналізувати результат.
Завдання 2. Створити словник, що містить не менше 10 елементів. Вибрати
предметну область для елементів словника відповідно до номера прізвища в
журналі:
2.1. прізвище : номер телефону;
2.2. марка автомобіля : номер автомобіля;
2.3. дисципліна : кількість годин на її вивчення;
2.4. назва книги : кількість екземплярів;
2.5. назва країни : її доменне ім’я;
2.6. термін : кількість згадувань у тексті;
2.7. назва товару : кількість наявних одиниць;
2.8. назва країни : континент, на якому вона розташована;
2.9. прізвище футболіста : назва клубу, в якому він грає;
2.10. назва кольору : його комп’ютерний код;
2.11. назва фірми : кількість її співробітників;
2.12. назва країни : кількість населення (в млн.);
2.13. назва мови програмування : ім’я розробник цієї мови;
2.14. прізвище винахідника : назва винаходу;
2.15. річка : регіон, територією якого вона протікає.
Вивести на екран створений словник та значення його довжини.
За допомогою методу get() вивести на екран значення елемента, ключ
якого задається з клавіатури.

72
Завдання 3. Відкрити новий файл. Деяке значення задається з клавіатури.
З’ясувати, чи є таке значення серед елементів створеного словника.
Завдання 4. Відкрити новий файл. За допомогою методів keys та values
створити список ключів та список значень створеного словника. За
допомогою функції sorted відсортувати елементи словника за значенням
ключа. Відсортований словник вивести на екран.
Завдання 5. Відкрити новий файл. За допомогою методу items перетворити
словник на список двоелементних кортежів. За допомогою методу items
«розпакувати» словник. За допомогою циклу for вивести на екран ключі
словника поелементно.
Завдання 6. Відкрити новий файл. За допомогою оператора del видалити
елемент словника, ключ якого задається. Отриманий словник та його
довжину вивести на екран.
Завдання 7. Створити словник, що містить 3 елемента (предметна область та
сама). За допомогою методу update оновити словник, створений у завданні
№1. Отриманий словник та його довжину вивести на екран. За допомогою
методу copy створити копію словника, вивести її на екран.
Завдання 8. Створити список як у завданні №6 теми №6 «Списки. Кортежі».
За допомогою методу fromkeys перетворити список на словник, указавши
довільне значення для значення словника. Створений словник вивести на
екран.

Контрольні запитання
1. Яка структура даних називається словником? Яким видом дужок вона
визначається?
2. Як отримати значення елемента за заданим значенням ключа?
3. Як з’ясувати, чи міститься елемент із заданним ключем у словнику?
4. Як визначити число пар у словнику?
5. Як створити список ключів та список значень словника?
6. Як відсортувати елементи словника за значенням ключа?
7. Як перетворити словник на список двоелементних кортежів?
8. Як видалити елемент словника, ключ якого задається?
9. Як оновити словник?
10.Як створити копію словника?
11.Чи можливе перетворення списку на словник?
12.Як виглядає код для порожнього словника?
13.Як виглядає елемент словника з ключем key і значенням 81?
14.Опишіть основні відмінності між словником і списком.
15.У змінній result зберігається словник. Яка різниця між такими виразами:
'battery' in result i 'battery' in result.keys()?
73
16.У змінній result зберігається словник. Яка різниця між такими виразами:
'battery' in result i 'battery' in result.values()?
17.Що буде відображено на місці ... при спробі отримання доступу до
елементів, використовуючи такий код:
room = {'bookcase': 1, 'armchair': 3, 'table': 1, 'clock':
True}
print (room['armchair'])
...
print (room['clock'])
...
print (room['table'])
...
print (room.get('blinds', 'Blinds are missing.'))

Тема №10. Рядки


Мета: навчитися опрацьовувати рядки.
Теоретичні питання
План
1. Поняття рядка у Python.
2. Оператори обробки рядків.
3. Методи обробки рядків.

1. Поняття рядка у Python

Рядок – це скінченна послідовність символів. Щоб послідовність символів


була визначена як рядок, її необхідно записати в лапках.
Якщо у програмному коді рядок займає одну лінію (a single Python line),
використовують одинарні або подвійні лапки. Якщо рядок займає декілька
ліній програмного коду (a multi-line string) використовують потрійні лапки.
Також між потрійними лапками можна застосовувати спеціальні символи
(табуляція \t, новий рядок \n тощо). Приклад:

test = '''Say,
"I'm in!"
This is line 3'''

print(test)

Результат:

74
Say,
"I'm in!"
This is line 3

Індекси елементів рядка

Символ i n s t a g r a m
Індекс з
0 1 2 3 4 5 6 7 8
початку
Індекс з
-9 -8 -7 -6 -5 -4 -3 -2 -1
кінця

Тоді програмний код:

word = 'instagram'

print(word[-3])
print(word[-8])

дає результати:

r
n

2. Оператори обробки рядків

Оператор зрізу slice

За допомогою оператора зрізу slice можна отримати доступ до декількох


символів рядка, вказавши діапазон індексів у квадратних дужках [a:b]
(символ з індексом b до зрізу не включається):

word = 'instagram'

# виведення на екран символів з 2-го до 5-го


part1 = word[2:6]
print(part1)

# виведення на екран символів з початку і до 4-го


part2 = word[:5]
print(part2)
75
# виведення на екран символів з 5-го і до кінця
part3 = word[5:]
print(part3)

# використання від’ємної індексації


part4 = word[2:-1]
print(part4)

# відсутність результату (не можна використовувати


індексацію справа наліво)
part5 = word[-1:2]
print(part5)

# використання від’ємної індексації


part6 = word[-4:-2]
print(part6)

Результати:

stag
insta
gram
stagra

gr

Оператори: приналежність in, додавання (+), множення (*) та функції:


визначення довжини len(), визначення мінімального елемента min(),
визначення максимального елемента max() використовуються так само як для
кортежів і списків.

3. Методи обробки рядків

Пошук підрядка за допомогою методів find(), rfind()


Оператор in визначає чи міститься підрядок у рядку. Метод find() повертає
індекс шуканого підрядка. Якщо такого підрядка немає, повертається -1.
value = "cat picture is cat picture"

76
# пошук індексу першого входження підрядка "picture"
i = value.find("picture")
print(i)

Результат:
4

Програма пошуку індексів усіх входжень підрядка в рядок:

value = "cat picture is cat picture"

# припущення, що такого підрядка в рядку немає


i = -1

# цикл пошуку
while True:
# збільшення значення позиції на 1
i = value.find("picture", i + 1)

# перервати, якщо не знайдено


if i == -1: break

# виведення результатів
print(i)

Результати:
4
19

Метод rfind() здійснює пошук справа:

value = "cat picture is cat picture"

# пошук індексу першого входження підрядка "picture" справа


i = value.rfind("picture")
print(i)

Результат:

77
19

Використання методу count() для підрахунку кількості входжень підрядка в


рядок

value = "finnegans wake"

# підрахунок входжень підрядка "n"


print(value.count("n"))

# підрахунок входжень підрядка "n" між індексами 0 та 6


print(value.count("n", 0, 6))

Результати:

3
2

Використання методу replace() для заміни символів


Рядки не можна змінювати. За допомогою методу replace() можна створити
новий рядок:

value = "aabc"

# заміна підрядка іншим


result = value.replace("bc", "yz")
print(result)

# заміна тільки першого входження підрядка


result = value.replace("a", "x", 1)
print(result)

Результати:

aayz
xabc

Метод replace() може бути використаний для видалення символів. Для


цього необхідно як другий параметр указати поржній рядок:
78
s_old = "this is a string example....wow!!! this is the
really string";
print(len(s_old))
print(s_old.count("is"))

# видалення підрядка "is"


s_new = s_old.replace("is", "")
print (s_new)
print(len(s_new))
print(s_new.count("is"))

Результати:

60
4
th a string example....wow!!! th the really string
52
0

Використання методу join() для об’єднання елементів послідовності


методу join() повертає рядок, який є об’єднанням елементів списку або іншої
скінченної послідовності (iterable collection). Розглянемо, як використовується
join() для елементів списку:

lst = ["a", "b", "c"]

# об’єднання елементів з використанням порожнього рядка як


розділювача
result = "".join(list)

# об’єднання елементів з використанням коми як розділювача


result2 = ",".join(list)

# виведення результатів
print(result)
print(result2)

Результати:
79
abc
a,b,c

Приклад 2.3. У деяких ситуаціях виникає необхідність обернути рядок.


Наприклад для того, щоб згенерувати унікальний ключ для деяких даних.
Необхідно створити програму, яка обертає рядок. Існує декілька способів
написання такої програми. Розглянемо спосіб з використанням методу join():

test = "cat"

# перетворення рядка у список


characters=list(test)
print(characters)

# обернення списку символів і об’єднання їх у рядок


characters.reverse()
print(characters)
reversed="".join(characters)

# сортування списку символів і об’єднання їх у рядок


characters.sort()
print(characters)
sorted="".join(characters)

# виведення результатів
print(test)
print(reversed)
print(sorted)

Результати:

['c', 'a', 't']


['t', 'a', 'c']
['a', 'c', 't']
cat
tac
act

80
"the early bird gets the worm"

Практичні завдання
Завдання 1. Вивести на екран діалог, що містить чотири репліки,
використовуючи функцію print() та потрійні лапки. За необхідності
використати символи табуляція \t та новий рядок  \n.
Завдання 2. Значення рядкової величини – "the early bird gets the worm".
Вивести на екран символи
2.1. з 10 до 13;
2.2. з 4до -3;
2.3. з 0 до 2;
2.4. з -1 до 1;
2.5. до 19;
2.6. після 20.

Проаналізувати результати.
Завдання 3. Відкрити новий файл для написання програми до завдання:
дано рядок. За допомогою методу find() визначити індекс першого
входження у цей рядок підрядка, значення якого задається. За допомогою
методу rfind() визначити індекс останнього входження у цей рядок підрядка,
значення якого задається.
Завдання 4. Відкрити новий файл для написання програми до завдання:
дано рядок. За допомогою оператора циклу while та методу find() визначити
індекси всіх входжень у цей рядок підрядка, значення якого задається.
Завдання 5. Відкрити новий файл для написання програми до завдання:
дано рядок. За допомогою методу count визначити кількість входжень
підрядка:
1. для всього рядка;
2. для певної частини рядка (інтервал задається).
Завдання 6. Вибрати задачу відповідно до номера прізвища у журналі.
Відкрити новий файл для написання програми до завдання. Розв’язати
задачу у середовищі Python, використовуючи методи replace() та reverse():
6.1. Дано рядок символів. У рядку замінити всі символи «:» на символи «-»;
видалити всі символи «!»; записати отриманий рядок у зворотному
порядку.

81
6.2. Дано рядок символів. У рядку замінити всі символи «.» на символи «!» ;
видалити всі символи «№»; записати отриманий рядок у зворотному
порядку.
6.3. Дано рядок символів. У рядку замінити всі символи «1» на символи «0»;
видалити всі символи «#»; записати отриманий рядок у зворотному
порядку.
6.4. Дано рядок символів. У рядку замінити всі символи «*» на символи «+»;
видалити всі символи «-»; записати отриманий рядок у зворотному
порядку.
6.5. Дано рядок символів. У рядку замінити всі символи «,» на символи «;»;
видалити всі символи «%»; записати отриманий рядок у зворотному
порядку.
6.6. Дано рядок символів. У рядку замінити всі символи «i» на символи «y»;
видалити всі символи «*»; записати отриманий рядок у зворотному
порядку.
6.7. Дано рядок символів. У рядку замінити всі символи «$» на символи «&»;
видалити всі символи «’»; записати отриманий рядок у зворотному
порядку.
6.8. Дано рядок символів. У рядку замінити всі символи «<» на символи «>»;
видалити всі символи «”»; записати отриманий рядок у зворотному
порядку.
6.9. Дано рядок символів. У рядку замінити всі символи «!» на символи «?»;
видалити всі символи «/»; записати отриманий рядок у зворотному
порядку.
6.10. Дано рядок символів. У рядку замінити всі символи «_» на символи «=»;
видалити всі символи «+»; записати отриманий рядок у зворотному
порядку.
6.11. Дано рядок символів. У рядку замінити всі символи «x» на символи
«ks»; видалити всі символи «w»; записати отриманий рядок у зворотному
порядку.
6.12. Дано рядок символів. У рядку замінити всі символи «f» на символи
«ph»; видалити всі символи «q»; записати отриманий рядок у зворотному
порядку.
6.13. Дано рядок символів. У рядку замінити всі символи «*» на символи «^»;
видалити всі символи «-»; записати отриманий рядок у зворотному
порядку.
6.14. Дано рядок символів. У рядку замінити всі символи «+» на символи «=»;
видалити всі символи «/»; записати отриманий рядок у зворотному
порядку.
82
6.15. Дано рядок символів. У рядку замінити всі символи «/» на символи «:»;
видалити всі символи «=»; записати отриманий рядок у зворотному
порядку.

Контрольні запитання
1. Яка структура даних називається рядком? Якими символами вона
визначається?
2. Як індексуютья елементи рядка?
3. Як використовується оператор slice для рядків?
4. За допомогою яких операторів можна здійснити додавання та множення
рядків?
5. Яке призначення методів find() та rfind()? Наведіть загальний синтаксис
використання цих методів.
6. Яке призначення методу count()? Наведіть загальний синтаксис
використання цього методу.
7. Яке призначення методу replace()? Наведіть загальний синтаксис
використання цього методу?
8. Як видалити підрядок з рядка?
9. Яке призначення методу join()? Наведіть загальний синтаксис
використання цього методу?
10.Що буде виведено на екран у результаті виконання програмного коду:
a = "strinG"
b = "STring"
print (a[0:2]+b[2:])
11.Що буде відображено на екран у результаті виконання програмного коду:
a = "strinG"
b = "STring"
print(len(a), len(a[1:]), len(b), len(b[0:]))

Тема №11. Текстові файли


Мета: навчитися користуватися текстовими файлами у процесі програмування.
Теоретичні питання
План
1. Поняття текстового файлу.
2. Технологія роботи з файлами.
3. Опрацювання чисел у текстових файлах.

83
1. Поняття текстового файлу

Програми, що створювалися та використовувалися до цього часу, були


інтерактивні. Після виходу з програми дані витиралися з пам’яті комп’ютера.
Але якщо програма розроблена так, що дані записуються до файлу, то їх можна
зчитати в будь-який інший час. Також збільшується обсяг даних, які можна
опрацювати програмою.
Текстовий файл – набір символів на зовнішньому носієві, що має ім’я і
який операційна система опрацьовує як єдине ціле. Текстовий файл містить
дані, які є символами (або рядками) та не містить будь-які структуровані
метадані.

2. Технологія роботи з файлами

Крок 1. Створення текстового файлу


Файл створюється в текстовому редакторі Блокнот. Наприклад, створимо
файл days.txt:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Зберегти файл, знати його місце зберігання.

Крок 2. Відкриття текстового файлу


Створити Python-програму з іменем файлу files.py, для спрощення роботи
зберегти цю програму у тій самій папці, що і days.txt.
Для відкриття текстового файлу використаємо функцію open().
open() – повертає об’єкт-файл, найчастіше використовується з двома
параметрами open(filename, mode). Наприклад:
f = open("D:/Python34/text_files/humpty.txt", "r")
r – відкритий для читання.
w – відкритий для запису, якщо параметр зв’язаний з іменем неіснуючого
файлу, то файл з таким іменем буде створений. Якщо цей параметр використати
для відкриття наявного файлу, то вміст цього файлу буде видалено та створено
новий порожній файл.
a – відкритий для дозапису, дані додаються в кінець файлу.
r+ – відкритий для читання і запису одночасно.

Відкриємо файл для читання:


84
f = open('days.txt','r')

Крок 3. Читання текстового файлу


Читання з файлу відбувається через змінну, з якою він пов’язаний.
Три методи читання даних із файлу:
1. <file>.read() – зчитує вміст усього файлу:

text=f.read()
print(text)

Результати:

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

2. <file>.readline() – зчитує вміст рядка (файл зчитується рядок за


рядком):

text=f.readline()
print(text)

Результат:

Monday

text=f.readline()
print(text)

Результат:

Tuesday

3. <file>.readlines()– зчитує всі рядки файлу, повертає список,


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

85
text=f.readlines()
print(text)

Результати:

['Monday\n', 'Tuesday\n', 'Wednesday\n', 'Thursday\n',


'Friday\n', 'Saturday\n', 'Sunday\n']

Якщо файл зчитано з використанням однієї з операцій читання, його не


можна прочитати знову. Для повторного читання необхідно відкрити файлову
змінну.

Крок 4. Запис до текстового файлу


Метод <file>.write(string) використовується для запису рядка до
файлу.
Запишемо новий файл, що починається із заголовка «Days of the Week»:

# створення змінної title


title = 'Days of the Week:\n'

# відкриття файлу для читання


f = open('days.txt','r')
# відкриття файлу для запису
g = open('new_days.txt','w')

# зчитування вмісту файлу days.txt у змінну days


days=f.read()

# запис до файлу new_days.txt заголовка


g.write(title)

# запис до файлу new_days.txt змінної days


g.write(days)

Крок 5. Закриття файлу


Закриття файлу гарантує, що з’єднання між файлом на диску і файловою
змінною завершено. Закриття файлів також гарантує, що інші програми
зможуть отримати до них доступ та зберегти дані у безпеці.
<file>.close() – закриває об’єкт-файл, вивільняє всі системні ресурси,
що були активовані під час відкриття файлу.
86
Допишемо до програми декілька рядків програмного коду:

# закриття файлів
f.close()
g.close()

# повідомлення про виконання програми


print('The program is executed. Check the file')

Результати:

Days of the Week:


Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Оператор with

При роботі з файловими об’єктами ефективним є використання оператора


with: відбувається автоматичне закриття файлу після його опрацювання.

f = open('days.txt','r') with open('days.txt','r')


as f:

Приклад 2.4. Розробити програму з використанням файлу days.txt, у


результаті роботи якої створюється новий файл, в якому дні тижня
пронумеровані:

# ініціалізація нумератора рядків


line_number=0

# відкриття файлів для читання та запису


with open('days.txt','r') as f, open('num_days.txt','w') as g:

# цикл опрацювання файлів


for line in f:
line_number+=1
87
g.write('{:>4}. {}\n'.format(line_number,line))

# повідомлення про виконання програми


print("The programme is completed. Check the file.")

Результати:

1. Monday
2. Tuesday
3. Wednesday
4. Thursday
5. Friday
6. Saturday
7. Sunday

Узагальнено:
with open('/your/path/file') as f:
for line in f:
process(line)

3. Опрацювання чисел у текстових файлах


Приклад 2.4. Дано текстовий файл, елементами якого є цілі числа.
Розробити програму в результаті роботи якої всі парні числа записуються до
іншого файлу.
Створимо файл data.txt:

12 35 21
123 12 15
12 18 89

Програмний код може бути таким:

with open('data.txt','r') as f, open('data_even.txt','w') as g:


for line in f:

# розщеплення поточного рядка на підрядки


numbers_str=line.split()
# перетворення символів у цілі числа
numbers_int=[int(x) for x in numbers_str]
# виведення отриманих чисел на екран для контролю

88
print(numbers_int)
# запис парних чисел до файлу data_even.txt
for x in numbers_int:
if x % 2 ==0:
g.write('{:>4}'.format(x))

Практичні завдання
Завдання 1. Увести коди та протестувати програми з прикладів 2.3 – 2.4.
Завдання 2. У середовищі Блокнот створити текстовий файл, вмістом якого
є вісім рядків вірша. У середовищі Python написати програму, в результаті
виконання якої створюється текстовий файл, що містить:
 назву вірша;
 вісім рядків вірша;
 ім’я та прізвище автора вірша.
До створеної програми додати оператори, за допомогою яких вміст файла із
назвою та автором виводиться на екран.
Завдання 3. Вибрати задачу відповідно до номера прізвища у журналі.
Написати програму розв’язку задачі мовою Python:
3.1. Дано текстовий файл. Створити новий текстовий файл, у який переписати
текст із даного файлу добавляючи на початку кожного рядка символ «*» .
3.2. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи у кінець кожного рядка
символ «!» .
3.3. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи на початку кожного рядка
його порядковий номер.
3.4. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи на початку кожного рядка
символ «№» .
3.5. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи у кінець кожного рядка
символ «;» .
3.6. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи на початку кожного рядка
символ «-» .
3.7. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи у кінець кожного рядка
символ «?» .
89
3.8. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи на початку кожного рядка
символ «(» .
3.9. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи у кінець кожного рядка
символ «)» .
3.10. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи на початку кожного рядка
символ «>» .
3.11. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи на початку кожного рядка
символ «/» .
3.12. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи у кінець кожного рядка
символ «<».
3.13. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи на початку кожного рядка
символ «^» .
3.14. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи на початку кожного рядка
символ «@» .
3.15. Дано текстовий файл. Створити новий текстовий файл, у який
переписати текст із даного файлу добавляючи у кінець кожного рядка
символ «.» .
Завдання 4. Вибрати задачу відповідно до номера прізвища у журналі.
Написати програму розв’язку задачі мовою Python:
4.1. Дано текстовий файл, до якого записані дійсні числа. Знайти суму чисел і
записати цю суму в кінець заданого файлу.
4.2. Дано текстовий файл, до якого записані цілі числа. Знайти суму
найбільшого та найменшого з чисел і записати цю суму в кінець заданого
файлу.
4.3. Дано текстовий файл, до якого записані цілі числа. Усі непарні від’ємні
числа записати до іншого файлу.
4.4. Дано текстовий файл, до якого записані дійсні числа. Усі числа, що
менші за середнє арифметичне записаних до файлу чисел, записати до
іншого файлу.
4.5. Дано текстовий файл, до якого записані цілі числа. Усі числа, що
діляться націло на 3 та на 5, записати до іншого файлу.

90
4.6. Дано текстовий файл, до якого записані цілі числа. Усі числа, що є
точними квадратами, записати до іншого файлу.
4.7. Дано текстовий файл, до якого записані цілі числа. Усі числа, що є
більші за задане ціле число, записати до іншого файлу.
4.8. Таблицю значень y=sin x для x = -10, -9, -8 … 10 записати у файл
відповідними парами чисел (x,y).
4.9. Дано текстовий файл, до якого записані цілі числа. Переписати ці числа
до іншого файлу у зворотному порядку.
4.10. Дано текстовий файл, до якого записані цілі числа. Переписати ці числа
до іншого файлу у порядку зростання.
4.11. Дано текстовий файл, до якого записані дійсні числа. Знайти добуток
чисел і записати цей добуток у кінець заданого файлу.
4.12. Дано текстовий файл, до якого записані цілі числа. Квадрати чисел
записати до іншого файлу.
4.13. Дано текстовий файл, до якого записані цілі числа. Модулі чисел
записати до іншого файлу.
4.14. Дано текстовий файл, до якого записані цілі числа. Усі парні числа
записати до одного файлу, непарні – до іншого.
4.15. Дано текстовий файл, до якого записані дійсні числа. Знайти найбільше
парне число, записати його в кінець заданого файлу.

Контрольні запитання
1. Що називається текстовим файлом? Для чого використовуються текстові
файли в програмуванні?
2. Для чого призначена функція open()? Які параметри вона має? Яке
призначення параметру filename?
3. Яке призначення параметру mode функції open()? Що означають його
значення "r", "w", "a"?
4. Яке призначення методу <file>.read()?
5. Яке призначення методу <file>.readline()?
6. Яке призначення методу <file>.readlines()?
7. Яке призначення методу <file>.write(string)?
8. Яке призначення методу f.close()?
9. Якщо файл зчитано з використанням одного з методів читання, то чи можна
його прочитати знову? Що для цього необхідно зробити?
10.Які особливості використання використання оператора with()? Які
параметри він має?
11.Як зчитати вміст текстового файлу рядок за рядком?
91
12.Який буде результат виконання програмного коду:
f = open("file.txt", "w")
for x in range(2,6):
    f.write("{} {} {} \n".format(x, x**2, x**3))
f.close()

Тема №12. Рекурсивні функції


Мета: формування вмінь створення та використання рекурсивних функцій.
Теоретичні питання
План
1. Поняття рекурсивної функції. Рекурсивне занурення та рекурсивне
повернення.
2. Технологія створення рекурсивних функцій.

1. Поняття рекурсивної функції. Рекурсивне занурення та рекурсивне


повернення

Існує багато прикладів рекурсії:


 натуральне число n- парне, якщо n= 2 або n-2 – парне число;
 людина – це дехто, чия мати – людина.
Рекурсія має певне відношення до нескінченості. «Рекурсивний» походить
від латинського дієслова «recurrere», що означає «бігти назад». Рекурсивна
функція відбігає або повертається до себе.
Особливістю використання рекурсії в програмуванні є те, що складна
задача розбивається на кілька дрібніших (простіших). Рекурсія пов’язана з
циклічним оператором. Але в деяких ситуаціях рекурсія може бути кращім
розв’язком. Необхідним і достатнім засобом реалізації рекурсії є функція.
Рекурсивною називається функція, яка викликає сама себе та має умову
припинення (умова припинення зупиняє функцію, запобігає нескінченим
рекурсивним викликам).

Рекурсивне обчислення факторіалу


У математиці факторіал числа n визначається як
n! = 1 ⋅ 2 ⋅ ... ⋅ n (добуток усіх цілих чисел від 1 до n).
Наприклад, 4! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ 5 = 120.
Зрозуміло, що факторіал легко обчислити з використанням циклу for:

def factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
92
return res

print(factorial(3))
print(factorial(5))

Результати:
6
120

Факторіал також можна обчислити за рекурсивною формулою:


n! = n * (n-1)!
n! = 1, якщо n = 0 або n = 1
Тоді рекурсивна функція обчислення факторіалу є такою:

def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n - 1)

print(factorial(3))
print(factorial(5))

Результати:

6
120

У рекурсивних функціях виділяється дві серії кроків:


1. рекурсивне занурення;
2. рекурсивне повернення.
Ці серії кроків для factorial(5) схематично представлені на рисунку 2.3:

93
Рис. 2.3. Схема рекурсивного занурення та повернення

Рекурсивне занурення триватиме доти, доки параметр не сягне граничного


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

2. Технологія створення рекурсивних функцій

Зазвичай рекурсивні функції містять умовний оператор такої форми:


if досягнуто кінцевого кроку:
цей крок виконується
else:
задача за допомогою рекурсії ділиться на простіші
підзадачі

Обмеження рекурсії:
Кожного разу, коли функція викликає себе, вона використовує деяку
пам’ять. Таким чином, рекурсивна функція вимагає значно більше пам’яті, ніж
звичайна. Python зупиняє виклики функцій після глибини 1000 викликів. Якщо
викликати:

print(factorial(3000))

то виводиться повідомлення про помилку:


RuntimeError: maximum recursion depth exceeded

94
Приклад 2.6. Створити програму, в якій реалізовано рекурсивне
обчислення добутку двох натуральних чисел через додавання.
Використаємо рекурсивне співвідношення:

mult(m,n) = m + mult(m,n-1), якщо n > 1 та mult(m,1) = m

Тоді:

def mult(m,n):
if n == 1:
return m
else:
return m + mult(m,n - 1)

print(mult(3,6))
print(mult(8,7))

Результати:
18
56

Практичні завдання
Завдання 1. Вибрати завдання та створити програму, що містить рекурсивну
функцію:
1.1. Знайти НСД (найбільший спільний дільник) двох натуральних чисел за
алгоритмом Евкліда.
1.2. Знайти n-не число Фібоначчі. (Числа Фібоначчі u0,u1,u2,…
визначаються так: u0=0, u1=1, un=un-1+un-2 при n=2,3,…).
1.3. Обчислити число тюльпанів, вирощених садівником за n років, якщо він
посадив 10 цибулин тюльпанів. Річний врожай складає 22 цибулини на
кожний посаджений тюльпан.
1.4. Обчислити суму перших n натуральних чисел.
1.5. Обчислити число рибок, вирощених в акваріумі за n років, якщо
спочатку було дві рибки, а потім число рибок збільшувалося
пропорційно числу років, тобто 4, 12, 48 і т.д.
1.6. Обчислити суму додатних цілих чисел за формулою n+(n-2)+(n-4)...
(поки n-x =< 0). Наприклад,
Уведено число (6) Очікуваний результат: 12
Уведено число (10) Очікуваний результат: 30
1.7. Обчислити значення 'a' в степені 'b' через множення.
95
1.8. Задано ціле число n. Вивести на екран числа від 0 до n у зворотному
порядку. Наприклад,
Уведено число (6) Очікуваний результат: 6, 5, 4, 3, 2, 1, 0
1.9. Обчислити суму цифр цілого числа.
1.10.Обернути рядок з використанням рекурсії.
1.11.Дана монотонна послідовність, у якій кожне натуральне число k
зустрічається рівно k раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…
По заданому натуральному n вивести перші n членів цієї послідовності. 
1.12.Дано натуральне число n>1. Вивести усе прості множники цього числа в
порядку неспадання з урахуванням кратності. 
1.13.Дано натуральне число N. Вивести усі його цифри, розділюючи іх
пропусками При рішенні цієї задачі не дозволяється використовувати
рядки, списки, масиви, цикли.
1.14.Обчислити n-ну часткову суму гармонічного ряду

1.15.Дано два цілих невід’ємних числа. Обчислити функцію Аккермана


A(m,n):

Завдання 2. Використовуючи рекурсію, виконати завдання №2 тема №5


«Функції користувача».

Контрольні запитання
1. Як рекурсія реалізується в програмуванні?
2. Що є необхідним і достатнім засобом реалізації рекурсії?
3. Які функції називаються рекурсивними?
4. Скільки триває рекурсивне занурення?
5. Скільки триває рекурсивне повернення?
6. Що називається глибиною рекурсії?
7. Яке значення поверне f(4) після виклику наступної функції?
def f(n):
if n == 1:
return 1
else:
return n + f(n - 1)

96
Тема № 13. Алгоритми сортування. Бінарний пошук
Мета: навчитися сортувати списки різними методами та здійснювати бінарний
пошук у відсортованих списках.
Теоретичні питання
План
1. Сортування методом вставки.
2. Сортування методом вибору.
3. Сортування методом обміну.
4. Бінарний пошук.

У комп’ютерних науках алгоритм сортування – це алгоритм, який


розташовує елементи списку в певному порядку. Найчастіше використовуються
числовий та лексикографічний порядки. Ефективне сортування є важливим для
оптимізації інших алгоритмів, таких як алгоритми пошуку та злиття. Результати
будь-якого алгоритму сортування повинні відповідати двом умовам:
1. елементи відсортованого списку розташовані в неспадному порядку
(кожний елемент є не меншим за попередній);
2. елементи переставляються, але всі вхідні елементи зберігаються.

1. Сортування методом вставки

На кожному кроці цього методу масив розділений на дві частини: ліву –


відсортовану, праву – невідсортовану. Елемент правої частини вставляється до
лівої так, щоб ліва частина залишалася відсортованою.
Python-програма сортування списку методом вставки є такою:

def insertion_sort(A):
# цикл сортування починається з другого елемента
# (індекс 1)
for j in range(1,len(A)):
# наступний елемент вставляється у відсортовану
частину списку
key = A[j]
# елемент, з якого починається порівняння
i = j-1

# переміщення ключового елемента поки він менший


#за елемент відсортованої частини і
# його індекс більший за -1
while (i > -1) and key < A[i]:
A[i+1]=A[i] # переміщення елемента списку вправо
97
i=i-1 # перехід до наступного елемента

# A[i] не більше, ніж ключовий елемент,


# який стає на місце з індексом i+1
A[i+1] = key
return A

x = [5,2,4,6,1,3]
insertion_sort(x)
print(x)

Результат:

[1, 2, 3, 4, 5, 6]

2. Сортування методом вибору

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


міняється з першим. Далі обирається найменший серед n-1 елементів і
міняється з другим. Так до тих пір, поки не залишиться найбільший елемент.
Python-програма сортування списку методом вибору є такою:

def selection_sort(A):
for i in range(len(A)):
# визначення позиції для мінімального елемента
min_position = i

# знаходження мінімального елемента


for j in range(i+1, len(A)):
if A[min_position] > A[j]:
min_position = j

# обмін місцями знайденого мінімального елемента


# і елемента на мінімальні позиції
A[i],A[min_position] = A[min_position],A[i]

return A

x=[5,2,1,9,0,4,6]
selection_sort(x)
98
print(x)

Результат:

[0, 1, 2, 4, 5, 6, 9]

3. Сортування методом обміну


Використання методу обміну, або методу бульбашки передбачає, що
сусідні елементи списку порівнюються і за необхідності міняються місцями до
тих пір, поки масив не буде впорядкований.
При створенні програми впорядкування елементів списку здійснюється за
допомогою вкладених циклів. Зовнішній цикл забезпечує перегляд списку n-1
разів. Внутрішній цикл призначено для фактичного виконання операцій
порівняння та обміну.
Python-програма сортування списку методом обміну є такою:

def bubble_sort(A):

# визначення діапазону для порівняння елементів


# (1-ша ітерація: n, 2-га ітерація: n-1 і т.д.)
for i in range(len(A)-1,0,-1):

# Comparing within set range


for j in range(i):

# порівняння у заданому діапазоні


if A[j] > A[j+1]:

# обмін
A[j],A[j+1] = A[j+1],A[j]

return A

x=[5,1,2,3,9,8,0]
bubble_sort(x)
print(x)

Результат:

[0, 1, 2, 3, 5, 8, 9]

99
Приклад 2.7. Задано текстовий файл staff.txt , який містить прізвища
співробітників установи та розмір їхньої премії:

Шевченко 4500
Петренко 6500
Гаврилюк 4400
Абель 7800
Аврамов 1800
Бор 2200
Вуленко 2700
Добренко 6700
Кривенко 2000
Шведов 5600

Розробити програму, в результаті роботи якої дані із файлу заносяться у


список. Список відсортувати за зростанням розміру премії:

with open('staff.txt','r') as f:
# ініціалізація списку для зберігання всіх даних
# із файлу
total_data = []
# цикл опрацювання файлу
for line in f:
# розщеплення рядка файлу на прізвище
# і значення премії
record=line.split()
# перетворення значення премії на дійсне число
record[1]=float(record[1])
# виведення запису на екран
print(record)
# додавання запису до списку
total_data.append(record)
print()

print("=========")

# виведення отриманого списку на екран


print(total_data)

def bubble_sort(A,k):
100
for i in range(len(A)-1,0,-1):
for j in range(i):
if A[j][k] > A[j+1][k]:
A[j],A[j+1] = A[j+1],A[j]
return A

# другий аргумент у виклику функції показує,


# що сортувати за елементом з індексом 1
bubble_sort(total_data,1)

print("=========")

# виведення на екран даних, відсортованих за розміром премії


for i in range(len(total_data)):
print('{:10} - {:.2f} грн.'.format(total_data[i][0],
total_data[i][1]))

Результати:

['Шевченко', 4500.0]
['Петренко', 6500.0]
['Гаврилюк', 4400.0]
['Абель', 7800.0]
['Аврамов', 1800.0]
['Бор', 2200.0]
['Вуленко', 2700.0]
['Добренко', 6700.0]
['Кривенко', 2000.0]
['Шведов', 5600.0]

=========
[['Шевченко', 4500.0], ['Петренко', 6500.0], ['Гаврилюк',
4400.0], ['Абель', 7800.0], ['Аврамов', 1800.0], ['Бор',
2200.0], ['Вуленко', 2700.0], ['Добренко', 6700.0],
['Кривенко', 2000.0], ['Шведов', 5600.0]]
=========
Аврамов - 1800.00 грн.
Кривенко - 2000.00 грн.
Бор - 2200.00 грн.
101
Вуленко - 2700.00 грн.
Гаврилюк - 4400.00 грн.
Шевченко - 4500.00 грн.
Шведов - 5600.00 грн.
Петренко - 6500.00 грн.
Добренко - 6700.00 грн.
Абель - 7800.00 грн.

4. Бінарний пошук
Можна виділити два види пошуку: лінійний та бінарний.
У процесі лінійного пошуку елементи заданого списку опрацьовуються
послідовно, відбувається перевірка – чи дорівнює шуканий елемент поточному
елементу списку. Особливості:
 проста та зрозуміла техніка пошуку;
 застосовується до невідсортованих списків;
 неефективний у порівнянні з бінарним пошуком, особливо для великих
обсягів даних.
У процесі бінарного пошуку використовується алгоритм, за яким
знаходиться позиція (індекс) деякого елементу у відсортованому списку.
Замість послідовного опрацювання бінарний пошук починається з опрацювання
середнього елементу. Якщо це шуканий елемент, пошук закінчено. Якщо
шуканий елемент більше середнього, виключається з опрацювання ліва частина
списку і середній елемент. Якщо шуканий елемент є у списку, то він
знаходиться в правій частині. Особливості:
 може бути застосований тільки до відсортованого списку;
 ефективніший у порівнянні з бінарним пошуком.
Розглянемо алгоритм пошуку числа 32 у списку [4, 8, 9, 10, 24, 32, 45, 56]:
1. Опрацювати середній елемент списку – 24.
2. Порівняти число 24 з числом 32. 24 < 32.
3. Виключити з опрацювання 24 та числа зліва від нього
([4, 8, 9, 10, 24, 32, 45, 56]).
4. Знайти середній елемент правої частини списку – 45.
5. Порівняти число 45 з числом 32. 45 > 32.
6. Виключити з опрацювання 45 та числа справа від нього
([4, 8, 9, 10, 24, 32, 45, 56]).
7. Порівняти єдиний неопрацьований елемент списку з числом 32. 32 = 32.
Пошук успішно завершено.

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


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

102
def selection_sort(A):
for i in range(len(A)):
min_position = i
for j in range(i+1, len(A)):
if A[min_position] > A[j]:
min_position = j
A[i],A[min_position] = A[min_position],A[i]
return A

def binary_search(A, item):


'''функція повертає індекс шуканого елемента, якщо він є
у списку,
інакше повертає -1'''

# ініціалізація меж пошуку


first = 0
last = len(A)-1

# ініціалізація логічної змінної пошуку


found = False

# цикл пошуку триває поки нижня межа менше або дорівнює


# правій і елемент не знайдено
while first<=last and not found:
pos = 0
# знаходження індексу середнього елемента
mid_point = (first + last)//2

# перевірка чи шуканий елемент є середнім


if A[mid_point] == item:
pos = mid_point
found = True
else:
# якщо шуканий елемент менший за середній,
# ігнорувати праву частину
if item < A[mid_point]:
last = mid_point-1
# якщо шуканий елемент більший за середній,
# ігнорувати ліву частину
103
else:
first = mid_point+1

# опрератор спрацьовує, якщо елемент не знайдено


if not found:
pos = -1

return found, pos

x=[5,2,1,9,0,4,6]
selection_sort(x)
print(x)

key = int(input('Enter your key for seach -> '))


result, index = binary_search(x,key)
print(result, index)

Результати:
[0, 1, 2, 4, 5, 6, 9]
Enter your key for seach -> 4
True 3

Enter your key for seach -> 3


False -1

Практичні завдання
Завдання 1. Увести коди та протестувати програми трьох запропонованих
методів сортування та програму бінарного пошуку.
Завдання 2. Реалізувати рекурсивну версію функції бінарного пошуку.
Завдання 3. Застосувати один із методів сортування та бінарний пошук для
розв’язання задачі згідно варіанту за номером у журналі (не дозволяється
використовувати вбудовані функції сортування):
3.1. Дано два списки чисел, довжиною N та M відповідно (1 ≤ N,
M ≤ 20000). Упорядкувати перший список за неспаданням. Для
кожного числа другого списку визначити номер першого та останнього
входження цього числа у першому списку.
3.2. Дано список, елементами якого є рядки – назви пункту відправлення та
пункту призначення. Відсортувати дані за незростанням пунктів
відправлення. З’ясувати, скільки відправлень було із заданого пункту.

104
3.3. Дано цілочисловий список. Використовуючи метод сортування
вибором, переставити елементи таким чином, щоб непарні елементи
залишалися на своїх місцях, а парні стояли по зростанню. Вивести
номер першого входження заданого парного числа.
3.4. На планеті «Аурон» атмосфера практично відсутня, тому вона відома
своїми перепадами температур у різних точках. Відомо, що ці перепади
у межах від -100С до 100С. Вченим вдалося визначити значення
температур в N ділянках цієї планети. Необхідно створити список назв
ділянок та їх температур. Упорядкувати температури ділянок за
неспаданням. Вивести назви сусідніх ділянок до ділянки із заданою
температурою.
3.5. Прізвища студентів та їх бали містяться у файлі Student.txt. Вивести
відсортовану інформацію за неспаданням. Знайти усіх студентів, бали
яких вище заданого балу.
3.6. Дано файл Cities.txt, у кожному рядку якого записані через пропуск
назва міста та його поштовий індекс. Відсортувати дані за зростанням
поштового індексу. Знайти назву міста за заданим індексом.
3.7. Дано список найменувань N товарів, їх кількості та ціни. Відсортувати
товари за назвою в алфавітному порядку. Вивести інформацію про
заданий товар.
3.8. Дано файл зі списком людей із пільгами різних категорій.
Упорядкувати інформацію тільки про учасників АТО за прізвищем в
алфавітному порядку. Вивести інформацію про учасників АТО, чиї
прізвища починаються на задану літеру.
3.9. Колекціонер рідкісних книг виявив книгу, написану незнайомою
мовою, яка використовувала символи схожі на символи англійського
алфавіту. Книга містила короткий невпорядкований покажчик індексів
символів. Колекціонер намагався за індексами визначити алфавіт
незнайомої мови. Необхідно вивести алфавіт невідомої мови. Знайти
символ за введеним індексом.
3.10. Працівники комп’ютерної фірми вирішили систематизувати
інформацію про отримані у поточному місяці комплектуючі за
зростанням дати (дня місяця). Вивести інформацію про всі отримані
товари заданого числа поточного місця.
3.11. Дано файл з інформацією про співробітників підприємства: прізвище,
посада, стаж роботи, зарплата. Дані розділені символом «;».
Відсортувати дані за посадою в алфавітному порядку. За вказаною
посадою вивести прізвища та зарплати співробітників.
3.12. За всі роки навчання у школі Оля отримала N дипломів за участь в
шкільних олімпіадах. Кожен диплом має ширину w та висоту h.
Дівчина вирішила розташувати в окремих рядах на стіні усі дипломи
однакової висоти, починаючи від найменшої до найбільшої висоти.
Вивести кількість дипломів із заданою висотою.

105
3.13. Дано список N книг (назва, кількість та ціна). Відсортувати список за
зростанням ціни. Вивести інформацію про книги із заданою ціною.
3.14. Дано рядок слів, розділених пропусками. Необхідно відсортувати слова
у рядку так, щоб найкоротші були на початку рядка, а найдовші у кінці.
Вивести слова заданої довжини.
3.15. Дано список найменувань N товарів, їх кількості та ціни. Відсортувати
товари за спаданням кількості. Вивести інформацію про товари із
заданою кількістю.
3.16. Дано список з N елементів, що містять інформацію про спортсменів,
зокрема, прізвище та вагу у кг. Відсортувати список за неспаданням
ваги. Вивести кількість спортсменів, чия вага в межах від X до Y кг.

Контрольні запитання
1. З якою метою використовується сортування структур даних?
2. У чому полягає суть сортування методом вставки? На аркуші паперу
відсортуйте список [54, 26, 93, 17, 77, 31, 20] методом вставки.
3. У чому полягає суть сортування методом вибору? На аркуші паперу
відсортуйте список [54, 26, 93, 17, 77, 31, 20] методом вибору.
4. У чому полягає суть сортування методом обміну? На аркуші паперу
відсортуйте список [54, 26, 93, 17, 77, 31, 20] методом обміну.
5. У чому полягають особливості лінійного пошуку?
6. У чому полягають особливості бінарного пошуку?
7. Дано відсортований список [3, 5, 6, 8, 11, 12, 14, 15, 17, 18]. Скільки ітерацій
циклу відбудеться для пошуку елемента із значенням 8?

106
Розділ ІІІ. Графіка у Python. Модуль tkinter
Тема № 14. Програмування графіки з використанням
модуля tkinter. Базові фігури
Мета: навчитися створювати графічні об’єкти з використанням модуля tkinter.
Теоретичні питання
План
1. Створення полотна.
2. Створення базових фігур.

tkinter – це кросплатформенна бібліотека для розробки графічного


інтерфейсу мовою Python. tkinter розшифровується як tool kit interface
(інтерфейс інструментів розробки).

1. Створення полотна
Полотно є об’єктом класу Canvas, який входить до модуля tkinter.
Для створення полотна необхідно вказати його ширину (width) та висоту
(height):

# імпорт модуля
from tkinter import *

# створення порожнього вікна


tk = Tk()
# надання заголовку
tk.title('Empty window')
# створення полотна
canvas = Canvas(tk, width=500, height=500, bg='light cyan')
# відображення полотна
canvas.pack()

1. імпорт вмісту модуля tkinter. Конструкція


from <имя модуля> import *
дає змогу звертатися до вмісту модуля, не вказуючи кожен раз його ім’я.
2. при виконанні оператора tk = Tk() відбувається створення змінної та
збереження в ній об’єкту класу Tk. Об’єкт tk створює порожнє вікно, до
якого можна додавати кнопки, рядки введення, полотна для малювання
тощо. Tk є основним класом модуля tkinter. Без створення об’єкта

107
класу Tk працювати з графікою або анімацією за допомогою tkinter
неможливо.
3. створення полотна, перший аргумент – змінна tk. Полотно не з’явиться
на екрані до введення команди canvas.pack(), яка вмикає його
відображення.

Синтаксис створення полотна:


w = Canvas(tk, option=value, ...)
Можливі опції:
 bd – ширина рамки полотна;
 bg – колір фону полотна. Default is a light gray, about '#E4E4E4'

Система координат розташована на полотні так, як показано на рисунку 3.1:

Рис. 3.1. Розташування системи координат на полотні

2. Створення базових фігур


Зображення ліній
У tkinter для зображення ліній на полотні використовуються координати
в пікселях.
Щоб зобразити діагональну лінію: почати з координат (0, 0), закінчити
координатами (500, 500). Ці координати передаються методу create_line(),
що зображує лінію на полотні:

from tkinter import *


tk = Tk()
canvas = Canvas(tk, width=500, height=500)
tk.title('Lines')
canvas.pack()
canvas.create_line(0, 0, 500, 500)

Cинтаксис зображення лінії:

108
create_line(coords, **options)

Можливі опції:
 dash= тире-шаблон, заданий у вигляді списку довжин сегмента.
Зображуються лише непарні сегменти
 fill= Колір лінії. Default is “black”.
 width= товщина лінії Default is 1.0.
 arrow= стрілка, FIRST – стрілка зображується на початку лінії, LAST –
наприкінці, BOTH – з обох боків

Приклад 3.1. Розробити програму побудови ліній різних видів:

from tkinter import *


tk = Tk()
canvas = Canvas(tk, width=500, height=500)
tk.title('Lines')
canvas.pack()

canvas.create_line(15, 25, 200, 25)


canvas.create_line(300, 35, 300, 200, dash=(4, 2))
canvas.create_line(55, 85, 155, 85, 105, 180, 55, 85)
canvas.create_line(15,250,200,250,width=2,arrow=LAST)
canvas.create_line(15,270,200,270,width=2,arrow=FIRST)
canvas.create_line(15,290,200,290,width=2,arrow=BOTH)

Результат:

109
Зображення прямокутників
Щоб зобразити прямокутник необхідно вказати координати лівого
верхнього (x0, y0) та правого нижнього (x1, y1) кутів. Ці координати
передаються методу create_rectangle(), що зображує прямокутник на
полотні:

from tkinter import *


tk = Tk()
tk.title('Rectangles')
canvas = Canvas(tk, width=500, height=500, bg='light cyan')
canvas.pack()

canvas.create_rectangle(10, 10, 50, 50)

Синтаксис зображення прямокутника:


create_rectangle(x0, y0, x1, y1, options)

Можливі опції:
 dash= рамка прямокутника має вигляд тире
 fill= Колір прямокутника. Default is “black”.
 width= Ширина рамки Default is 1.0.
 outline= Колір рамки

Приклад 3.2. Розробити програму побудови прямокутників різних видів:


110
from tkinter import *
tk = Tk()
tk.title('Rectangles')
canvas = Canvas(tk, width=500, height=500, bg='light cyan')
canvas.pack()

canvas.create_rectangle(30, 70, 120, 140, outline="black",


fill="yellow")
canvas.create_rectangle(150, 70, 240, 140, outline="black",
fill="orange")
canvas.create_rectangle(270, 70, 370, 140, outline="black",
fill="lime green")

x = 75
y = 160
canvas.create_rectangle(x,y,x+80,y+50,fill="white",outline="
blue")

Результат:

Приклад 3.3. Розробити програму побудови прямокутників, координати кутів


яких є випадковими числами:

from tkinter import *


import random
tk = Tk()
111
canvas = Canvas(tk, width=500, height=500)
canvas.pack()

def random_rectangle(width, height):


x1 = random.randrange(width)
y1 = random.randrange(height)
x2 = x1 + random.randrange(width)
y2 = y1 + random.randrange(height)
canvas.create_rectangle(x1, y1, x2, y2)

for i in range(10):
random_rectangle(400, 400)

Результат:

Щоб додати колір до створеного малюнка, можна скористатися командою


askcolor() модуля tkinter.colorchooser. Для розуміння використання
зазначених модуля і команди слід в оболонці Shell набрати команди:

В оболонці Shell набрати команди:


>>> from tkinter.colorchooser import *
>>> askcolor()

112
Результат може бути таким:
((235.91796875, 86.3359375, 153.59765625), '#eb5699')

Три числа — це насиченість червоної, зеленої та синьої складових кольору.


Можна зберегти кортеж у змінній та звертатися до шістнадцятирічного
значення за його індексом.
Тоді програма набуде вигляду:

from tkinter import *


from tkinter.colorchooser import *
import random
tk = Tk()
canvas = Canvas(tk, width=500, height=500)
canvas.pack()

def random_rectangle(width, height, fill_color):


x1 = random.randrange(width)
y1 = random.randrange(height)
x2 = x1 + random.randrange(width)
y2 = y1 + random.randrange(height)
canvas.create_rectangle(x1, y1, x2, y2,fill=fill_color)

for i in range(5):
c = askcolor()
random_rectangle(400, 400, c[1])

Зображення багатокутників
Щоб зобразити багатокутник необхідно вказати координати його кутів
(рис. 3.2). Ці координати передаються методу create_polygon(), що
зображує прямокутник на полотні:

113
Рис. 3.2. Особливості зображення багатокутника

from tkinter import *


tk = Tk()
tk.title('Polygons')
canvas = Canvas(tk, width=500, height=500, bg='light cyan')
canvas.pack()

canvas.create_polygon([250,100],[200,150],[300,150],
fill="yellow")

Синтаксис зображення багатокутника:

create_polygon(x0, y0, x1, y1, …, options)

Можливі опції:
smooth= якщо smooth=1, то отримується сплайнова крива

Приклад 3.4. Розробити програму побудови багатокутників різних видів:

from tkinter import *


tk = Tk()
tk.title('Polygons')
canvas = Canvas(tk, width=500, height=500, bg='white')
canvas.pack()

canvas.create_polygon([250,100],[200,150],[300,150],
fill="yellow")

114
canvas.create_polygon([300,80],[400,80],[450,75],[450,200],
[300,180],[330,160],outline="white",smooth=1)

points = [150, 150, 200, 170, 240, 230, 210, 250, 150, 200,
100, 250]
canvas.create_polygon(points, outline='#FF1111',
fill='#11FF11', width=2)

Результат:

Зображення еліпсів
Щоб зобразити еліпс необхідно вказати координати лівого верхнього (x0,
y0) та правого нижнього (x1, y1) кутів описаного навколо еліпса прямокутника
(рис. 3.3). Ці координати передаються методу create_oval(), що зображує
еліпс на полотні:

Рис. 3.3. Особливості зображення еліпса

115
from tkinter import *
tk = Tk()
tk.title('Ovals')
canvas = Canvas(tk, width=500, height=500, bg='light cyan')
canvas.pack()

canvas.create_oval([20,200],[150,300],fill="gray50")

Синтаксис зображення еліпса:

create_oval(x0, y0, x1, y1, …, options)

Приклад 3.5. Розробити програму побудови еліпсів різних видів:

from tkinter import *


tk = Tk()
tk.title('Ovals')
canvas = Canvas(tk, width=500, height=500, bg='white')
canvas.pack()

canvas.create_oval([20,100],[150,200],fill="gray50")
canvas.create_oval(10, 10, 80, 80, outline="#FF1111",
fill="#11FF11", width=2)
canvas.create_oval(110, 10, 210, 80, outline="#FF1111",
fill="#11FF11", width=2)

Результат:

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

from tkinter import *


tk = Tk()
tk.title('Arcs')
canvas = Canvas(tk, width=500, height=500, bg='light cyan')
canvas.pack()

canvas.create_arc(10, 10, 200, 100, extent=180, style=ARC)

Синтаксис зображення дуг:

create_rectangle(x0, y0, x1, y1, options)

Можливі опції:
 extent= ширина дуги в градусах;
 style= стиль дуги. За замовченням (PIESLICE) – вся частина круга, що
задана дугою (рис. 3.4);
 start= початковий кут для побудови дуги.

117
Рис. 3.4. Можливі стилі дуги

Приклад 3.6. Розробити програму побудови дуг різної ширини:


from tkinter import *
tk = Tk()
tk.title('Arcs')
canvas = Canvas(tk, width=500, height=500, bg='light cyan')
canvas.pack()

canvas.create_arc(10, 10, 200, 100, extent=180, style=ARC)


canvas.create_arc(10, 90, 200, 160, extent=45, style=ARC)
canvas.create_arc(10, 160, 200, 240, extent=90, style=ARC)
canvas.create_arc(10, 240, 200, 320, extent=135, style=ARC)
canvas.create_arc(10, 320, 200, 400, extent=180, style=ARC)
canvas.create_arc(10, 400, 200, 480, extent=359, style=ARC)

Результат:

118
Приклад 3.7. Розробити програму побудови дуг різного стилю:

from tkinter import *


tk = Tk()
tk.title('Arcs')
canvas = Canvas(tk, width=500, height=500, bg='white')
canvas.pack()

canvas.create_arc([60,130],
[130,230],start=0,extent=140,fill="lightgreen")
canvas.create_arc([150,130],[220,230],start=0,extent=140,
style=CHORD,fill="green")
canvas.create_arc([240,130],[310,230],start=0,extent=140,
style=ARC,outline="darkgreen",width=2)

Результат:

Практичні завдання
Завдання 1. Розробити програму зображення графічних об’єктів з
можливістю зміни товщини лінії, кольору та стилю лінії та заливки:
 прямої лінії;
 еліпса;
 дуги;
 зафарбованого прямокутника.

119
Завдання 2. Розробити програму зображення графічних фігур згідно варіанту
з можливістю зміни товщини лінії, кольору та стилю лінії та заливки:

2.1.

2.2.

2.3.

2.4.

2.5.

2.6.

2.7.

120
2.8.

2.9.

2.10.

2.11.

2.12.

2.13.

2.14.

2.15.

121
Завдання 3. Розробити програму зображення малюнку тварини згідно
варіанту, змінивши на власний розсуд колір і стиль ліній та заливки:

1 2 3

4  5  6

7  8  9 

122
10  11  12 

13  14 15

123
16  17  18

19  20 

Завдання 4. Написати програму для створення зображення транспорту згідно


варіанту, змінивши на власний розсуд колір і стиль ліній та заливки:

1 2

124
3  4 

5  6

7  8

9  10 

125
11  12

13  14

15 

Контрольні запитання
1. Яке призначення модуля tkinter?
2. Який алгоритм створення полотна модуля tkinter?
3. Що буде зображено в результаті виконання коду:
canvas.create_line([(5, 55), (55, 55), (30, 95)],
arrow=LAST)?

126
Тема № 15. Відображення тексту та імпортованих зображень
Мета: навчитися створювати текстові надписи на полотні tkinter та імпортувати
зображення формату gif.
Теоретичні питання
План
1. Створення текстових надписів на полотні tkinter.
2. Імпорт зображень формату gif.

1. Створення текстових надписів на полотні tkinter


Щоб відобразити один або кілька рядків тексту на полотні, необхідно
створити текстовий об’єкт за допомогою методу create_text():

from tkinter import *


tk = Tk()
tk.title('Text')
canvas = Canvas(tk, width=500, height=500, bg='light cyan')
canvas.pack()

canvas.create_text(220, 250, text='Hello!',font=('Courier',


22))

Cинтаксис створення текстового об’єкта:

create_text(x, y, option, ...)

Можливі опції:
 font= вибір параметрів тексту
 fill= Колір тексту. Default is “black”.

Приклад 3.8. Розробити програму побудови дуг різного стилю:

from tkinter import *


tk = Tk()
tk.title(' Text ')
canvas = Canvas(tk, width=500, height=500, bg='white')
canvas.pack()

canvas.create_text(150, 100, text='Журилась під осінь


малесенька жабка:')

127
canvas.create_text(130, 120, text='- Уже потемніла у соняха
шапка',fill='blue')
canvas.create_text(150, 150, text='І жовтими
стали',font=('Times', 15))
canvas.create_text(200, 200, text='Листочки у
клена,',font=('Helvetica', 20))
canvas.create_text(220, 250, text='А я ще і
досі',font=('Courier', 22))
canvas.create_text(220, 300, text='Зелена-зелена...',
font=('Papyrus',30))

Результат:

2. Імпорт зображень формату gif

Засобами tkinter можна завантажувати тільки зображення формату GIF


(файли з розширенням .gif). Щоб вивести на екран графічне зображення,
необхідно спочатку його завантажити, а потім викликати метод
create_image():

from tkinter import *


tk = Tk()
canvas = Canvas(tk, width=500, height=500)
tk.title('Import images')
canvas.pack()
128
my_image = PhotoImage(file='earth.gif')
canvas.create_image(0, 0, anchor=NW, image=my_image)

До функції PhotoImage() передається шлях доступу до файлу. Коли


зображення завантажене, оператор canvas.create_image(0, 0, anchor =
NW, image = my_image) виводить його на екран. Координати (0, 0)
визначають позицію зображення, аргумент anchor = NW означає, що
зображення повинно виводитися з лівого верхнього кута (інакше за відправну
точку береться центр зображення). Останній іменований аргумент image вказує
на змінну з завантаженим зображенням.
Синтаксис виведення зображення:

create_ image(x, y, option, ...)

Можливі опції:
 image= зображення буде відображено;
 anchor= за замовченням використовується anchor = tk.CENTER, що
означає, що зображення розташовано в центрі положення (x, y).
Наприклад, якщо вказано
anchor = tk.S, зображення буде розташовано так, щоб точка (x, y) була
розташована в центрі нижнього (південного) краю зображення. Схема
використання аргумента anchor наведена на рис. 3.5:

Рис. 3.5. Схема використання аргумента anchor

129
Практичні завдання
Завдання 1. Змінити код програми завдання № 3 теми № 14 «Графічні
примітиви» таким чином, щоб у верхній частині зображення відображалися
прізвище, ім’я та група студента, а внизу – назва тварини.
Завдання 2. Засобами модуля tkinter оформити куплет і приспів улюбленої
пісні, фото виконавців та малюнок нот (анімація gif). Куплети і приспів
повинні мати різне форматування.

Контрольні запитання
1. Яке призначення аргументу font методу create_text()?
2. Який формат повинні мати зображення, що завантажуються до полотна
tkinter?
3. Що буде зображено на екрані у результаті виконання коду:
canvas.create_text((205, 205), text="Hello,\nmy friend!",
justify=CENTER, anchor="se")?

Тема № 16. Створення анімації


Мета: навчитися створювати програми з відображенням простої анімації.
Теоретичні питання
Модуль tkinter не орієнтований на створення анімації, але розробити
програми з простими анімаційними ефектами з його допомогою можна.
Наприклад, наступний код зображує зафарбований трикутник, який рухається
екраном зліва направо:
import time

from tkinter import *


tk = Tk()
canvas = Canvas(tk, width=500, height=500)
canvas.pack()
canvas.create_polygon(10, 10, 10, 60, 50, 35)
for x in range(0, 60):
canvas.move(1, 5, 0)
tk.update()
time.sleep(0.05)

Команди тіла циклу призначені для переміщення трикутника екраном.


Метод canvas.move() переміщує графічний об’єкт, змінюючи значення його
x- і y-координат на зазначені величини зсуву. Зокрема, команда
130
canvas.move(1, 5, 0) зрушує об’єкт, ідентифікатор якого дорівнює 1 (це
розглядуваний трикутник), на 5 пікселів вправо і 0 пікселів вниз. А для
повернення трикутника на початкове місце можна використати команду
canvas.move (1, -5, 0).
Метод tk.update() служить для примусового оновлення
(перемальовування) зображення на екрані. Остання команда в тілі циклу
time.sleep(0.05) задає 0,05-секундну паузу.
Програма, при виконанні якої трикутник рухається по діагоналі вправо і
вниз є такою:
import time
from tkinter import *
tk = Tk()
canvas = Canvas(tk, width=400, height=400)
canvas.pack()
canvas.create_polygon(10, 10, 10, 60, 50, 35)
for x in range(0, 60):
canvas.move(1, 5, 5)
tk.update()
time.sleep(0.05)

Щоб перемістити трикутник по діагоналі назад у початкову позицію,


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

for x in range(0, 60):


canvas.move(1, -5, -5)
tk.update()
time.sleep(0.05)

Приклад 3.9. Розробити програму побудови кола, що обертається навколо


вертикальної прямої:

from tkinter import *

tk = Tk()
tk.title('Rotating oval')
canvas = Canvas(tk, width=640, height=480, bg='white')
canvas.pack()

def paint(x1,y1,x2,y2):
'''функція створення овала та зафарбовування його

131
білим прямокутником'''

i=(x1-x2)//20

canvas.create_oval(x1,y1,x2,y2,fill="green",outline="black")
diapason=1
while diapason< 50:
diapason=diapason+1
canvas.create_line(140,20,140,21)
tk.update()

canvas.create_rectangle(x1,y1,x2,y2,fill="white",outline="wh
ite")
canvas.create_line(140,20,140,340)

# обертання овала
for x in range(5):
for x in range(40,240,20):
paint(x,40,140,280)
for x in range(240,40,-20):
paint(x,40,140,280)

# побудова овала після обертання


canvas.create_oval(40,40,140,280,fill="green",outline="black"
)

Результат – зображений нижче овал обертається навколо вертикальної прямої:

132
Практичні завдання
Завдання 1. Змінити код програми завдання № 3 теми № 14 «Графічні
примітиви» таким чином, щоб тварина рухалася.
Завдання 2. Створити програму, що реалізує обертання фігури навколо осі
згідно варіанта:

2.3.
2.1.

2.4.
2.2.

133
2.5. 2.9.  

2.10.
2.6.

2.11.
2.7.

2.12.
2.8.

134
2.13. 2.14.

2.15.

Контрольні запитання
1. Як здійснити примусове оновлення зображення на екрані?
2. Як задати паузу в процесі оновлення зображення на екрані?

Тема № 17. Використання модуля random при створенні


графічних зображень
Мета: навчитися створювати програми з використанням модулів tkinter та
random.
Теоретичні питання
Розглянемо програмний код:

from tkinter import *


tk = Tk()
tk.title('Ovals')
canvas = Canvas(tk, width=500, height=500, bg='light
cyan')
canvas.pack()

for i in range(25):
canvas.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60,
fill='gray70')

135
Результат:

Створення такої фігури є можливим завдяки тому, що в циклі for


координати лівого верхнього та правого нижнього кутів описаних навколо
еліпса прямокутників залежать від ітераційної змінної i та змінюються разом із
нею.

Приклад 3.10. Розробити програму побудови концентричних кіл,


зафарбованих випадково вибраним кольором.
Розглянемо створення програми поетапно.
Крок 1. Побудувати 25 концентричних кіл. Програмний код є таким:

from tkinter import *


import random

tk = Tk()
tk.title('Concentric Circles')
canvas = Canvas(tk, width=500, height=500, bg='white')
canvas.pack()

# ініціалізація центра концентричних кіл


x=250
y=250
# ініціалізація змінної, що визначає розмір кола
r=10

for i in range(25):
r=i*10
canvas.create_oval(x-r, y-r, x+r, y+r)

136
Результат:

Крок 2. До методу create_oval() додати колір кола та ширину лінії:

canvas.create_oval(x-r, y-r, x+r, y+r, outline='navy',


width=3)

Результат:

137
Крок 3. Зробити кола різнокольоровими. Для цього додати до програми
список кольорів та змінити цикл побудови концентричних кіл. Програма
набуває вигляду:

colors = ['aqua', 'blue', 'fuchsia', 'green', 'maroon',


'orange', 'pink', 'purple', 'red','yellow', 'violet',
'indigo', 'chartreuse', 'lime', 'salmon', 'coral',
'navy','gold','magenta','green']
x=250
y=250
r=10

for i in range(25):
# випадковий вибір кольору зі списку
color = random.choice(colors)
r=i*10
canvas.create_oval(x-r,y-
r,x+r,y+r,outline=color,width=11)

Результат:

Крок 4. Модернізувати програму так, щоб були використані всі кольори


tkinter.
Карта кольорів tkinter представлена за посиланням:
http://www.science.smith.edu/dftwiki/index.php/Color_Charts_for_TKinter
138
Таблиця кодування кольорів представлена за посиланням:
https://www.w3schools.com/cssref/css_colors.asp
Звернути увагу на кодування кольорів у форматі HEX. З використанням
цього формату програма набуває вигляду:

from tkinter import *


from random import randrange

tk = Tk()
tk.title('Concentric Circles')
canvas = Canvas(tk, width=500, height=500, bg='white')
canvas.pack()

x=250
y=250
r=10

for i in range(25):
# формування випадкового кольору у форматі "#rrggbb"
color = '#' + "".join("{:02x}".format(randrange(256))
for x in range(3))
r=i*10
canvas.create_oval(x-r, y-r, x+r, y+r, outline=color,
width=11)

Результат:

139
Приклад 3.11. Розробити програму заповнення екрана колами з
випадковим значенням радіуса і зафарбованих випадково вибраним кольором:

from tkinter import *


from random import randint, randrange

tk = Tk()
tk.title('My happy circles')
canvas = Canvas(tk, width=640, height=480, bg='black')
canvas.pack()

while True:
# випадкові центр (x,y) та радіус r
x = randint(0, 640)
y = randint(0, 480)
r = randint(5, 50)

# випадковий колір у форматі "#rrggbb"


color = '#' + "".join("{:02x}".format(randrange(256))
for x in range(3))

# побудова кола
canvas.create_oval(x, y, x+r, y+r, fill=color)

140
# оновлення екрана
tk.update()

Результат:

Практичні завдання
Завдання 1. Намалювати 100 фігур випадкового розміру, випадкового
кольору, розташованих так, як указано на малюнку (згідно варіанту):

1.1. 1.2.

141
1.3. 1.7.

1.4. 1.8.

1.5. 1.9.

1.6. 1.10.
142
1.11. 1.14.

1.12. 1.15.

1.13.

Завдання 2. Використовуючи random, намалювати (згідно варіанту):


2.1. випадкові круги, поки не буде намальовано підряд зелений і червоний
круги
2.2. випадкові круги, поки не буде намальовано помаранчевий круг з радіусом
більше 30
2.3. випадкові круги, поки не буде намальовано три синіх або один коричневий
2.4. випадкові круги, поки не буде намальовано підряд два жовтих

143
2.5. 30 випадкових кругів, порахувати, скільки було намальовано кругів
однакового радіусу
2.6. 30 випадкових кругів, порахувати, скільки було намальовано блакитних
кругів з радіусом менше 25
2.7. 30 випадкових кругів, порахувати, скільки було намальовано рожевих
кругів з радіусом більше 45
2.8. 30 випадкових кругів. Якщо відносно вертикальної лінії по центру канви
центр круга розташований:
 праворуч – червоного кольору,
 ліворуч – фіолетового кольору,
 на лінії – помаранчевого
2.9. 100 випадкових кругів. Після того, як буде намальовано 5 кругів кольору
фуксія, не малювати круги такого кольору
2.10.30 фігур, вибираючи їх випадковим чином (квадрат, еліпс, трикутник,
прямокутник) випадкового кольору, розміру та розташування. Підрахувати
кількість кожної з фігур
2.11.випадкові фігури (квадрат, круг, трикутник, прямокутник). Завершити тоді,
коли буде намальовано трикутник синього кольору і еліпс жовтого
кольору
2.12.випадкові круги. Завершити тоді, коли буде намальовано 7 зелених та 8
жовтих кругів
2.13.випадкові фігури (квадрат, круг, трикутник, прямокутник). Завершити тоді,
коли буде намальовано круг синього кольору та площею більше 10 і менше
50
2.14.випадкові прямокутники. Завершити тоді, коли буде намальовано квадрат
зеленого кольору
2.15.випадкові фігури (еліпс, трикутник, прямокутник). Завершити тоді, коли
буде намальовано круг коричневого кольору та площею більше 50
Контрольні запитання
1. Який формат кольору називається "#rrggbb"?
2. Як випадковим чином задати колір при зафарбовуванні об’єкта полотна
tkinter?

144
Рекомендовані джерела

1. The Python Standard Library [Electronic recourse]. – Access mode:


https://docs.python.org/3/library/index.html
2. The Python Tutorial [Electronic recourse]. – Access mode:
https://docs.python.org/3/tutorial/index.html

145

You might also like