Professional Documents
Culture Documents
методичка питон 2019-2020new2
методичка питон 2019-2020new2
Програмув
ання
Навчально-методичний посібник
мовою
Python.
Структурн
ий підхід
Кропивницький – 2020
Рецензенти:
Авраменко О.В. – доктор фізико-математичних наук, професор кафедри
прикладної математики, економіки та статистики ЦДПУ імені В. Винниченка
Паращук С.Д. – кандидат фізико-математичних наук, доцент кафедри
інформатики та інформаційних технологій ЦДПУ імені В. Винниченка
Баранюк О.Ф. – кандидат технічних наук, доцент кафедри інформатики та
інформаційних технологій ЦДПУ імені В. Винниченка
3
Розділ І. Структури управління порядком обчислень
Тема №1. Мова програмування Python.
Інтерактивний інтерпретатор Python Shell
Мета: навчитися: 1) використовувати інтерактивний інтерпретатор Python Shell
для виконання простих обчислень 2) використовувати інтегроване середовище
Python для розробки програм.
Теоретичні питання
План
1. Поняття мови програмування.
2. Середовище програмування та його складові.
3. Мова програмування Python.
4. Інтегроване середовище розробки Python. Інтерактивний інтерпретатор
Python Shell.
Практичні завдання
Завдання 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
>>>12.0/4.0
>>>12/4
>>>7.0/2.0
>>>7./2.
>>>7./2
>>>7/2
>>>1./2.
>>>1/2
>>>(27 / 3)
>>>(27 // 3)
>>>(27 % 3)
7
Завдання 6. Вибрати завдання відповідно до номера прізвища у журналі.
Знайти результат обчислення виразу, використовуючи інтерактивний
інтерпретатор Python Shell:
12−1.1+3∗4
1¿ −5.6 ;
1.1+10.4
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
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?
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
Наприклад:
# Виведення значень 1 2 3 41
print(1,2,3,4)
Результати:
1 2 3 4
1;2;3;4
1:2:3:4#
# Виведення рядка
print("Розробити алгоритм.\nСтворити
програму.\nПротестувати програму.")
1
Знак # означає коментар до програми. Коментарі не опрацьовуються програмою.
10
Результати:
Розробити алгоритм.
Створити програму.
Протестувати програму.
# Табуляція зліва
print("'\tStartOver'")
# Табуляція справа
print("'StartOver\t'")
# Табуляція по центру
print("'Start\tOver'")
Результати:
' StartOver'
'StartOver '
'Start Over'
Форматування виведення
Доцільно використовувати метод str.format як параметр функції print():
Результати:
Привіт, Влад . Тобі 19 років.
Привіт, Влад. Тобі 19 років.
Результати:
x = 2, y = 3
42
42
3.141593
003.14
У дійсні числа:
12
a = float(input(“Enter number a->”))
b = float(input(“Enter number b->”))
c = a + b
print('c=', c)
Практичні завдання
Завдання 1. Відкрити вікно Редактора файлів (File → New File або
натиснути Ctrl + N). Наступні завдання виконати у цьому вікні. Набрати
такий код:
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)
import math
value1 = 5
value2 = 25
value3 = 100
print(math.sqrt(value1))
print(math.sqrt(value2))
print(math.sqrt(value3))
import math
print(math.e)
15
print(math.pi)
print(math.cos(math.pi))
print(math.sin(math.pi))
Контрольні запитання
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.
Оператори порівняння
Оператори порівняння використовуються для формування логічних виразів.
Логічним виразом називається такий вираз, внаслідок обчислення якого
одержується логічне значення True або False. Оператори порівняння, що
використовуються у Python, наведені у табл. 1.2.
Наприклад:
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
18
not завжди дає результат, протилежний not x
значенню операнда
or дає результат True тоді і тільки тоді, коли x or y
хоча б один операнд має значення True
and дає результат True тоді і тільки тоді, коли x and y
обидва операнди мають значення True
# Print a or b is True
print(a or b)
Результати:
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 <умова>:
<оператор>
<оператор>
...
<оператор>
<наступний_оператор>
# Уведення даних
price = 14.27
n = input('Уведіть кількість товару -> ')
if n!=0:
cost=n*price
print('Загальна вартість товару {:.2f}
грн'.format(cost))
print('Обчислено.')
20
# Оператор наступний після умовного
print('After conditional')
# уведення даних
amount = float(input("Уведіть вартість покупки -> "))
# виведення результату
print ("До сплати {:.2f} грн".format(to_pay))
21
Результати:
Уведіть вартість покупки -> 830
Знижка складає 41.50 грн
До сплати 788.50 грн
if <умова>:
<оператор(и)>
elif <умова>:
<оператор(и)>
elif <умова>:
<оператор(и)>
...
[else:
<оператор(и)>]
Практичні завдання
Завдання 1. Увести коди та протестувати програми з прикладів 1.1 – 1.3.
Завдання 2. Виконати у вікні Python Shell (Оболонка Python). Знайти
значення логічних виразів:
>>> 2 < 5
>>> 3 > 7
>>> x = 11
>>> x > 10
>>> 2 * x < x
>>> type(True)
23
a = int(input('Enter number a->'))
b = int(input('Enter number b->'))
if a>=b:
max=a
else:
max=b
print('max=', max)
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. Обчислити
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 визначається складений
оператор?
27
Цикли for є циклами з визначеною кількістю повторень (ітерацій).
У Python реалізовано підхід, що базується на послідовному опрацюванні
сукупності об’єктів, наприклад, рядка, списку або кортежу2.
Де
<послідовність> – сукупність (колекція) об’єктів;
<оператор(и)> – допустимий оператор Python, який визначається відступом і
виконується один раз для кожного елемента в <послідовність>;
<змінна> – змінна циклу, яка набуває значення наступного елемента в
<послідовність> з кожною ітерацією циклу.
Результат:
0 1 2 3 4 5 6 7 8 9
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
Результат:
25 23 21 19 17 15 13 11 9 7 5 3
for i in range(3.3):
print(i, end =" ")
Результат:
TypeError: 'float' object cannot be interpreted as an
integer
# виведення результату
print('sum =', total)
Результат:
sum = 55
while <умова>:
<оператор(и)>
Де
<оператор(и)> – блок операторів, що повторно виконуються, так зване тіло
циклу; визначається відступом;
<умова> – логічний вираз, що містить одну або декілька змінних, які
ініціалізуються до початку циклу та змінюються в тілі циклу, так звані
параметри циклу. Оператори тіла циклу виконуються, якщо умова є істинною.
Коли умова набуває значення False, виконання програми переходить до
першого оператора після тіла циклу.
Приклад 1.4. Розробити програму обчислення суми із заданою точністю
(>0). Необхідна точність досягнута, якщо додавання наступного доданка
∞
# уведення точності
eps = float(input('Уведіть необхідну точність -> '))
# виведення результату
print('s= {:.6f}'.format(s))
Результати:
Практичні завдання
Завдання 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,
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
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?
36
Розглянемо функцію square(x), яка підносить число x до другого
степеню. Функція square(x) приймає одне число як параметр і
повертає квадрат цього числа як результат. Діаграма роботи функції
показана на рисунку 2.1:
result=square(10)
print(result)
або
print(square(10))
# опис функції
def sum_of_integer(n):
result = (n * (n + 1)) / 2
return result
Результати:
0.0
55.0
15.0
37
2. Область видимості та час життя змінних
def my_func():
x = 10
print("Змінна всередині функції -> ",x)
x = 20
my_func()
print("Змінна поза функцією -> ",x)
Output
Практичні завдання
Завдання 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
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 )
√ .
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)
# порожній кортеж
a = ()
# кортеж з одного елемента
41
b = ("one",)
# кортеж з двох елементів
c = ("one", "two")
print(len(a))
print(len(b))
print(len(c))
Результати:
0
1
2
Результат:
cat
t[0] = 'lion'
Results
TypeError: 'tuple' object does not support item assignment
42
# множення двох кортежів
total = checks * 3
print(total)
Результати:
Результати:
4000
500
stacy
aaron
Результат:
7500
43
Перевірка приналежності за допомогою оператора in
# перевірка приналежності
if "cat" in pair:
print("Cat found")
# перевірка приналежності
if "bird" not in pair:
print("Bird not found")
Результати:
Cat found
Bird not found
Результат:
1 dog
Результати:
1
44
3
0
print(lst)
Результати:
[1, 2, 6, 3]
Результати:
45
Дописування списку до заданого списку за допомого методу
extend()
a = [1, 2, 3]
b = [4, 5, 6]
Результат:
[1, 2, 3, 4, 5, 6]
# обернення
lst.reverse()
print(lst)
# сортування
lst.sort()
print(lst)
# сортування та обернення
lst.reverse()
46
print(lst)
Результати:
Результати:
Результат:
47
3
Результат:
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?
Результати:
[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]
import random
Результати:
0.06916083822830588
8
45
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)
Результат:
Функція enumerate()
Розглянемо функцію enumerate(), яка додає лічильник до деякої
послідовності і повертає об’єкт перерахування. Синтаксис цієї функції є
таким:
enumerate(iterable[, start=0])
де
iterable - послідовність, ітератор або об’єкти, що підтримують ітерацію
start (необов'язковий аргумент) – лічильник починає нумерацію з цього числа
(за замовченням – 0 ).
Наприклад:
fruits = ['apple', 'banana', 'grapes', 'pear']
# перетворення на список
print(list(enumerate_fruits))
Результати:
<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
print(fruits)
Результати:
55
Рис. 2.2. Процес перестановки двох елементів списку з
використанням тимчасової змінної
Результат:
# перестановка елементів
l[i], l[j] = l[j], l[i]
Результат:
Практичні завдання
Завдання 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. Як здійснити перестановку двох елементів списку?
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
60
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
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]
1 -2 -2 -2
2 1 -2 -2
2 2 1 -2
2 2 2 1
Практичні завдання
Завдання 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 знайти найменший
елемент, що знаходиться у відповідній заштрихованій області:
Контрольні запитання
1. Як використовуються списки при опрацюванні матриць?
2. Якими способами задаються елементи матриць?
3. Як здійснюється доступ до елементів матриці?
4. Які особливості використання вкладених циклів?
5. Як знайти максимальний / мінімальний елемент матриці?
6. Як визначити елементи матриці, що знаходяться на головній діагоналі?
7. Як визначити елементи матриці, що знаходяться над головною діагоналлю?
8. Як визначити елементи матриці, що знаходяться під головною діагоналлю?
65
Теоретичні питання
План
1. Словники та операції над ними.
Створення словників:
1 спосіб
plants = {"radish":2,"squash":4,"carrot":7}
print(plants, "\n")
Результат:
2 спосіб
plants = {}
Результат:
print(plants["radish"])
Результат:
66
2
print(plants.get("radish"))
print(plants.get("tuna"))
Результати:
2
None
animals = {}
animals["monkey"] = 1
animals["tuna"] = 2
animals["giraffe"] = 4
# перевірка приналежності
if "tuna" in animals:
print("Has tuna")
else:
print("No tuna")
Результати:
Has tuna
67
No elephant
print("Length:", len(animals))
Результат:
Length: 2
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()
68
# сортування ключів словника
keys = sorted(hits.keys())
print(keys)
Результати:
Результати:
Place: house
Cost: 1300
Place: apartment
Cost: 1000
«Розпаковка» словника
69
for k, v in data.items():
# виведення на екран ключа і значення
print(k, v)
Результати:
a 1
c 3
b 2
Результати:
radish
carrot
squash
Результат:
{'mac': 1, 'linux': 1}
# перший словник
pets1 = {"cat": "feline", "dog": "canine"}
70
# другий словник
pets2 = {"dog": "animal", "parakeet": "bird"}
print(pets1)
print(pets2)
Результати:
Результати:
# список ключів
keys = ["bird", "plant", "fish"]
71
# створення словника із заданих ключів
d = dict.fromkeys(keys, 5)
print(d)
Результат:
Практичні завдання
Завдання 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.'))
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
word = 'instagram'
Результати:
stag
insta
gram
stagra
gr
76
# пошук індексу першого входження підрядка "picture"
i = value.find("picture")
print(i)
Результат:
4
# цикл пошуку
while True:
# збільшення значення позиції на 1
i = value.find("picture", i + 1)
# виведення результатів
print(i)
Результати:
4
19
Результат:
77
19
Результати:
3
2
value = "aabc"
Результати:
aayz
xabc
Результати:
60
4
th a string example....wow!!! th the really string
52
0
# виведення результатів
print(result)
print(result2)
Результати:
79
abc
a,b,c
test = "cat"
# виведення результатів
print(test)
print(reversed)
print(sorted)
Результати:
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:]))
83
1. Поняття текстового файлу
text=f.read()
print(text)
Результати:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
text=f.readline()
print(text)
Результат:
Monday
text=f.readline()
print(text)
Результат:
Tuesday
85
text=f.readlines()
print(text)
Результати:
# закриття файлів
f.close()
g.close()
Результати:
Оператор with
Результати:
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)
12 35 21
123 12 15
12 18 89
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()
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
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n - 1)
print(factorial(3))
print(factorial(5))
Результати:
6
120
93
Рис. 2.3. Схема рекурсивного занурення та повернення
Обмеження рекурсії:
Кожного разу, коли функція викликає себе, вона використовує деяку
пам’ять. Таким чином, рекурсивна функція вимагає значно більше пам’яті, ніж
звичайна. Python зупиняє виклики функцій після глибини 1000 викликів. Якщо
викликати:
print(factorial(3000))
94
Приклад 2.6. Створити програму, в якій реалізовано рекурсивне
обчислення добутку двох натуральних чисел через додавання.
Використаємо рекурсивне співвідношення:
Тоді:
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. Як рекурсія реалізується в програмуванні?
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. Бінарний пошук.
def insertion_sort(A):
# цикл сортування починається з другого елемента
# (індекс 1)
for j in range(1,len(A)):
# наступний елемент вставляється у відсортовану
частину списку
key = A[j]
# елемент, з якого починається порівняння
i = j-1
x = [5,2,4,6,1,3]
insertion_sort(x)
print(x)
Результат:
[1, 2, 3, 4, 5, 6]
def selection_sort(A):
for i in range(len(A)):
# визначення позиції для мінімального елемента
min_position = i
return A
x=[5,2,1,9,0,4,6]
selection_sort(x)
98
print(x)
Результат:
[0, 1, 2, 4, 5, 6, 9]
def bubble_sort(A):
# обмін
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("=========")
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
print("=========")
Результати:
['Шевченко', 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
x=[5,2,1,9,0,4,6]
selection_sort(x)
print(x)
Результати:
[0, 1, 2, 4, 5, 6, 9]
Enter your key for seach -> 4
True 3
Практичні завдання
Завдання 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. Створення базових фігур.
1. Створення полотна
Полотно є об’єктом класу Canvas, який входить до модуля tkinter.
Для створення полотна необхідно вказати його ширину (width) та висоту
(height):
# імпорт модуля
from tkinter import *
107
класу Tk працювати з графікою або анімацією за допомогою tkinter
неможливо.
3. створення полотна, перший аргумент – змінна tk. Полотно не з’явиться
на екрані до введення команди canvas.pack(), яка вмикає його
відображення.
108
create_line(coords, **options)
Можливі опції:
dash= тире-шаблон, заданий у вигляді списку довжин сегмента.
Зображуються лише непарні сегменти
fill= Колір лінії. Default is “black”.
width= товщина лінії Default is 1.0.
arrow= стрілка, FIRST – стрілка зображується на початку лінії, LAST –
наприкінці, BOTH – з обох боків
Результат:
109
Зображення прямокутників
Щоб зобразити прямокутник необхідно вказати координати лівого
верхнього (x0, y0) та правого нижнього (x1, y1) кутів. Ці координати
передаються методу create_rectangle(), що зображує прямокутник на
полотні:
Можливі опції:
dash= рамка прямокутника має вигляд тире
fill= Колір прямокутника. Default is “black”.
width= Ширина рамки Default is 1.0.
outline= Колір рамки
x = 75
y = 160
canvas.create_rectangle(x,y,x+80,y+50,fill="white",outline="
blue")
Результат:
for i in range(10):
random_rectangle(400, 400)
Результат:
112
Результат може бути таким:
((235.91796875, 86.3359375, 153.59765625), '#eb5699')
for i in range(5):
c = askcolor()
random_rectangle(400, 400, c[1])
Зображення багатокутників
Щоб зобразити багатокутник необхідно вказати координати його кутів
(рис. 3.2). Ці координати передаються методу create_polygon(), що
зображує прямокутник на полотні:
113
Рис. 3.2. Особливості зображення багатокутника
canvas.create_polygon([250,100],[200,150],[300,150],
fill="yellow")
Можливі опції:
smooth= якщо smooth=1, то отримується сплайнова крива
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(), що зображує
еліпс на полотні:
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")
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(), що
зображує дугу на полотні:
Можливі опції:
extent= ширина дуги в градусах;
style= стиль дуги. За замовченням (PIESLICE) – вся частина круга, що
задана дугою (рис. 3.4);
start= початковий кут для побудови дуги.
117
Рис. 3.4. Можливі стилі дуги
Результат:
118
Приклад 3.7. Розробити програму побудови дуг різного стилю:
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
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.
Можливі опції:
font= вибір параметрів тексту
fill= Колір тексту. Default is “black”.
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))
Результат:
Можливі опції:
image= зображення буде відображено;
anchor= за замовченням використовується anchor = tk.CENTER, що
означає, що зображення розташовано в центрі положення (x, y).
Наприклад, якщо вказано
anchor = tk.S, зображення буде розташовано так, щоб точка (x, y) була
розташована в центрі нижнього (південного) краю зображення. Схема
використання аргумента anchor наведена на рис. 3.5:
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")?
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)
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. Як задати паузу в процесі оновлення зображення на екрані?
for i in range(25):
canvas.create_oval(5+(4*i),5+(3*i),(5*i)+60,(i)+60,
fill='gray70')
135
Результат:
tk = Tk()
tk.title('Concentric Circles')
canvas = Canvas(tk, width=500, height=500, bg='white')
canvas.pack()
for i in range(25):
r=i*10
canvas.create_oval(x-r, y-r, x+r, y+r)
136
Результат:
Результат:
137
Крок 3. Зробити кола різнокольоровими. Для цього додати до програми
список кольорів та змінити цикл побудови концентричних кіл. Програма
набуває вигляду:
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)
Результат:
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. Розробити програму заповнення екрана колами з
випадковим значенням радіуса і зафарбованих випадково вибраним кольором:
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)
# побудова кола
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.
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
Рекомендовані джерела
145