Програмування на мові Python (1) PDF
Document Details
Uploaded by OrderlySakura
Tags
Related
- IMT200 Homework 1 Solutions PDF
- Introduction to Computer Science Using Python PDF
- SDU CSS 115 Programming Fundamentals 1 (Python) Fall 2024 Practice 4 PDF
- Python Programming Lecture Notes PDF
- Network Programming Control Flow Functions OOP in Python PDF
- A Practical Introduction to Python Programming PDF
Summary
This document contains examples and tasks on Python programming. Lab work and theoretical explanations are provided. The content is focused on fundamental principles and tasks of programming using Python language.
Full Transcript
ЗМІСТ Лабораторна робота № 1. Арифметичні вирази, управляючі конструкції та масиви у мові Python............................................................... 3 Лабораторна робота № 2. Функції у мові Pyt...
ЗМІСТ Лабораторна робота № 1. Арифметичні вирази, управляючі конструкції та масиви у мові Python............................................................... 3 Лабораторна робота № 2. Функції у мові Python......................................... 19 Лабораторна робота № 3. Робота з файлами у мові Python........................ 26 Лабораторна робота № 4. Робота з рядками у мові Python......................... 29 Лабораторна робота № 5. Об’єктно-орієнтоване програмування у мові Python.......................................................................................................... 39 Лабораторна робота № 6. Збір даних з веб-документів за допомогою мови Python.................................................................................... 42 Лабораторна робота № 7. Побудова графіків математичних функцій у мові Python....................................................................................... 47 Список літератури............................................................................................. 58 3 Лабораторна робота №1 Тема: Арифметичні вирази, управляючі конструкції та масиви у мові Python Мета: навчитися створювати найпростіші програми на мові Python, використовуючи оператори вибору і циклів, арифметичні вирази та масиви Теоретична частина Python – високорівнева мова програмування загального призначення, орієнтована на підвищення продуктивності розробника і читання коду. Python підтримує декілька парадигм програмування, в тому числі структурну, об'єктно-орієнтовану, функціональну, імперативну та аспектно- орієнтовану. На даний час існує дві гілки Python – 2.х та 3.х. Ми будемо працювати переважно з гілкою 3.х. Існують різні інтерпретатори для мови Python. Офіційний інтерпретатор можна завантажити на сайті https://www.python.org Також Ви можете використати один з варіантів численних збірок Python, наприклад: Anaconda, Python(x, y), EnthoughtCanopy, WinPython тощо. Основні принципи синтаксису мови Python: 1. Кінець рядка є кінцем інструкції (крапка з комою не потрібна). х=5 print(2 + х) 2. Вкладені інструкції об'єднуються у блоки за величиною відступів. Відступ може бути будь-яким, головне, щоб в межах одного вкладеного блоку відступ був однаковий (рекомендується робити відступ 4 пробіли). if х == 10: print('yes') 3. Вкладені інструкції в Python записуються відповідно до одного і того ж шаблону, коли основна інструкція завершується двокрапкою, слідом за чим розташовується вкладений блок коду, зазвичай з відступом під рядком основної інструкції. Розглянемо на прикладах основи роботи з Python. #Базові типи даних (вказуються неявно) a=5 # int b = 7.0 # float c = 2>4 # boolean d = "World" # string e = 1.5 + 0.5j # complex print(type(a)) print(type(b)) print(type(c)) print(type(d)) print(type(e)) 3 print(a, b, c, d, e.real, e.imag) #Перетворення типів даних int(True) # == 1 float(True) # == 1.0 str(True) # = ‘True’ bool(0) # == False bool(0.0) # == False bool(1) # == True bool(10) # == True В Python є особливий спосіб обміну змінних значеннями: (a, b) = (b, a) Він використовується дуже часто. Даний метод працює завжди, навіть якщо змінні різних типів (в цьому випадку вони обмінюються не тільки значеннями, але і типами). Круглі дужки в цьому записі можна опустити: a, b = b, a #Основні арифметичні операції a=5 # int b = 7.0 # float c=1+2 #3 d=5-3 #2 e=a*b # 35.0 f = 3.0 / 2 # 1.5 g=3/2 #1 h=5%3 #2 j = 10**7.3 # 19952623.1497 print(type(a)) print(type(b)) print(type(c)) print(type(d)) print(type(e)) print(type(f)) print(type(g)) print(type(h)) print(type(j)) print(a, b, c, d, e, f, g, h, j) #Вбудовані математичні функції (необхідне підключення бібліотеки math) from math import * 4 a=1 b=2 x = sqrt(a*b)/(exp(a)*b)+a*exp((2*a)/b) print(x) Таблиця 1 – Функції в бібліотеці math Назва функції Призначення функції math.ceil(x) Повертає округлене x як найближче ціле значення типу float, яке дорівнює або перевищує x (округлення "вгору"). math.copysign(x, y) Повертає число x зі знаком числа y. На платформі, яка підтримує знак нуля copysign (1.0, -0.0) дасть -1.0. math.fabs(x) Повертає абсолютне значення (модуль) числа x. В Python є вбудована функція abs, але вона повертає модуль числа з тим же типом, що число, fabsже завжди повертає значення типу float. math.factorial(x) Повертає факторіал цілого числа x, якщо x не є цілим виникає помилка ValueError. math.floor(x) На противагу ceil(x) повертає округлене x як найближче ціле значення типу float, менше або рівне x (округлення "вниз"). math.fmod(x, y) Аналогічна функції fmod(x, y) бібліотеки C. Зазначимо, що це не те ж саме, що вираз Python x%y. Бажано використовувати при роботі з об'єктами float, в той час як x% y більше підходить для int. math.frexp(x) Являє число в експоненційному записі x = m*2e і повертає мантису m (дійсне число, модуль якого лежить в інтервалі від 0.5 до 1) і порядок e (ціле число) як пару чисел (m, e). Якщо x = 0, то повертає (0.0, 0) math.fsum(iterable) Повертає float суму від числових елементів ітеруємого об'єкта. math.isinf(x) Перевіряє, чи є float об'єкт x плюс або мінус нескінченністю, результат відповідно True або False. math.isnan(x) Перевіряє, чи є float об'єкт x об'єктом NaN (not a number). math.ldexp(x, i) Повертає значення x*2i, тобто здійснює дію, зворотну функції math.frexp(x). 5 math.modf(x) Повертає частину, що йде після коми і цілу частину від float числа. Обидва результати зберігають знак початкового числа x і представлені типом float. math.trunc(x) Повертає цілу частину числа x у вигляді int об'єкта. Статечні і логарифмічні функції math.exp(x) Повертає exp. math.log(x [, base]) При передачі функції одного аргументу x, повертає натуральний логарифм x. При передачі двох аргументів, другий береться як основа логарифма. math.log1p(x) Повертає натуральний логарифм від x + 1. math.log10(x) Повертає десятковий логарифм x. math.pow (x, y) Повертає x в степені y. math.sqrt(x) Квадратний корінь (square root) з x. Тригонометричні функції math.acos(x) Повертає арккосинус x, в радіанах. math.asin(x) Повертає арксинус x, в радіанах. math.atan(x) Повертає арктангенс x, в радіанах. math.atan2(y, x) Повертає atan(y / x), в радіанах. Результат лежить в інтервалі [-π, π]. Вектор, кінець, якого задається точкою (x, y) утворює кут з додатнім напрямком осі x. Тому ця функція має більш загальне призначення, ніж попередня. Наприклад й atan(1), й atan2(1, 1) дадуть в результаті pi/4, але atan2(-1, -1) це вже 3*pi/4. math.cos(x) Повертає косинус x, де x виражений в радіанах. math.hyp(x, y) Повертає евклідову норму, тобто sqrt(x**2+y**2). Зручно для обчислення гіпотенузи(hyp) і довжини вектора. math.sin(x) Повертає синус x, де x виражений в радіанах. math.tan(x) Повертає тангенс x, де x виражений в радіанах. Радіани в градуси і навпаки math.degrees(x) Конвертує значення кута x з радіан в градуси. math.radians(x) Конвертує значення кута x з градусів в радіани. #Введення даних x = input('Введіть х\n') #дані, що вводяться мають тип рядка y = input('Введіть y\n') x = int(x) #здійснюємо перетворення типів 6 y = int(y) print (x+y) #додаємо два числа, що були введені користувачем #Виведення даних за форматом for i in range(10): A = i*18 print("%02i\t%.1f" % (i, A)) Таблиця 2 – Основні методи форматування даних для виведення %s рядок %d ціле число %f десяткове подання з шістьма знаками після коми %e "наукове" подання %g компактне подання десяткового числа %xz виведення у форматі z в поле ширини x, вирівнювання по правій стороні %-xz виведення у форматі z в поле ширини x, вирівнювання по лівій стороні %.yz виведення у форматі z з y знаками після коми %x.yz виведення у форматі z с y знаками після коми в поле ширини x %% виведення знаку процента \n перехід на новий рядок #Оператор умови if for i in range(-50,51,10): if i0: print("%i - тепло" % (i)) else: print("%i - нормально" % (i)) #Цикл for for i in range(10): print(i) A = [] for i in range(10): A.append(i**i) B = zeros(10, dtype=int) 7 for i in range(10): B[i] = i**i print(A) print(B) #Цикл while i=0 while i=2) 3) Дано матрицю розміром 5х4. Поміняти місцями перший рядок і третій рядок. Варіант 2 1) 11 Число вводиться користувачем у консолі Python. 2) Знайти суму всіх чисел від 1 до n, кратних числу k. 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти максимальний елемент. Обчислити середнє арифметичне від’ємних елементів масиву. Вивести додатні елементи на екран у зворотному порядку. Варіант 3 1) Числа m та n вводяться користувачем у консолі Python. 2) Комп'ютер «загадав» число від 1 до 100 (використати функцію random). Користувач вводить із клавіатури деяке число й одержує одну з відповідей: “Моє число більше”, “Моє число менше”, “Ви вгадали”. Гра повторюється доти поки число не вгадане. 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти мінімальний елемент. Обчислити суму додатніх непарних елементів масиву. Вивести додатні елементи на екран. Варіант 4 1) Число m вводиться користувачем у консолі Python. 2) Знайти добуток всіх непарних чисел від х до у 3) Знайти середнє арифметичне елементів кожного рядка матриці Q(l,m) і відняти його з елементів цього рядка. Варіант 5 1) Числа х та у вводяться користувачем у консолі Python. 2) Знайти найбільший спільний дільник чисел x та y 3) Дано двовимірний масив розмірністю 4х6, заповнений цілими числами. Сформувати одномірний масив, кожний елемент якого дорівнює найбільшому елементу відповідного рядка. Варіант 6 1) Число вводиться користувачем у консолі Python. 2) Дано натуральне число n, обчислити у = 135…(2n-1). 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти максимальний додатний елемент. Обчислити суму додантіх парних елементів масиву. Вивести від’ємні елементи на екран у зворотному порядку. 12 Варіант 7 1) Число m вводиться користувачем у консолі Python. 2) Почавши тренування, спортсмен у перший день пробіг 10 км. Щодня він збільшував денну норму на 10% норми попереднього дня. Який сумарний шлях пробіжить спортсмен за n днів? 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти мінімальний додатний елемент. Обчислити середнє арифметичне додатніх елементів масиву. Вивести ненульові елементи на екран у зворотному порядку. Варіант 8 1) Числа х та у вводяться користувачем у консолі Python. 2) Обчислити факторіал, використовуючи цикл. Число n вводить користувач. 3) Дано двовимірний масив розмірністю 4х6, заповнений цілими числами. Сформувати одномірний масив, кожний елемент якого дорівнює сумі елементів відповідного рядка. Варіант 9 1) Число вводиться користувачем у консолі Python. 2) Обчислити , використавши цикл, числа x та n вводяться користувачем. 3) Визначити, чи є в двовимірному масиві стовпець, що складається тільки з додатніх або нульових елементів. Варіант 10 1) Число вводиться користувачем у консолі Python. 2) Щомісячна стипендія студента становить A грн., а витрати на проживання перевищують стипендію й становлять В грн. на місяць. Ріст цін щомісяця збільшує витрати на 5%. Складіть програму розрахунку суми грошей, яку необхідно одноразово попросити в батьків, щоб можна було прожити навчальний рік (10 місяців), використовуючи тільки ці гроші й стипендію. 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти мінімальний додатний елемент. Обчислити добуток непарних елементів масиву. Вивести від’ємні елементи на екран. 13 Варіант 11 1) Число m вводиться користувачем у консолі Python. 2) Визначити,чи являється n простим числом. 3) Дано одномірний масив, що складається з N дійсних елементів. – Знайти мінімальний додатний елемент. – Обчислити суму парних елементів масиву. – Вивести масив на екран у зворотному порядку. Варіант 12 1) Число вводиться користувачем у консолі Python. 2) Одноклітинна амеба ділиться кожні 3 години на 2 клітини. Визначити скільки буде амеб через n годин. 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти максимальний від’ємний елемент. Обчислити середнє арифметичне непарних елементів масиву. Вивести від’ємні елементи на екран. Варіант 13 1) Числа та вводиться користувачем у консолі Python. 2) Визначити, чи являється число n надлишковим числом. Надлишкове число – додатне ціле число n, сума додатних дільників (відмінних від n) якого перевищує n. Число 48, наприклад, є надлишковим, оскільки 1+2+3+4+6+8+12+16+24=76, 76 > 48. 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти мінімальний від’ємний елемент. Обчислити середнє арифметичне додатних елементів масиву. Вивести додатні елементи на екран. Варіант 14 1) Числа та вводиться користувачем у консолі Python. 2) Спортсмен пробігає за 1-й день М км, кожний наступний день він збільшує норму пробігу на К%. Визначите через скільки днів норма пробігу може стати більше 50 км. 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти максимальний від’ємний елемент. Обчислити добуток від’ємних елементів масиву. Вивести ненульові елементи на екран у зворотному порядку. 14 Варіант 15 1) Числа та вводиться користувачем у консолі Python. 2) Знайти найменше спільне кратне чисел x та y. 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти мінімальний елемент. Обчислити добуток ненульових непарних елементів масиву. Вивести масив на екран у зворотному порядку. Варіант 16 1) Число m вводиться користувачем у консолі Python. 2) Дано натуральне число n, обчислити у = 246…(2n). 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти максимальний від’ємний елемент. Обчислити середнє арифметичне парних елементів масиву. Вивести ненульові елементи на екран у зворотному порядку. Варіант 17 1) Числа a та b вводяться користувачем у консолі Python. 2) Дано натуральне число n, обчислити. 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти максимальний елемент. Обчислити суму парних елементів масиву. Вивести від’ємні елементи на екран у зворотному порядку. Варіант 18 1) Числа та вводяться користувачем у консолі Python. 2) Знайти суму S квадратів чисел від 1 до N 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти максимальний додатний елемент. Обчислити добуток елементів масиву. Вивести додатні елементи на екран. Варіант 19 1) Число вводиться користувачем у консолі Python. 2) Знайти суму всіх парних чисел від x до y. 3) Дано одномірний масив, що складається з N цілочисельних елементів. 15 Знайти мінімальний додатний елемент. Обчислити суму додатних елементів масиву, кратних 3. Вивести не нульові елементи на екран. Варіант 20 1) Числа m та n вводяться користувачем у консолі Python. 2) Визначити, чи являється число n досконалим. Досконале число – натуральне число, яке дорівнює сумі всіх своїх дільників, напр., 6 (1 + 2 + 3 = 6), 28 (1 + 2 + 4 + 7 + 14 = 28). 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти мінімальний елемент. Обчислити добуток не нульових елементів масиву. Вивести додатні елементи на екран у зворотному порядку. Варіант 21 1) Число х вводиться користувачем у консолі Python. 2) Знайти перше число Фібоначчі, що буде більше заданого числа р (у послідовності Фібоначчі кожне наступне число дорівнює сумі двох попередніх: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377. F0=1, F1=1, F2=1, Fn=Fn-1+Fn- 2, n>=2). 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти максимальний елемент. Обчислити середнє арифметичне від’ємних елементів масиву. Вивести масив на екран у зворотному порядку. Варіант 22 1) Число х вводиться користувачем у консолі Python. 2) Визначити, чи являється число n недостатнім числом. Недостатнє число – натуральне число, сума власних дільників якого менша за саме число. Напр., 15 – недостатнє число, його дільниками є 1, 3 та 5, їх сума рівна 9, що менше 15. 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти максимальний додатний елемент. Обчислити суму елементів масиву. Вивести ненульові елементи на екран у зворотному порядку. Варіант 23 1) 16 Число х вводиться користувачем у консолі Python. 2) Помiняти порядок цифр числа n на зворотнiй. 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти максимальний від’ємний елемент. Обчислити суму від’ємних елементів масиву. Вивести додатні елементи на екран. Варіант 24 1) Число х вводиться користувачем у консолі Python. 2) Дано натуральне число N. Визначити найбільшу цифру і її позицію в числі (напр., N=573863, найбільшою є цифра 8, її позиція - четверта зліва). Для виконання завдання використати операції цілочисельного ділення та знаходження залишку від ділення. 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти максимальний елемент. Обчислити середнє арифметичне непарних елементів масиву. Вивести від’ємні елементи на екран. Варіант 25 1) Число х вводиться користувачем у консолі Python. 2) Дано ціле число М. Потрібно знайти найменше ціле від’ємне число k, при якому 3 k> M. 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти мінімальний від’ємний елемент. Обчислити добуток ненульових елементів масиву, кратних 3. Вивести від’ємні елементи на екран у зворотному порядку. Варіант 26 1) Число х вводиться користувачем у консолі Python. 2) Знайти суму всіх чисел від х до у, кратних числу 3. 3) Дано одномірний масив, що складається з N дійсних елементів. Знайти мінімальний додатний елемент. Обчислити добуток не нульових елементів масиву. Вивести ненульові елементи на екран у зворотному порядку. Варіант 27 1) Число х вводиться користувачем у консолі Python. 2) Знайти суму цифр числа n. 3) Дано одномірний масив, що складається з N дійсних елементів. 17 Знайти максимальний елемент. Обчислити середнє арифметичне додатних елементів масиву. Вивести від’ємні елементи на екран у зворотному порядку. Варіант 28 1) Числа m та n вводяться користувачем у консолі Python. 2) В інтервалі від A до B знайти суму та кількість всіх цілих чисел, що діляться на 3 без залишку й не діляться на 9 без залишку. 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти мінімальний елемент. Обчислити суму елементів масиву. Вивести додатні елементи на екран. Варіант 29 1) Число х вводиться користувачем у консолі Python. 2) Дано ціле невід’ємне число N. Якщо N - непарне, то вивести добуток 1·3·...·N; якщо N – парне, то вивести добуток 2·4·...·N. 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти максимальний елемент масиву. Обчислити середнє арифметичне елементів масиву. Вивести масив на екран у зворотному порядку. Варіант 30 1) Число х вводиться користувачем у консолі Python. 2) Дано натуральне число n. Отримати всі прості дільники цього числа. 3) Дано одномірний масив, що складається з N цілочисельних елементів. Знайти мінімальний від’ємний елемент. Обчислити суму від’ємних елементів масиву. Вивести додатні елементи на екран. Контрольні питання: 1. Які особливості та переваги мови Python Ви знаєте? 2. Назвіть основні принципи синтаксису мови Python. 3. Як здійснюється введення/виведення даних у мові Python? 4. Який синтаксис циклу for у мові Python? 5. Назвіть принципи роботи зі списками у мові Python. 18 Лабораторна робота №2 Тема: Функції у мові Python Мета: навчитися створювати власні функції у мові Python, Теоретична частина Функції Функція в python – об'єкт, який приймає аргументи і повертає значення. Зазвичай функція визначається за допомогою інструкції def. Визначимо найпростішу функцію: def add(x, y): return x + y Інструкція return каже, що потрібно повернути значення. У нашому випадку функція повертає суму x і y. Тепер ми її можемо викликати: >>> >>> add(1, 10) 11 >>> add('abc', 'def') 'abcdef' Функція може бути будь-якої складності і повертати будь-які об'єкти (списки, кортежі, і навіть функції). Функція може і не закінчуватися інструкцією return, при цьому функція поверне значення None: >>> >>> def func():... pass... >>> print(func()) None А ргументи функції Функція може приймати будь-яку кількість аргументів чи не приймати їх зовсім. Також поширені функції з довільним числом аргументів, функції з позиційними і іменованими аргументами, обов'язковими і необов'язковими. >>> >>> def func(a, b, c=2): # c - необов'язковий аргумент... return a + b + c... >>> func(1, 2) # a = 1, b = 2, c = 2 (за замовчуванням) 5 >>> func(1, 2, 3) # a = 1, b = 2, c = 3 6 >>> func(a=1, b=3) # a = 1, b = 3, c = 2 6 >>> func(a=3, c=6) # a = 3, c = 6, b не визначений - виникне помилка 19 Функція також може приймати змінну кількість позиційних аргументів, тоді перед ім'ям ставиться *: >>> >>> def func(*args):... return args... >>> func(1, 2, 3, 'abc') (1, 2, 3, 'abc') >>> func() () >>> func(1) (1,) Як видно з прикладу, args – це кортеж з усіх переданих аргументів функції, і зі змінною можна працювати так само, як і з кортежем. Функція може приймати і довільне число іменованих аргументів, тоді перед ім'ям ставиться **: >>> >>> def func(**kwargs):... return kwargs... >>> func(a=1, b=2, c=3) {'a': 1, 'c': 3, 'b': 2} >>> func() {} >>> func(a='python') {'a': 'python'} В змінній kwargs у нас зберігається словник, з яким ми, знову-таки, можемо робити все, що нам заманеться. Анонімні функції, інструкція lambda Анонімні функції можуть містити лише один вислів, але і виконуються вони швидше. Анонімні функції створюються за допомогою інструкції lambda. Крім цього, їх не обов'язково привласнювати змінній, як ми робили з інструкцією def func (): >>> >>> func = lambda x, y: x + y >>> func(1, 2) 3 >>> func('a', 'b') 'ab' >>> (lambda x, y: x + y)(1, 2) 3 >>> (lambda x, y: x + y)('a', 'b') 'ab' lambda функції, на відміну від звичайної, не потрібна інструкція return, а в іншому, вона поводиться точно так же: 20 >>> >>> func = lambda *args: args >>> func(1, 2, 3, 4) (1, 2, 3, 4) f = lambda x: x**2 + 4 Те ж саме, що: def f(x): return x**2 + 4 У загальному випадку будь-яка конструкція виду: def g(arg1, arg2, arg3,...): return expression Може бути записана як: g = lambda arg1, arg2, arg3,...:expression Lambda-функції дуже зручні для того, щоб визначати невеликі функції "на льоту" і тому дуже популярні серед багатьох програмістів. Lambda-функції часто використовуються для швидкого визначення функції як аргумент іншої функції. Doc strings В Python є домовленість про те, що рядки документації (doc strings) вставляються відразу після заголовка функції. Doc strings містять короткий опис мети функції та пояснюють сенс аргументів і значень. Doc strings розміщаються в потрійних лапках """, які дозволяють розбивати текст між ними в кілька рядків. Ось два приклади використання рядків документації у функціях, короткий і довгий: def C2F(C): """Convert Celsius degrees (C) to Fahrenheit.""" return (9.0/5)*C + 32 def line(x0, y0, x1, y1): """ Compute the coefficients a and b in the mathematical expression for a straight line y = a*x + b that goes through two points (x0, y0) and (x1, y1). x0, y0: a point on the line (floats). x1, y1: another point on the line (floats). return: coefficients a, b (floats) for the line (y=a*x+b). """ a = (y1 - y0)/float(x1 - x0) b = y0 - a*x0 return a, b 21 Запам'ятайте, що рядки документації повинні розташовуватися до всіх інструкцій функції. Doc strings це не просто коментарі, вони мають більші можливості. Наприклад, для вище описаної функції лінії виконується команда: print(C2F.__doc__) в результаті якої (як ви можете перевірити самі) виводиться весь укладений вміст Doc strings. Модулі Підключення модуля зі стандартної бібліотеки Підключити модуль можна за допомогою інструкції імпорту. Наприклад, підключимо модуль OS для отримання поточної директорії: >>> >>> import os >>> os.getcwd() 'C:\\Python33' Після ключового слова import вказується назва модуля. Однією інструкцією можна підключити декілька модулів, хоча цього не рекомендується робити, так як це знижує читаність коду. Імпортуємо модулі time і random. >>> >>> import time, random >>> time.time() 1376047104.056417 >>> random.random() 0.9874550833306869 Після імпортування модуля його назва стає змінною, через яку можна отримати доступ до атрибутів модуля. Наприклад, можна звернутися до константи e, розташованої в модулі math: >>> >>> import math >>> math.e 2.718281828459045 Варто відзначити, що якщо зазначений атрибут модуля не буде знайдений, збудиться виняток AttributeError. А якщо не вдасться знайти модуль для імпортування, то ImportError. Використання псевдонімів Якщо назва модуля занадто довга, або вона вам не подобається з якихось інших причин, то для неї можна створити псевдонім, за допомогою ключового слова as. >>> >>> import math as m >>> m.e 2.718281828459045 Тепер доступ до всіх атрибутів модуля math здійснюється тільки за допомогою змінної m, а змінної math в цій програмі вже не буде (якщо, 22 звичайно, ви після цього не напишете import math, тоді модуль буде доступний як під ім'ям m, так і під ім'ям math ). Інструкція from Підключити певні атрибути модуля можна за допомогою інструкції from. Вона має кілька форматів: from import [ as ], [ [ as ]...] from import * Перший формат дозволяє підключити з модуля тільки зазначені вами атрибути. Для довгих імен також можна призначити псевдонім, вказавши його після ключового слова as. >>> >>> from math import e, ceil as c >>> e 2.718281828459045 >>> c(4.6) 5 Імпортовані атрибути можна розмістити на декількох рядках, якщо їх багато, для кращої читання коду: >>> >>> from math import (sin, cos,... tan, atan) Другий формат інструкції from дозволяє підключити всі (точніше, майже все) змінні з модуля. Для прикладу імпортуємо всі атрибути з модуля sys: >>> >>> from sys import * >>> version '3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)]' >>> version_info sys.version_info (major = 3, minor = 3, micro = 2, releaselevel = 'final', serial = 0) Слід зауважити, що не всі атрибути будуть імпортовані. Якщо в модулі визначена змінна __all__ (список атрибутів, які можуть бути підключені), то будуть підключені тільки атрибути з цього списку. Якщо змінна __all__ не визначена, то будуть підключені всі атрибути, які не починаються з нижнього підкреслення. Крім того, необхідно враховувати, що імпортування всіх атрибутів з модуля може порушити простір імен головної програми, так як змінні, що мають однакові імена, будуть перезаписані. Створення свого модуля на Python Створимо файл mymodule.py, в якому визначимо якісь функції: def hello(): print('Hello, world!') 23 def fib(n): a=b=1 for i in range(n - 2): a, b = b, a + b return b Тепер в цій же папці створимо інший файл, наприклад, main.py: import mymodule mymodule.hello() print(mymodule.fib(10)) На екран буде виведено: Hello, world! 55 Як назвати модуль? Пам'ятайте, що ви (або інші люди) будуть його імпортувати і використовувати в якості змінної. Модуль неможна назвати так, як і ключове слово. Також імена модулів неможна починати з цифри. І не варто називати модуль так, як будь-яку з вбудованих функцій. Тобто, звичайно, можна, але це створить великі незручності при його подальшому використанні. Куди помістити модуль? Туди, де його потім можна буде знайти. Шляхи пошуку модулів вказані в змінній sys.path. У нього включені поточна директорія (тобто модуль можна залишити в папці з основною програмою), а також директорії, в яких встановлено python. Крім того, змінну sys.path можна змінювати вручну, що дозволяє покласти модуль в будь-яке зручний для вас місце (головне, не забути в головній програмі модифікувати sys.path). Чи можна використовувати модуль як самостійну програму? Можна. Однак треба пам'ятати, що при імпортуванні модуля його код виконується повністю, тобто, якщо програма щось друкує, то при її імпортуванні це буде надруковано. Цього можна уникнути, якщо перевіряти, чи запущений скрипт як програма, або імпортований. Це можна зробити за допомогою змінної __name__, яка визначена в будь-якій програмі, і дорівнює "__main__", якщо скрипт запущений в якості головної програми, і ім'я, якщо він імпортований. Наприклад, mymodule.py може виглядати ось так: def hello(): print('Hello, world!') def fib(n): a=b=1 for i in range(n - 2): a, b = b, a + b return b 24 if __name__ == "__main__": hello() for i in range(10): print(fib(i)) Завдання: Розробіть функції для здійснення наступних операцій зі списками: 1. Швидке сортування; 2. Пошук елементу за значенням; 3. Пошук послідовності елементів; 4. Пошук перших п’яти мінімальних елементів; 5. Пошук перших п’яти максимальних елементів; 6. Пошук середнього арифметичного; 7. Повернення списку, що сформований з початкового списку, але не містить повторів (залишається лише перший з однакових елементів). Помістіть функції в окремий модуль. Реалізуйте програму, яка використовує всі функції зі створеного модуля. Зробити описи Doc strings для кожної реалізованої функції. Контрольні питання: 1. Як створити функцію у мові Python? 2. Що таке модулі та пакети? 3. Які бувають способи підключення модулів та пакетів? 4. Що таке анонімні функції та інструкція lambda? 5. Чи можна використати модуль як самостійну програму? 25 Лабораторна робота №3 Тема: Робота з файлами у мові Python Мета: навчитися здійснювати операції читання та запису для файлів у мові Python Теоретична частина Розглянемо на прикладах основні операції з файлами у мові Python Запис даних у файл filename = "mydata.txt" # Відкриття файлу fd = open(filename, "w") # Запис у файл for i in range(10): A = i*18 fd.write("%i\t%.1f\n" % (i, A)) # Закриття файлу fd.close() Читання з файлу import csv import sys filename = "mydata.txt" # Відкриття файлу fd = open(filename, "r") # Читання даних reader = csv.reader(fd, delimiter="\t") # Виведення змісту файлу for row in reader: print(row) # Закриття файлу fd.close() Копіювання файлу import shutil shutil.copyfile("C:\\mydoc.doc", "C:\\My Documents\\mydoc_2.doc") 26 Перейменування файлу import os os.rename("C:\\mydoc.doc\\testfile.txt", "/home/user/test.txt") Видалення файлу import os os.remove(" C:\\mydoc.doc \\testfile.txt") Читання потрібного рядка з текстового файлу Щоб прочитати рядок під певним номером - можна скористатися як стандартним читанням файлу в список, так і використовувати модуль linecache: line = linecache.getline("C:\\boot.ini", 2) # or line = open("C:\\boot.ini").readlines() Перебір файлів у каталозі for filename in os.listdir("..\\plugins"): print(filename) Перебір файлів у каталозі за маскою import glob for filename in glob.glob("..\\plugins\\*.zip"): print(filename) Порівняння файлів Порівнювати файли можна як за змістом, так і за їх властивостями, що значно швидше. Обидва варіанти можливі за допомогою filecmp import filecmp similar = filecmp.cmp('C:\\file1.txt', 'C:\\file2.txt') print(similar) Синтаксис функції Open() в Python. my_file = open(ім’я_файлу [, режим_доступу][, буферизация]) У функції Open() багато параметрів, нам поки важливі 3 аргументи: перший, це ім'я файлу. Шлях до файлу може бути відносним або абсолютним. Другий аргумент, це режим, в якому ми будемо відкривати файл. 27 Режим Призначення 'r' відкриття на читання (є значенням за замовчуванням). 'w' відкриття на запис, вміст файлу видаляється; якщо файлу не існує, створюється новий. 'x' ексклюзивне створення (збуджується виключення FileExistsError, якщо файл вже існує). 'a' відкриття на дозапис, інформація додається в кінець файлу. 'b' відкриття в двійковому режимі. 't' відкриття в текстовому режимі (є значенням за замовчуванням). '+' відкриття на читання і запис Приклади використання декількох режимів одночасно Режим Призначення r+b Відкрити бінарний файл на читання і запис. Покажчик стоїть на початку файлу. w+b Відкрити бінарний файл на читання і запис, очистити до 0 байт. Покажчик стоїть на початку файлу. wb Відкриває файл для запису в двійковому форматі. Покажчик стоїть на початку файлу. Створює файл з ім'ям ім'я_файлу, якщо такого не існує. a+ Відкриває файл для додавання і читання. Покажчик стоїть в кінці файлу. Створює файл з ім'я_файлу, якщо такого не існує. Завдання: Створіть файли, у яких будуть міститися рядки з іменами студентів та їх середніми балами. Кожен файл буде відповідати окремій групі. Реалізуйте читання файлів, запис та дозапис у файли, пошук файлів у каталозі та пошук даних у файлі. Також реалізуйте сортування даних у файлі за середнім балом. Контрольні питання: 1. Як здійснюється запис даних у файл у мові Python? 2. Як здійснюється читання даних з файлу у мові Python? 3. Як здійснюється копіювання файлу? 4. Який синтаксис функції Open() у мові Python? 5. Які бувають режими роботи з файлами? 28 Лабораторна робота №4 Тема: Робота з рядками у мові Python Мета: набути навичок роботи з вбудованими функціями для роботи з рядками у Python Теоретична частина Рядок складається з послідовності символів. Тип рядка str. >>> type('2') У мові Пітон немає окремого символьного типу. Символ – це просто рядок довжини 1. Довжина рядків в Пітоні не обмежена або, строго кажучи, обмежена обсягом виділеної оперативної пам'яті. Рядок з кількох поспіль літералів буде неявно конкатенованим навіть при відсутності знаку +: s = 'Infinite' "blue" 'sky' Рядки в потрійних лапках можуть містити кілька рядків тексту. Пробіли від початку рядка входять в текст: s = """Happy birthday to you, My darling Findus! Your hostess.""" Можна домогтися того ж ефекту і в одинарних лапках, залишаючи в кінці кожного рядка зворотний слеш (але рекомендується так не робити; після \ не повинно бути пробілу в кінці рядка): s = "Happy birthday to you,\ My darling Findus!\ Your hostess." Базові операції Конкатенація (додавання) >>> >>> S1 = 'spam' >>> S2 = 'eggs' >>> print(S1 + S2) 'spameggs' Дублювання рядка >>> >>> print('spam' * 3) spamspamspam Довжина рядка >>> >>> len('spam') 4 Доступ за індексом 29 >>> >>> S = 'spam' >>> S 's' >>> S 'a' >>> S[-2] 'a' Як видно з прикладу, в Python є можливість доступу по негативного індексу, при цьому відлік йде від кінця рядка. Отримання зрізу Оператор вилучення зрізу: [X: Y]. X - початок зрізу, а Y - закінчення; символ з номером Y в зріз не входить. За умовчанням перший індекс дорівнює 0, а другий - довжині рядка. >>> >>> s = 'spameggs' >>> s[3:5] 'me' >>> s[2:-2] 'ameg' >>> s[:6] 'spameg' >>> s[1:] 'pameggs' >>> s[:] 'spameggs' Крім того, можна задати крок, з яким потрібно витягувати зріз. >>> >>> s[::-1] 'sggemaps' >>> s[3:5:-1] '' >>> s[2::2] 'aeg' Інші функції та методи рядків При виклику методів необхідно пам'ятати, що рядки в Python відносяться до категорії незмінюваних послідовностей, тобто всі функції і методи можуть лише створювати новий рядок. >>> >>> s = 'spam' >>> s = 'b' # Помилка! Traceback (most recent call last): File "", line 1, in s = 'b' TypeError: 'str' object does not support item assignment 30 >>> s = s + 'b' + s[2:] >>> s 'sbam' Тому всі строкові методи повертають новий рядок, який потім слід привласнити змінній. Таблиця "Функції та методи рядків" Функція або метод Призначення S = 'str'; S = "str"; S = літерали рядків '''str'''; S = """str""" S = "s\np\ta\nbbb" екрановані послідовності S = r"C:\temp\new" неформатовані рядки (пригнічують екранування) S = b"byte" рядок байтів S1 + S2 конкатенація (додавання рядків) S1 * 3 повторення рядка S[i] звернення за індексом S[i:j:step] витяг зрізу len(S) довжина рядка S.find(str, [start],[end]) Пошук підрядка в рядку. Повертає номер першого входження або -1 S.rfind(str, [start],[end]) Пошук підрядка в рядку. Повертає номер останнього входження або -1 S.index(str, [start],[end]) Пошук підрядка в рядку. Повертає номер першого входження або викликає ValueError S.rindex(str, [start],[end]) Пошук підрядка в рядку. Повертає номер останнього входження або викликає ValueError S.replace(шаблон, заміна) Заміна шаблону S.split(символ) Розбиття рядка по роздільнику S.isdigit() Чи складається рядок з цифр S.isalpha() Чи складається рядок з цифр літер S.isalnum() Чи складається рядок з цифр або літер S.islower() Чи складається рядок із символів в нижньому регістрі S.isupper() Чи складається рядок із символів у верхньому регістрі 31 S.isspace() Чи складається рядок з невідображаючихся символів (пробіл, символ переводу сторінки ( '\f'), "новий рядок" ( '\n'), "перевод каретки" ( '\r'), "горизонтальна табуляція" ( '\t' ) і "вертикальна табуляція" ( '\v')) S.istitle() чи починаються слова в рядку з великої літери S.upper() Перетворення рядка до верхнього регістру S.lower() Перетворення рядка до нижнього регістру S.startswith(str) Чи починається рядок S з шаблону str S.endswith(str) Чи закінчується рядок S з шаблону str S.join(список) Збірка рядка зі списку з роздільником S ord(символ) код символу в ASCII chr(число) код ASCII в символ S.capitalize() Переводить перший символ рядка в верхній регістр, а всі інші в нижній S.center(width, [fill]) Повертає відцентрований рядок, по краях якого стоїть символ fill (пробіл за замовчуванням) S.count(str, [start],[end]) Повертає кількість неперетинаючихся входжень підрядка в діапазоні [початок, кінець] (0 і довжина рядка за замовчуванням) S.expandtabs([tabsize]) Повертає копію рядка, в якій всі символи табуляції замінюються одним або декількома пробілами, в залежності від поточного стовпця. Якщо TabSize не вказано, розмір табуляції вважається рівним 8 пробілів S.lstrip([chars]) Видалення символів пробілів на початку рядка S.rstrip([chars]) Видалення символів пробілів в кінці рядка S.strip([chars]) Видалення символів пробілів на початку і в кінці рядка S.partition(шаблон) Повертає кортеж, що містить частину перед першим шаблоном, сам шаблон, і частина після шаблону. Якщо шаблон не знайдений, повертається кортеж, що містить самий рядок, а потім два порожніх рядка S.rpartition(sep) Повертає кортеж, що містить частину перед останнім шаблоном, сам шаблон, і частину після шаблону. Якщо шаблон не знайдений, повертається кортеж, що містить два порожні рядки, а потім сам рядок 32 S.swapcase() Переводить символи нижнього регістра в верхній, а верхнього - в нижній S.title() Першу букву кожного слова переводить в верхній регістр, а всі інші в нижній S.zfill(width) Робить довжину рядка не меншою width, в разі потреби заповнюючи перші символи нулями S.ljust(width, fillchar=" ") Робить довжину рядки на меншою width, в разі потреби заповнюючи останні символи символом fillchar S.rjust(width, fillchar=" ") Робить довжину рядки не меншою width, в разі потреби заповнюючи перші символи символом fillchar S.format(*args, **kwargs) форматування рядка Екрановані послідовності, так звані escape-послідовності, можуть складатися з одного або декількох символів після зворотної косої риски: Послідовність Призначення \ в самому кінці ігнорується, рядок продовжується на новому рядку рядка \\ сам символ зворотного слеша (залишається один символ \) \' апостроф (залишається один ') \" лапки (залишається один символ ") \n новий рядок (новий рядок) \r повернення каретки \t горизонтальна табуляція \u… 16-бітовий символ Юнікоду в 16-ковий поданні \U… 32-бітовий символ Юнікоду в 32-ковий поданні \x… 16-кове значення \o… 8-кове значення \0 Символ Null (не ознака кінця рядка) Зріз (slice) – вилучення з цього рядка одного символу або деякого фрагмента (підрядка). Є три форми зрізів. Найпростіша форма зрізу: взяття одного символу рядка, а саме, S[i] – це зріз, що складається з одного символу, який має номер i, 33 при цьому вважаючи, що нумерація починається з числа 0. Тобто якщо S = 'Hello' , то S == 'H', S == 'e', S == 'l', S == 'l', S == 'o '. Номери символів в рядку (а також в інших структурах даних: списках, кортежі) називаються індексом. Якщо вказати від'ємне значення індексу, то номер буде відраховуватися з кінця, починаючи з номера 1. Тобто S [-1] == 'o', S [-2] == 'l', S [-3] == 'l', S [-4] == 'e', S [-5] = = 'H'. Або у вигляді таблиці: Рядок S H e l l o Індекс S S S S S Індекс S[-5] S[-4] S[-3] S[-2] S[-1] Якщо ж номер символу в зрізі рядка S більше або дорівнює len(S), або менше, ніж -len(S), то при зверненні до цього символу рядка відбудеться помилка IndexError: string index out of range. Зріз з двома параметрами: S[a: b] повертає підрядок з b-a символів, починаючи з символу c індексом a, тобто до символу з індексом b, не включаючи його. Наприклад, S[1: 4] == 'ell', те ж саме вийде якщо написати S[- 4: -1]. Можна використовувати як позитивні, так і негативні індекси в одному зрізі, наприклад, S[1: -1] - це рядок без першого і останнього символу (зріз починається з символу з індексом 1 і закінчуватись індексом -1, не включаючи його). При використанні такої форми зрізу помилки IndexError ніколи не виникає. Наприклад, зріз S[1: 5] поверне рядок 'ello', таким же буде результат, якщо зробити другий індекс дуже великим, наприклад, S[1: 100] (якщо в рядку не більше 100 символів). Якщо опустити другий параметр (але поставити двокрапку), то зріз береться до кінця рядка. Наприклад, щоб видалити з рядка перший символ (його індекс дорівнює 0, тобто взяти зріз, починаючи з символу з індексом 1), то можна взяти зріз S[1:], аналогічно якщо опустити перший параметр, то зріз береться від початку рядка. Тобто видалити з рядка останній символ можна за допомогою зрізу S[: - 1]. Зріз S[:] збігається з самим рядком S. Якщо задати зріз з трьома параметрами S[a: b: d], то третій параметр задає крок, як у випадку з функцією range, тобто будуть взяті символи з індексами a, a + d, a + 2 * d і т.д. Якщо вказати значення третього параметра, рівне 2, в зріз потрапить кожний другий символ, а якщо взяти значення зрізу, рівне -1, то символи будуть йти у зворотному порядку. Приклади зрізів Введено рядок: s = input () Виведемо третій символ цього рядка: print (s) Виведемо передостанній символ цього рядка: print (s[-2]) Виведемо перші п'ять символів цього рядка: 34 print (s[0: 5]) Виведемо весь рядок, крім останніх двох символів: print (s[: - 2]) Виведемо всі символи з парними індексами (вважаючи, що індексація починається з 0, тому символи виводяться починаючи з першого): print (s[:: 2]) Виведемо всі символи з непарними індексами, тобто починаючи з другого символу рядка: print (s[1 :: 2]) Виведемо всі символи у зворотному порядку: print (s[:: - 1]) Виведемо всі символи рядка через один в зворотному порядку, починаючи з останнього: print (s[:: - 2]) Мова програмування Python – сучасна мова програмування, тому вона працює виключно з Unicode-символами (це відноситься до версії 3.х). Код символу можна визначити за допомогою функції ord. Ця функція отримує на вхід рядок, який повинен складатися рівно з одного символу. Функція повертає код цього символу. Наприклад, ord( 'A') поверне число 65. Зворотна функція отримання по числовому коду його номера називається chr. Словники Словники в Python – невпорядковані колекції довільних об'єктів з доступом по ключу. Їх іноді ще називають асоціативними масивами або хеш- таблицями. Щоб працювати зі словником, його потрібно створити. Створити його можна кількома способами. По-перше, за допомогою літерала: >>> >>> d = {} >>> d {} >>> d = {'dict': 1, 'dictionary': 2} >>> d {'dict': 1, 'dictionary': 2} По-друге, за допомогою функції dict: >>> >>> d = dict(short='dict', long='dictionary') >>> d {'short': 'dict', 'long': 'dictionary'} >>> d = dict([(1, 1), (2, 4)]) >>> d {1: 1, 2: 4} 35 По-третє, за допомогою методу fromkeys: >>> >>> d = dict.fromkeys(['a', 'b']) >>> d {'a': None, 'b': None} >>> d = dict.fromkeys(['a', 'b'], 100) >>> d {'a': 100, 'b': 100} По-четверте, за допомогою генераторів словників, які дуже схожі на генератори списків. >>> >>> d = {a: a ** 2 for a in range(7)} >>> d {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36} Тепер спробуємо додати записи в словник і витягти значення ключів: >>> >>> d = {1: 2, 2: 4, 3: 9} >>> d 2 >>> d = 4 ** 2 >>> d {1: 2, 2: 4, 3: 9, 4: 16} >>> d['1'] Traceback (most recent call last): File "", line 1, in d['1'] KeyError: '1' Як видно з прикладу, привласнення по новому ключу розширює словник, привласнення за існуючим ключем перезаписує його, а спроба вилучення неіснуючого ключа породжує виключення. Для уникнення виключення є спеціальний метод, або можна перехоплювати виняток. Що ж можна ще робити зі словниками? Те ж саме, що і з іншими об'єктами: вбудовані функції, ключові слова (наприклад, цикли for і while), а також спеціальні методи словників. Методи словників dict.clear() – очищає словник. dict.copy() – повертає копію словника. dict.fromkeys (seq [, value]) – створює словник з ключами з seq і значенням value (за замовчуванням None). dict.get(key [, default]) – повертає значення ключа, але якщо його немає, не викидає виняток, а повертає default (за замовчуванням None). dict.items() – повертає пари (ключ, значення). 36 dict.keys() – повертає ключі в словнику. dict.pop(key [, default]) – видаляє ключ і повертає значення. Якщо ключа немає, повертає default (за замовчуванням кидає виняток). dict.popitem() – видаляє і повертає пару (ключ, значення). Якщо словник порожній, кидає виняток KeyError. Пам'ятайте, що словники невпорядковані. dict.setdefault(key [, default]) – повертає значення ключа, але якщо його немає, не кидає виняток, а створює ключ із значенням default (за замовчуванням None). dict.update([other]) – оновлює словник, додаючи пари (ключ, значення) з other. Існуючі ключі перезаписуються. Повертає None (не новий словник!). dict.values() – повертає значення в словнику. Завдання 1: Створіть програму, яка буде складати випадкові фрази на основі трьох списків зі словами. З кожного списку вона повинна брати випадковим чином слова і поєднувати їх в одну фразу. Завдання 2: Візьміть текстовий файл, що містить Вашу улюблену художню книгу. 1. Визначте загальну кількість символів у тексті з пробілами та без пробілів. 2. Визначте загальну кількість слів у тексті, загальну кількість різних слів (без повторів) та кількість унікальних слів, що зустрічаються тільки один раз. Завдання 3: Виконайте наступне завдання відповідно до свого варіанту. Варіант 1. Знайдіть у тексті найдовшу послідовність слів, що повторюється більше одного разу. Варіант 2. Порівняйте два тексти на наявність однакових послідовностей, що містять не менше 5 слів. (Знадобиться ще один текст, напр., того ж автора). Варіант 3. Знайдіть у тексті послідовності, що містять не менше 3 слів та повторюються не менше 5 раз, створіть список таких послідовностей та підрахуйте кількість їх повторів. Варіант 4. Підрахуйте загальну кількість речень у тексті, кількість окличних речень, кількість питальних речень, кількість речень, що закінчуються трикрапкою. Варіант 5. Складіть списки слів, що характеризують різні емоції - не менше 3 емоцій та не менше 10 слів у кожному списку. Підрахуйте частоту появи у тексті слів з кожного списку. Зробіть висновок про те, які емоції з досліджуваних переважають у тексті. Варіант 6. Визначте максимальну, мінімальну та середню довжину слів, речень та абзаців у тексті. Варіант 7. Визначте частоту появи питальних речень у тексті та частоту появи слів в цих реченнях. Варіант 8. Визначте, які слова найчастіше зустрічаються поряд (перед або після) з вказаним користувачем словом. 37 Варіант 9. Визначте, 10 найчастіше зустрічаємих послідовностей з N слів у тексті. N вказується користувачем. Варіант 10. Визначте, з якого слова найчастіше починаються речення у тексті, а також яким найчастіше закінчуються. Варіант 11. Визначте частоту появи слів з різною довжиною. Варіант 12. Визначте частоту появи речень з різною кількістю слів. Варіант 13. Складіть список коренів слів, що характеризують колір; визначте кількість слів у тексті, що характеризують колір, а також те, який колір серед них переважає. Варіант 14. Визначте процент води у тексті (це кількість "стоп-слів" поділена на загальну кількість слів). Стоп-слова – це слова, які ігноруються при індексації сторінок пошуковими системами, не несуть смислового навантаження, замінюються маркерами і негативно впливають на якість текстів, знижуючи їх корисність. Списки стоп-слів див. в Інтернеті. Варіант 15. Складіть список слів, що характеризують романтичні почуття (не менше 30 слів у списку) та визначте кількість появи даних слів у тексті і виведіть 5 перших абзаців, де таких слів найбільше. Контрольні питання: 1. Які базові операції роботи з рядками є у мові Python? 2. Як можна одержувати зрізи рядків? Якими бувають зрізи? Наведіть приклади. 3. Які методи роботи з рядками є у мові Python? 4. Що таке словники? Як з ними працювати? Для чого вони потрібні? 5. Які методи роботи зі словниками є у мові Python? 38 Лабораторна робота №5 Тема: Об’єктно-орієнтоване програмування у мові Python Мета: набути навичок роботи з класами у мові Python Теоретична частина Клас – це складний користувацький тип даних, що складається з полів та методів. Поля класу – це змінні, оголошені всередині класу для збереження даних. Методи класу – це функції, оголошені для обробки полів класу, взаємодії з основною програмою та іншими даними. Об’єкти – це окремі екземпляри класу, по суті змінні цього типу. Оголосивши клас із полями та методами, ви можете створювати скільки завгодно об’єктів, кожен з яких міститиме оголошений в класі набір полів та методів. Класи оголошуються з ключовим словом class, ім’я класу за стандартами Python записується наступним чином: всі слова разом, кожне слово з великої літери. Для створення екземпляру клас викликається як функція з круглими дужками, повертаючи новий об’єкт, який ви можете зберегти у змінній. Для методів класу можна вказувати атрибути. Атрибут – це змінна, метод – це функція. Відмінності методу від функції в тому, що у нього є перший параметр – self. Класи, як і модулі, приховують внутрішню будову, залишаючи на поверхні лише зовнішній "інтерфейс" для використання. Це поєднання даних та функцій всередині однієї сутності, разом із прихованням внутрішньої будови, називається інкапсуляцією і є головним принципом ООП. При оголошенні класу в дужках можуть бути записані (одне або декілька) імена вже існуючих класів – це називається наслідуванням. В такому випадку новий клас (який називається дочірнім) успадковує всі поля та методи класів перелічених в дужках (які називаються батьківськими). Модель класу: class ім'я_класу: інструкція 1.... інструкція N Створення об'єкта класу: об'єкт_класу = ім'я_класу() Приклад 1. Програма з використанням класу. Обчислення середнього бала студента з трьох предметів. import math class Student(): 39 def GPA(self, name, e1, e2, e3) : self. name = name self.e1 = e1 self.e2 = e2 self.e3 = e3 print(self. name, ' - ',((self.e1 + self.e2 + self.e3)/3)) s1 = Student() s2 = Student() s1.GPA('Dmytro', 5, 3, 4) s2.GPA('Olena', 5, 4, 5) def main(): return 0 if __name__ == '__main__': main() Класи збирають в собі набори даних (змінних) разом з наборами функцій, що на них діють. Мета полягає в тому, щоб досягти більш модульного коду за допомогою групування змінних і функцій, в невеликі вузли, що легко модифікувати. Завдання: 1. Розробити клас "домашня бібліотека". Реалізувати можливість роботи з довільним числом книг, пошуку по книгах за декількома параметрами (за автором, за роком видання, за жанром тощо), додавання книг у бібліотеку, видалення книг з неї, доступу до книги за номером. Написати програму, що буде демонструвати всі розроблені елементи класу. 2. Розробити клас для представлення відомостей про успішність студента. Об'єкт класу має містити поля для збереження імені студента та балів, отриманих ним за виконання лабораторних робіт та індивідуального творчого завдання. Забезпечити наступні методи класу: конструктор, який приймає рядок ім'я_студента та словник, що містить налаштування курсу у наступному форматі: 1) максимально можлива кількість балів за здачу індивідуального творчого завдання; 2) максимально можлива кількість балів за здачу однієї лабораторної роботи; 3) кількість лабораторних робіт в курсі; 4) частка балів від максимуму, яку необхідно набрати для отримання екзамену автоматом. 40 метод, за допомогою якого вносяться дані про кількість спроб здати лабораторну роботу та оцінка за останню спробу. метод, за допомогою якого вносяться дані про кількість спроб здати індивідуальне творче завдання та оцінка за останню спробу. метод, який повертає кортеж (tuple), що містить дійсне число (суму балів студента за проходження курсу), та логічне значення True або False в залежності від того, чи достатньо цих балів для отримання оцінки за екзамен автоматом. 3. Розробити клас, який наслідує функціональність стандартного типу str і містить 2 нових методи: 1) метод, який приймає 1 аргумент s та повертає True або False в залежності від того, чи містить рядок повтори послідовностей символів довжиною від 3 символів. 2) метод, який повертає True або False в залежності від того, чи є рядок паліндромом. Регістрами символів нехтувати. Порожній рядок вважати паліндромом. 4. Розробити клас "колода карт", що буде включати закритий масив елементів класу "карта". В карті буде зберігатися масть та номер. При створенні екземпляру класу "колода карт", карти у колоді розташовуються випадковим чином. Забезпечити можливість виведення карти за номером розташування у колоді, виведення всіх карт, перемішування колоди, видачі однієї карти з колоди, видачі 6 карт з колоди. Написати програму, що буде демонструвати всі розроблені елементи класу. 5. Розробити клас "англо-російський словник", забезпечити можливість зберігання декількох варіантів перекладу для кожного слова. Забезпечити можливість виведення всіх варіантів перекладу введеного англійського слова. 6. Створити абстрактний клас "Транспортний засіб". На його основі реалізувати класи "Літак", "Автомобіль" та "Корабель". Класи повинні мати можливість задавати та отримувати координати і параметри засобів пересування (вартість, швидкість, рік випуску тощо) задати за допомогою полів. Для літака повинна бути визначена висота, для літака та корабля – кількість пасажирів, для корабля – порт приписки. Динамічні характеристики задати за допомогою методів. Контрольні питання: 1. Як створити клас у мові Python? 2. Що таке інкапсуляція? 3. Що таке об’єкт? 4. Що таке атрибут? 5. У чому полягає відмінність методу від функції? 41 Лабораторна робота №6 Тема: Збір даних з веб-документів за допомогою мови Python Мета: навчитися одержувати дані з html-сторінок та здійснювати їх аналіз, використовуючи можливості мови Python Теоретична частина Збір даних Для збору даних з Інтернет-мережі будемо використовувати модуль requests, який дозволяє отримувати доступ до веб-сторінок. Як приклад будемо використовувати сайт новин Hacker News. Згадаймо, що є два найпоширеніші способи доступу до веб-сторінок: запит типу GET і запит типу POST (насправді видів http-запитів набагато більше). Запит типу GET – це коли ви передаєте серверу якусь інформацію в адресному рядку. Наприклад, якщо ви перейдете за такою адресою: https