Uploaded by Alex Wayne

Python Labs in Ukrainian

advertisement
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ
«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
імені ІГОРЯ СІКОРСЬКОГО»
ПРОГРАМУВАННЯ НА МОВІ
PYTHON:
ІНСТРУКЦІЇ ДО ВИКОНАННЯ
ЛАБОРАТОРНИХ РОБІТ З
ДИСЦИПЛІНИ «ПРОГРАМУВАННЯ-1.
ОСНОВИ ПРОГРАМУВАННЯ»
Рекомендовано Методичною радою КПІ ім. Ігоря Сікорського
як навчальний посібник для студентів,
які навчаються за спеціальністю 113Прикладна математика, спеціалізацією
«Наука про дані та математичне моделювання»
Київ
КПІ ім. Ігоря Сікорського
2018
2
Рецензенти:
Заболотня Т.М., к.т.н., доцент.
Відповідальний
редактор
Мальчиков В.В., ст.викладач.
Гриф надано Методичною радою КПІ ім. Ігоря Сікорського(протокол № від
__.__ 2018 р.)
за поданням Вченої ради факультету прикладної математики(протокол № 9 від 21.05.2018 р.)
Електронне мережне навчальне видання
Громова Вікторія Вікторівна, асистент.
ПРОГРАМУВАННЯ НА МОВІ PYTHON
ІНСТРУКЦІЇ ДО ВИКОНАННЯ
ЛАБОРАТОРНИХ РОБІТ З
ДИСЦИПЛІНИ «ПРОГРАМУВАННЯ-1. ОСНОВИ ПРОГРАМУВАННЯ»
Програмування на мові PYTHON: інструкції до виконання лабораторних робіт з дисципліни
«Програмування-1. Основи програмування» [Електронний ресурс] : навч. посіб. для студ.
спеціальності 113 Прикладна математика,спеціалізації «Наука про дані та математичне
моделювання» / КПІ ім. Ігоря Сікорського ; уклад.: В. В. Громова. – Електронні текстові дані (1
файл: 1,6 Мбайт). – Київ : КПІ ім. Ігоря Сікорського, 2018. – 166 с.
Запропоноване видання надає короткі теоретичні відомості, які необхідні для виконання
лабораторних робіт, докладні приклади на кожну тему, варіанти завдань на лабораторні
роботи, контрольні запитання, відповідаючи на які, студент може перевірити свої знання з
теоретичного та практичного матеріалу, рекомендовану літературу, яка дозволяє ширше
вивчити теоретичний матеріал з теми лабораторної роботи. Навчальне видання призначене для
студентів, які навчаються за спеціальністью 113«Прикладна математика» факультету
прикладної математики НТУУ «КПІ».
В. В. Громова, 2018
 КПІ ім. Ігоря Сікорського, 2018
3
4
ЗМІСТ
ВСТУП ................................................................................................................. 6
ВСТАНОВЛЕННЯ І РОБОТА З ІНТЕРПРЕТАТОРОМ PYTHON ............. 12
СТРУКТУРА ПРОГРАМИ НА МОВІ PYTHON ........................................... 15
ОСНОВНІ СТАНДАРТНІ МОДУЛІ PYTHON ............................................. 15
УБУДОВАНІ ФУНКЦІЇ ................................................................................... 18
КЕРІВНИЦТВО З НАПИСАННЯ КОДУ НА PYTHON ............................... 20
ТИПИ І СТРУКТУРИ ДАНИХ В PYTHON ................................................... 24
ЛАБОРАТОРНА
РОБОТА
№1.
ПРОГРАМУВАННЯ
ЛІНІЙНИХ
АЛГОРИТМІВ ТА РОЗГАЛУЖЕНИХ ПРОЦЕСІВ ............................................. 33
1.1
Теоретичні відомості .......................................................................... 33
1.2 Узагальнене формулювання завдання до лабораторної роботи......... 46
ЛАБОРАТОРНА
РОБОТА
№2.
ПРОГРАМУВАННЯ
ЦИКЛІЧНИХ
АЛГОРИТМІВ ........................................................................................................... 56
2.1 Теоретичнівідомості ............................................................................... 56
2.2 Узагальнене формулювання завдання до лабораторної роботи......... 63
ЛАБОРАТОРНА РОБОТА №3. РЯДКИ ......................................................... 68
3.1 Теоретичні відомості .............................................................................. 68
3.2 Узагальнене формулювання завдання до лабораторної роботи......... 72
ЛАБОРАТОРНА РОБОТА №4. ВИКОРИСТАННЯ ФУНКЦІЙ ................. 75
4.1 Теоретичні відомості .............................................................................. 75
4.2 Узагальнене формулювання завдання до лабораторної роботи......... 88
ЛАБОРАТОРНА
РОБОТА
№5.
СТРУКТУРИ
ДАНИХ:
СПИСКИ,
КОРТЕЖИ, МНОЖИНИ .......................................................................................... 96
5.1 Теоретичні відомості .............................................................................. 96
5
5.2 Узагальнене формулювання завдання до лабораторної роботи....... 113
ЛАБОРАТОРНА РОБОТА №6. РЕКУРСІЯ ТА ОБРОБКА МАТРИЦЬ ... 123
6.1
Теоретичні відомості ........................................................................ 123
6.2 Узагальнене формулювання завдання до лабораторної роботи ..... 137
ЛАБОРАТОРНА РОБОТА №7. РОБОТА З ФАЙЛАМИ ........................... 143
7.1 Теоретичні відомості ............................................................................ 144
7.2 Узагальнене формулювання завдання до лабораторної роботи....... 167
ВИНЯТКИ В PYTHON. КОНСТРУКЦІЯ TRY - EXCEPT ДЛЯ ОБРОБКИ
ВИНЯТКІВ. .............................................................................................................. 173
РЕКОМЕНДОВАНА ЛІТЕРАТУРА ............................................................. 178
Додаток 1. Глосарій ........................................................................................ 179
Додаток 2. Вбудовані функції ........................................................................ 183
Додаток 3. Ключові слова .............................................................................. 187
Додаток 4. Операції в мові програмування Python ...................................... 189
Додаток 5. Функції і методи рядків. .............................................................. 195
Додаток 6. Титульна сторінка лабораторної роботи ................................... 198
6
ВСТУП
У зв'язку зі спостережуваним в даний час стрімким розвитком
персональної обчислювальної техніки, відбувається поступова зміна вимог, що
пред'являються до мов програмування. Все більшу роль починають грати
інтерпретовані мови, оскільки зростаюча міць персональних комп'ютерів
починає забезпечувати достатню швидкість виконання інтерпретованих
програм. А єдиною суттєвою перевагою компільованих мов програмування є
створюваний ними високошвидкісний код. Коли швидкість виконання програми
не є критичною величиною, найбільш правильним вибором буде інтерпретована
мова, як більш простий і гнучкий інструмент програмування.
У зв'язку з цим, певний інтерес представляє розгляд порівняно нової мови
програмування Python, який був створений його автором Гвідо ван Россум на
початку 90-х років.
Відмінні характеристики мови:
1. Кросплатформеність і безкоштовне розповсюдження.
2. Дуже низький поріг входження, вже після одного дня вивчення можна
почати писати прості програми.
3. Простий синтаксис і багаті можливості дозволяють записувати програми
дуже коротко, але в той же час зрозуміло.
4. За простоті освоєння мову можна порівняти з Бейсиком, але куди більш
багатий можливостями і значно більш сучасний.
5. Швидкість виконання програм, написаних на Python, висока. Це
пов'язано з тим, що основні бібліотеки Python написані на C ++ і виконання
завдань займає менше часу, ніж на інших мовах високого рівня. У зв'язку з цим
можна писати свої власні модулі для Python на C або C ++.
6. У стандартниx бібліотеках Python є кошти для роботи з електронною
поштою, протоколами Інтернету, FTP, HTTP, базами даних тощо. Дуже хороша
підтримка математичних обчислень.
7
В курсі «Основи програмування» на базі мови Python необхідно виконати
7 лабораторних робіт:
 програмування лінійних алгоритмів;
 програмування розгалужених процесів;
 програмування циклічних алгоритмів;
 рядки;
 застосування функцій;
 структури даних: списки, кортежі, множини;
 рекурсія і обробка матриць.
У Додатку 1 представлено глосарій основних програмістськіх термінів.
ЗАГАЛЬНІ ВКАЗІВКИ ДО ВИКОНАННЯ ЛАБОРАТОРНИХ РОБІТ
Правила роботи з методичними вказівками
Важливо! Студент повинен уважно і вдумливо читати опис кожної
лабораторної роботи!
Методичні вказівки побудовані за принципом «від простого до складного».
У першій лабораторній роботі студент знайомиться з дуже важливими
елементами мови Python - типами даних, операціями над ними, в залежності від
типу, функціями введення і виведення. Нічого складного в першій лабораторній
роботі немає, тому будь-який студент з нею впорається без напруження, якщо
приділить їй деякий час.
В результаті студент повинен чітко розуміти принцип роботи цих
операторів. Якщо студент, в силу яких-небудь обставин, не зможе впоратися з
даної лабораторної роботою, то немає сенсу приступати до наступних, тому що
всі вони засновані на базових поняттях цієї теми.
Не можна приступати до наступної лабораторної роботі, якщо не зроблена
попередня, тому що всі вони взаємопов'язані. Кожна чергова лабораторна робота
заснована на попередній.
8
Перед тим, як приступити до виконання лабораторної роботи, необхідно
ознайомиться з її описом. Для кожної лабораторної роботи дано достатній для її
виконання опис. Передбачається, що студент може самостійно з ним
ознайомитися.
Методичні вказівки містять всю необхідну теоретичну частину, тому
додаткова література за мовою Python не потрібно. Однак, при необхідності
студент може посилити свої знання за допомогою літератури, яку він без зусиль
зможе знайти в мережі Інтернет або із запропонованого списку в методичних
вказівках.
Якщо після прочитання методичних вказівок в студента залишаються
питання, слід звернутися до викладача.
Опис кожної лабораторної роботи починається з розділів "Мета роботи" і
"Теоретичні відомості". Зазначені в цих розділах теми обов'язково повинні бути
вивчені за матеріалами лекційного курсу і по літературі до початку лабораторної
роботи, так само, як і матеріали вказівок до її виконання. Завдання до виконання
кожної роботи складається з загальної частини, яка сформульована в розділі
"Узагальнена формулювання завдання" і уточнення варіанту, який наведено в
розділі "Варіанти завдань".
Студент повинен заздалегідь ознайомитися зі своїм завданням і, якщо у
нього виникають будь-які питання щодо завдання, поставити ці питання
викладачеві до початку роботи.
Виконання лабораторної роботи
Розробка алгоритму рішення
Виконання починається з розробки алгоритму розв'язання задачі. На цьому
етапі повинні бути детально проаналізовані умови завдання і розроблений
алгоритм програми. Алгоритм повинен бути представлений в графічному
вигляді. Хоча уявлення схеми алгоритму не є обов'язковим елементом
проектування програми (для програм з лінійним алгоритмом можна обійтися і
без нього), але схема є зручним інструментом для осмислення завдання і
9
оптимізації рішення. Графічне представлення алгоритму не звільняє від
необхідності його текстового опису, в якому повинні бути обгрунтовані ключові
алгоритмічні рішення. При розробці алгоритму слід приділяти увагу його
спрощення, мінімізації обсягу обчислень, видалення зайвих операцій і т.п.
Написання тексту програми
Написання тексту програми починається з визначення об'єктів, які
необхідні для функціонування алгоритму. Велика частина об'єктів може бути
визначена ще на етапі проектування схеми алгоритму.
Якщо схема алгоритму зроблена досить ретельно, написання кодової
частини програми зводиться до запису кожного елемента схеми оператором
мови програмування. Якщо в складі оператора зустрічається звернення до
функції, негайно перевірте, чи відповідає склад послідовності і типів параметрів,
і повертається специфікаціям функції. Одночасно переконайтеся, що Ви
включили потрібний модуль (import).
При виконанні функції виведення результатів зверніть особливу увагу на
те, щоб результати були видані в наочній формі, придатної для аналізу.
При виконанні функції введення обов'язково перед введенням виведіть на
монітор запрошення.
Передбачте можливість повторного тестування програми і обробку
помилкових ситуацій. Програма повинна "відловлювати", наприклад, ділення на
нуль в математичних задачах і видавати повідомлення, чекаючи реакції
користувача. Тобто подібні конфлікти повинна відпрацьовувати програма, а не
внутрішнє переривання процесора. В Python для обробки винятків передбачена
така конструкція try-except. Більш детально можна ознайомитися в розділі
«Винятки в Python. Конструкція try-except для обробки винятків »або з джерела
[2] стор.44-45.
Ніколи не лінуйтеся писати коментарі до Вашої програми. Добре написані
коментарі полегшують як Вашу роботу, так і роботу того, хто буде читати Вашу
програму.
10
Вимоги до програми
Програма повинна виводити:
 номер варіанта і повідомлення про призначення програми;
 прізвище та ініціали автора програми, групу;
 інформаційні повідомлення про необхідність введення даних;
 повідомлення з результатами, отриманими в ході роботи програми; при
цьому текст повідомлення повинен включати найменування результату і
обчислене значення результату, наприклад «Отримана сума: 123.45»; при
використанні змінних, оголошених як дробові, значення результату повинно
бути представлено в отформатированном вигляді (із зазначенням кількості
знаків після десяткового дробу).
Вимоги до оформлення звіту
Звіт з лабораторної роботи складається з наступних розділів:
 Титульна сторінка
 Зміст
 Мета роботи
 Постановка задачі
 Основна частина
 Висновки
 Список літератури,
 Додаток.
Зразок титульного аркуша представлений в Додатку 6. Необхідно вказати
тему лабораторної роботи, П.І.Б. студента і провідних викладачів та ін.
Зміст обов'язково має бути створено в автоматичному режимі MS Word, а
не «вручну», містити номери сторінок розділів і підрозділів, їх назви.
«Постановка завдання», «Основна частина нумеруються (починаючи з 1). Решта
розділи не нумеруються. Рисунки і таблиці мають наскрізну нумерацію або
11
нумерацію в межах розділу з лідируючим номером розділу і наступного за ним
точкою.
Мета роботи містить формулювання індивідуального завдання.
У розділі «Постановка завдання» необхідно вказати, які завдання (функції)
повинна виконувати програма.
Розділ «Основна частина» включає опис алгоритму програми, опис
об'єктів, які застосовуються в програмі, опис ключових програмних рішень,
прийнятих при реалізації алгоритму в тексті програми.
Для розробки схеми алгоритму програми допускається використовувати
будь-який програмний засіб, що надає відповідні можливості, в тому числі
Diagram Designer, MS Word, MS Visio.
У розділі «Висновки» перераховуються основні пункти виконаної роботи,
трудовитрати. Робиться висновок про рівень працездатності програми, сфері її
застосування і про шляхи можливих модифікацій, розширення функціональних
можливостей та ін. Для лабораторних робіт допускаються висновки, що
збігаються з основними положеннями, наведеними в пункті «Постановка
завдання», тільки, природно, в минулому часі.
У «Додатку» розміщується текст програми і зразок результату роботи
програми.
Текст програми повинен задовольняти вимогам до синтаксису програми.
Необхідно забезпечити вирівнювання операторів в тексті програми. Дизайн коду
програми повинен відповідати угодам про написання програм на мові Python.
Для отримання скріншота вікна з результатами роботи програми можна
скористатися клавішами Alt+PrintScreen.
Шрифт - Times New Roman 14. Міжрядковий відстань - 1.5.
12
ВСТАНОВЛЕННЯ І РОБОТА З ІНТЕРПРЕТАТОРОМ PYTHON
1. Зайти на сайт http://python.org/downloads/ і завантажити свіжу версію
інтерпретатора, яка співвідноситься з ОС, встановленої на комп'ютері.
2. Перше, що треба зробити, запустити інтегровану середу Python IDLE.
Схема запуску представлена на рис.1.
Рисунок 1. − Схема запуску Python IDLE.
3. З'явиться вікно середовища інтерпретатора, готового до інтерактивної
роботи(рис.2).
Рисунок 2. − Вікно Python IDLE.
Середовище IDLE забезпечує три ключових можливості: введення виразів
і програмного коду на мові Python з отриманням результатів прямо в командній
оболонці Python; надає редактор програмного коду з підсвічуванням синтаксису
мови Python і підтримкою функції оформлення відступів і налагоджувач, який
може використовуватися в режимі покрокового виконання програмного коду,
полегшуючи пошук і усунення помилок. Командна оболонка особливо зручна
при опробування простих алгоритмів, фрагментів програмного коду і регулярних
виразів і може використовуватися як дуже потужний і гнучкий калькулятор.
4. Програмний код на мові Python можна записати за допомогою будьякого простого текстового редактора, який здатний завантажувати і зберігати
текст або в кодуванні ASCII, або UTF-8. За умовчанням передбачається, що
файли на мові Python зберігаються в кодуванні UTF-8, підмножині кодування
ASCII, за допомогою якої можна уявити практично будь-який символ
національного алфавіту.
13
Заготовлений заздалегідь файл на мові Python можна запустити наступним
чином.
Набрати файл в редакторі Блокнот і зберегти його з розширенням py. Або
використати редактор текстів з розширеними можливостями Sublime Text.
Завантажити його можна за адресою https://www.sublimetext.com/. Дозволяє
вибрати синтаксис мови, на якому буде написана програма, що дозволить
редактору видавати підказки(рис.3).
Рисунок 3. – Редактор Sublime Text.
Ще одна можливість створити файл, в IDLE зайти в меню File, вибрати
опцію New File і виникне вікно, в якому можна набирати текст(рис.4).
Рисунок 4. − Вікно для набору тексту програми.
Приклад вікна з набраним текстом програми(рис.5).
Рисунок 5.− Вікно з програмою one.py.
14
Для запуску на виконання натиснути Run і ось що вийшло: (рис.6)
Рисунок6. – Результат роботи програми one.py.
Система обов'язково подбає про програміста і зажадає збереження файлу.
Якщо є помилки, вони будуть локалізовані і буде можливість їх відредагувати.
Якщо ж файл вже протестований і правильно працює, то його роботу
можна продемонструвати за допомогою командного рядка в консольному
режимі. Для цього у вікні Пуск вибрати опцію Виконати і в рядку набрати
команду cmd. Приклад запуску на виконання програми в OS Windows на рис.7.
Рисунок 7. – Запуск програми з командного рядка.
Програма second.py була створена в Блокноті(рис.8).
Рисунок 8. – Текст програми second.py.
І ось, що вийшло в результаті роботи програми (рис.9):
Рисунок 9. – Результат роботи програми second.py.
15
СТРУКТУРА ПРОГРАМИ НА МОВІ PYTHON
Програми на мові Python можна розкласти на такі складові, як модулі,
інструкції, вирази і об'єкти. При цьому:
1. Програми діляться на модулі.
2. Модулі містять інструкції.
3. Інструкції складаються з виразів.
4. Вирази створюють і обробляють об'єкти.
Синтаксис мови Python по суті побудований на інструкціях і виразах.
Вирази обробляють об'єкти і вбудовуються в інструкції. Інструкції є більші
логічні блоки програми - вони безпосередньо використовують вирази для
обробки об'єктів. Крім того, інструкції - це місце, де створюються об'єкти
(наприклад, в інструкціях присвоювання), а в деяких інструкціях створюються
абсолютно нові види об'єктів (функції, класи і так далі). Інструкції завжди
присутні в модулях, які самі керуються інструкціями.
ОСНОВНІ СТАНДАРТНІ МОДУЛІ PYTHON
Поняття модуля
Перед тим як приступити до вивчення модулів стандартної бібліотеки,
необхідно визначити те, що в Python називається модулем.
Відповідно до модульним підходом до програмування велике завдання
розбивається на кілька дрібніших, кожну з яких (в ідеалі) вирішує окремий
модуль. У різних методиках даються різні обмеження на розмір модулів, однак
при побудові модульної структури програми важливіше скласти таку
композицію модулів, яка дозволила б звести до мінімуму зв'язки між ними. Набір
класів і функцій, що має безліч зв'язків між своїми елементами, було б логічно
розташувати в одному модулі. Є і ще одне корисне зауваження: модулі повинно
бути легше використовувати, ніж написати заново. Це означає, що модуль
повинен мати зручний інтерфейс: набір функцій, класів і констант, який він
пропонує своїм користувачам.
16
У мові Python набір модулів, присвячених одній проблемі, можна
помістити в пакет.
Більш детально можна ознайомитися про перелік і склад модулів на ресурсі
https://pythonworld.ru/moduli.
Підключення модуля зі стандартної бібліотеки
Підключити модуль можна за допомогою інструкції import. Наприклад,
підключимо модуль os для отримання поточної директорії:
>>>
>>>importos
>>>os.getcwd()
'C:\\Python33'
Післяключовогословаimportвказуєтьсяназвамодуля. Після імпортування
модуля його назва стає змінною, через яку можна отримати доступ до атрибутів
модуля. Наприклад, можна звернутися до константи e, розташованої в модулі
math:
>>>
>>>importmath
>>>math.e
2.718281828459045
Варто відзначити, що якщо зазначений атрибут модуля не буде знайдений,
збудиться виняток AttributeError. А якщо не вдасться знайти модуль для
імпортування, то ImportError.
Використання псевдонімів
Якщо назва модуля занадто довга, або вона вам не подобається з якихось
інших причин, то для нього можна створити псевдонім, за допомогою ключового
слова as.
>>>
>>>importmathasm
>>>m.e
2.718281828459045
17
Доступ до всіх атрибутів модуля math здійснюється тільки за допомогою
змінноїm, а змінної math в цій програмі вже не буде (якщо, звичайно, ви після
цього не напишете import math, тоді модуль буде доступний як під ім'ям m, так і
під ім'ям math) .
Інструкція from
Підключити певні атрибути модуля можна за допомогою інструкції from.
Вона має кілька форматів:
from <Назва модуля> import <Атрибут 1> [as <Ім'я користувача 1>], [<Атрибут 2>
[as <Ім'я користувача 2>] ...]
from <Назва модуля> import *
Перший формат дозволяє підключити з модуля тільки зазначені вами
атрибути. Для довгих імен також можна призначити псевдонім, вказавши його
після ключового слова as.
>>>
>>>frommathimporte,ceilasc
>>>e
2.718281828459045
>>>c(4.6)
5
Імпортовані атрибути можна розмістити на декількох рядках, якщо їх
багато, для кращої читання коду:
>>>
>>>frommathimport(sin,cos,
... tan,atan)
Другий формат інструкції from дозволяє підключити всі (точніше, майже
все) змінні з модуля. Для прикладу імпортуємо всі атрибути з модуля sys:
>>>
>>>fromsysimport*
>>>version
'3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSCv.1600 32 bit (Intel)]'
>>>version_info
sys.version_info(major=3, minor=3, micro=2, releaselevel='final', serial=0)
18
Слід зауважити, що не всі атрибути будуть імпортовані. Якщо в модулі
визначена змінна __all__ (список атрибутів, які можуть бути підключені), то
будуть підключені тільки атрибути з цього списку. Якщо змінна __all__ не
визначена, то будуть підключені всі атрибути, які не починаються з нижнього
підкреслення. Крім того, необхідно враховувати, що імпортування всіх атрибутів
з модуля може порушити простір імен головної програми, так як змінні, що
мають однакові імена, будуть перезаписані.
УБУДОВАНІ ФУНКЦІЇ
У середовищі Python без додаткових операцій імпорту є більш сотні
вбудованих об'єктів, в основному, функцій і винятків. Для зручності функції
умовно розділені за категоріями:
 Функції
перетворення
типів
і
класи:
coerce,str,repr,int,list,
tuple,long,float,complex,dict,super,file,bool,object.
 Числові
і
рядкові
функції:
abs,divmod,ord,pow,
len,chr,unichr,
hex,oct,cmp,round,unicode.
 Функції
обробки
даних:
apply,map,filter,reduce,zip,range,
xrange,max,min,iter,enumerate,sum.
 Функції
визначення
властивостей:
hash,id,callable,issubclass,
isinstance,type.
 Функції для доступу до внутрішніх структурам:
locals,globals,
vars,intern,dir.
 Функції компіляції та виконання: eval,execfile,reload, __import__,compile.
 Функції введення-виведення: input,raw_input,open.
 Функції для роботи з атрибутами: getattr,setattr,delattr, hasattr.
 Функції-"прикрашувачи"
property.
 Інші функції: buffer, slice.
методів
класів:
staticmethod,classmethod,
19
Уточнити призначення функції, її аргументів і результату можна в
інтерактивній сесії інтерпретатора Python (рис.10):
Рисунок 10. – Приклад уточнення призначення функції.
Ще один варіант отримати інформацію про функції можна, звернувшись
за адресою:https://docs.python.org/3.4/library/functions.html#help
У Додатку 2 описаний синтаксис вбудованих функцій, найбільш уживаних
у курсі вивчення мови Python.
У Додатку 3 перераховані ключові слова мови Python. Ці зарезервовані
слова не можна використовувати в якості імені змінної або будь-якого іншого
ідентифікатора. Всі ключові слова Python складаються тільки з букв в нижньому
регістрі. Отримати список ключових слів можливо в інтерпретаторі командою:
help (“keywords”)
20
КЕРІВНИЦТВО З НАПИСАННЯ КОДУ НА PYTHON
Зовнішній вигляд коду
Відступи
Використовуйте 4 пробіли на кожен рівень відступу.
Круглі/квадратні/фігурні дужки, що закривають вираз, в багаторядкових
конструкціях можуть перебувати під першим непробельним символом
останнього рядка списку, наприклад:
my_list =[
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments(
'A', 'b', 'c',
'D', 'e', 'f',
)
або бути під першим символом рядка, що починає багаторядкову
конструкцію:
my_list =[
1, 2, 3,
4, 5, 6,
]
result = some_function_that_takes_arguments(
'A', 'b', 'c',
'D', 'e', 'f',
)
Пробіли - самий кращий метод відступів.Python 3 забороняє змішування
табуляції і пробілів в відступи.Обмежте довжину рядка максимум 79
символами.Переважний спосіб перенесення довгих рядків є використання на
увазі продовжень рядків Python всередині круглих, квадратних і фігурних дужок.
Довгі рядки можуть бути розбиті на декілька рядків, загорнутих в дужки. Це
краще використання зворотної косої межі для продовження рядка.
Кожен імпорт, як правило, повинен бути на окремому рядку.
21
правильно:
import os
import sys
неправильно:
import sys, os
У той же час, можна писати так:
from subprocess import Popen, PIPE
Імпорти завжди поміщаються на початку файлу, відразу після коментарів
до модуля і рядків документації, і перед оголошенням констант.Імпорти повинні
бути згруповані в наступному порядку:
 обсяги імпорту з стандартної бібліотеки;
 обсяги імпорту сторонніх бібліотек;
 обсяги імпорту модулів поточного проекту.
Вставляйте порожній рядок між кожною групою імпорту.Вказуйте
специфікації __all__ після імпорту.
Пробіли в виразах і інструкціях
Уникайте використання пробілів в наступних ситуаціях:
 безпосередньо всередині круглих, квадратних або фігурних дужках;
 безпосередньо перед комою, крапкою з комою або двокрапкою;
 відразу перед дужкою,яка відкриває список аргументів при виклику
функції;
 відразу перед дужкою,після якої слідує індекс або зріз;
 використання більше одного пробіла навколо оператора присвоювання
(або будь-якого іншого) для того, щоб вирівняти його з іншим.
Коментарі
Коментарі, що суперечать коду, гірше, ніж відсутність коментарів. Завжди
виправляйте коментарі, якщо міняєте код!
Коментарі повинні бути закінченими реченнями. Якщо коментар - фраза
або пропозиція, перше слово повинно бути написано з великої літери, якщо
тільки це не ім'я змінної, яка починається з маленької літери (ніколи не змінюйте
регістр змінної!).
22
Якщо коментар короткий, можна опустити точку в кінці речення. Блок
коментарів зазвичай складається з одного або більше абзаців, що складаються з
повноцінних пропозицій, тому кожне речення має закінчуватися точкою.
Ставте два пробіла після точки в кінці речення.
Програмісти, які не говорять англійською мовою, будь ласка, пишіть
коментарі англійською, якщо тільки ви не впевнені на 120%, що ваш код ніколи
не будуть читати люди, які не знають вашого рідної мови.
Блоки коментарів
Блок коментарів зазвичай пояснює код (весь, або тільки деяку частину), що
йде після блоку, і повинен мати той же відступ, що і сам код. Кожен рядок такого
блоку повинна починатися з символу # і одного пробілу після нього (якщо тільки
сам текст коментаря не має відступу).
Абзаци всередині блоку коментарів поділяються рядком, що складається з
одного символу #.
Коментарі в одному рядку з інструкцією
Намагайтеся рідше використовувати подібні коментарі.Такий коментар
знаходиться в тому ж рядку, що і інструкція. "Врядковані" коментарі повинні
відділятися принаймні двома пробілами від інструкції. Вони повинні починатися
з символу # і пробіла.
Синтаксис
Синтаксис мови Python, як і сама мова, дуже простий. Кінець рядка є
кінцем інструкції (крапка з комою не потрібна). Вкладені інструкції
об'єднуються в блоки по величині відступів. Відступ може бути будь-яким,
головне, щоб в межах одного вкладеного блоку відступ був однаковий. І про
читаність коду не забувайте. Відступ в 1 пробіл, наприклад, не найкраще
рішення. Використовуйте 4 пробіли. Вкладені інструкції в Python записуються
відповідно до такого шаблону, коли основна інструкція завершується
двокрапкою, слідом за якою розташовується вкладений блок коду, зазвичай з
відступом під рядком основної інструкції.
23
Схема:
Основна інструкція:
Вкладений блок інструкцій
Кілька спеціальних випадків
Іноді можливо записати кілька інструкцій в одному рядку, розділяючи їх
крапкою з комою:
a = 1; b = 2; print (a, b)
Але не робіть це занадто часто! Пам'ятайте про легкість читання.
Припустимо записувати одну інструкцію в декількох рядках. Достатньоїї
укласти в пару круглих, квадратних або фігурних дужок:
if (a == 1 and b == 2 and
c == 3 and d == 4): # Незабуваємопродвокрапку
print ( 'spam' * 3)
Тілоскладеноїінструкціїможерозташовуватисявтомужрядку,
щоітілоосновної,
якщотілоскладеноїінструкціїнеміститьскладенихінструкцій.
Приклад:
ifx>y:print(x)
Отже, можна коротко резюмувати наступне:
Програма на Python являє собою послідовність команд для уведення даних,
обчислень і інших операцій з даними і виведення результатів. Варто відзначити
цікаву особливість Python. Він не містить операторних дужок (begin..end в pascal
або {..} в С), замість цього блоки виділяються відступами: пробілами, а вхід в
блок
з
операторів
здійснюється
двокрапкою.
Однорядкові
коментарі
починаються зі знака фунта «#», багаторядкові - починаються і закінчуються
трьома подвійними лапками «" "" "».
Щоб присвоїти значення змінній використовується знак «=», а для
порівняння -«==». Для збільшення значення змінної, або додавання до рядка
використовується оператор «+ =», а для зменшення - «- =». Всі ці операції можуть
взаємодіяти з більшістю типів.
Python не вимагає явного оголошення змінних, є регістровозалежим
(змінна var не є еквівалентною змінним Var або VAR - це три різні змінні).
24
Python - це мова з суворою динамічною типізацією. Це означає, що тип
змінної трактується в залежності від присвоєного значення. Неявні перетворення
типів мова Python не допускає, тобто, наприклад, не можна скласти рядок '123' і
число 456.
ТИПИ І СТРУКТУРИ ДАНИХ В PYTHON
Змінні в Python
Змінна в мові програмування − це назва для зарезервованого місця в
пам'яті комп'ютера, призначене для зберігання значень. Це означає, що при
створенні змінної резервується певне місце в пам'яті комп'ютера.
Грунтуючись на типі даних змінної, інтерпретатор виділяє необхідну
кількість пам'яті і вирішує, що може перебувати в зарезервованої області пам'яті.
В Python оголошення відбувається автоматично (це називається динамічна
типізація),
коли
присвоюється
значення
змінній.
Знак
рівності
(=)
використовується для присвоєння значення змінній.
Операнд по ліву сторону від знака рівності (=) це ім'я змінної, операнд по
праву сторону - значення присвоєне цієї змінної. Наприклад:
country = "Swiss" # Присвоїти значення Swiss змінній під назвою country
age = 23 # Присвоєннязначення 23 зміннійage
print (country)
print (age)
Привиконанні, данийкодвиведе:
Swiss
23
Множинне присвоювання значень
В Python можливо присвоювати одне значення декільком змінним відразу.
Наприклад:
a=b=c=1
Створюється об'єкт зі значенням 1, і все 3 змінні вказують на область в
пам'яті, в якій він знаходиться.
Вбудовані типи даних в Python:
25
Інформація, збережена в пам'яті може бути різних типів даних. Наприклад,
вік людини може бути числовим значенням, а його адреса - літерно-числовим. В
Python існує безліч стандартних типів даних, які використовуються для
зберігання певних значень і мають своїспецифічні методи.
До стандартних типів даних в Python відносять:
 Числа (Numbers)
 Рядок (String)
 Список (List)
 Кортеж (Tuple)
 Множини (Set)
 Словник (Dictionary)
Всі перераховані типи даних діляться на змінювані і незмінні. Багато з
зумовлених типів даних Python - це типи незмінних об'єктів: числові дані (int,
float, complex), символьні рядки (class 'str'), кортежі (tuple). Інші типи визначені
як змінювані: списки (list), множини (set), словники (dict).
Числовий тип даних в Python
Числовий тип даних в Python призначений для зберігання числових
значень. Числові об'єкти створюються, коли їм присвоюється значення. Приклад:
num1 = 1
num2 = 2
Також можна видалити числовий об'єкт за допомогою ключового слова del.
Синтаксис команди del наступний:
del num1 # видаляє змінну num1
del num2,num3 # видаляє обидві змінні num2 за num3 за раз
В Python є чотири види числового типу даних:
int (ціле число)
long (довге ціле число [може бути представлено в вісімковій або
шістнадцятковій системі числення])
float (число з плаваючою точкою: -0.2, 0.0, 3.14159265 і т.д.)
complex (комплексне число)
Приклади видів числового типу даних наведені в Табл.1:
26
Таблиця 1. - Приклади числових типів даних.
int
long
float
complex
1
51924361L
0.0
3.14j
102
-0x19323L
15.20
45.j
-786
0122L
-21.9
9.322e-36j
0
0xDEFABCECBDAECBFBAEl
32.3+e18
.876j
0b10
535633629843L
-90.
-.6545+0J
-0x260
-052318172735L
-32.54e100
3e+26J
0x69
-4721885298529L
70.2-E12
4.53e-7j
Для перетворення чисел з дійсних в цілі і навпаки в Python визначені
функції int() і float(). Наприклад, int(10.58) дає в результаті 10, а float(10) дає в
результаті 10.0. Операції з числами наведені в Додатку 4.
Крім того, в Python для операцій з числами використовуються функції abs()
(обчислення абсолютного значення - модуля, abs(-3)→3), pow() (піднесення до
степеня, pow(2,3)→8), divmod()(обчислення результату цілочисельного ділення і
залишку, divmod(17,5)→(3,2)) і round()округлення,round(100.0/6)→17.0). Ці
функції є «вбудованними», що означає, що для використання немає необхідності
підключати додаткові модулі. Всі інші функції для роботи з числами
(математичні), такі як обчислення квадратного кореня, синуса і ін. вимагають
підключення модуля math.
Логічні значення в Python представлені двома величинами − логічними
константами True (Істина) і False (Хибність).
Логічні значення виходять в результаті логічних операцій і обчислення
логічних виразів.
Більш докладно логічні операції і операції порівняння описані в Додатку 4.
Структури даних
27
Мова Python включає в себе всі необхідні структури для побудови ПЗ:
рядки, списки, кортежі, словники і множини.
Структури даних використовуються для зберігання зв'язаних даних, які
визначені як послідовності. Послідовності, в свою чергу, поділяються на
змінювані і незмінні. Під змінністю послідовності розуміється можливість
додавати або видаляти елементи цієї послідовності (тобто змінювати кількість
елементів послідовності).
Для структур даних в Python визначені функції (операції) і методи,
принципової різниці між якими немає, а є відмінності в правилах написання.
Рядки
Рядок - це послідовність символів з довільним доступом. Рядки в мові
Python неможливо змінити - в цьому випадку говорять, що це immutableтип.
Спроба змінити символ в певній позиції або підрядок викличе помилку. В Python
рядки і символи потрібно брати в лапки (одиночні або подвійні). Елементи
(символи) в рядку нумеруються, починаючи з нуля. Одиночний символ − буква
− є «з точки зору Python» рядком, що складається з одного елемента.
Максимально можлива кількість символів в рядку (довжина рядка) в
Python обмежується тільки доступним об'ємом пам'яті. Так що текст будь-якого
розумного розміру (наприклад, кілька тисяч сторінок) може бути записаний в
один рядок Python.
Числа можуть бути перетворені в рядки за допомогою функції str().
Наприклад, str(123) дасть рядок '123'. Якщо рядок є послідовністю знаків-цифр,
то він може бути перетворений в ціле число за допомогою функції int ()(int('123')
дасть в результаті число 123), а в дійсне− за допомогою функції float()
(float('10.56') дасть в результаті число 10.56).
Можна отримати будь-який символ рядка по його індексу. Для визначення
підрядкавикористовується такий механізм як зріз − два індекса, розділені
двокрапкою:
>>> word='strength'
>>> word[4]
n # результат
28
>>> word[0: 2]
st # результат
>>> word[2: 4]
re # результат
Робота з рядками більш детально описана в Лабораторній роботі №4.
Список
Список - упорядкований набір елементів, які можуть бути об'єктами різних
типів (числа, рядки, інші списки і кортежі). Елементи списку перераховуються
через кому. Сам список береться
в квадратні дужки. Список є змінною
структурою даних, що дозволяє видаляти і додавати елементи, тобто його можна
модифікувати. Елементи списку можуть бути різного типу. Також списки
підтримують вкладеність.
list=['one','two',[1,2,3]] # Приклад створення списку
Методи списку:
append(x)− додає елемент в кінець списку;
extend(list)− розширює список, додаючи в кінець списку елементи іншого
списку;
insert(i,x)− вставляє елемент на місце за індексом i;
remove (x)− видаляє перший елемент списку співпав зі значенням x;
pop (x)− видаляє перший елемент і повертає його;
index (x, [start [, end]])− повертає індекс першого збігається елемента з x
від індексу start до end;
count (x)− повертає кількість елементів збігаються з x;
sort ([функція порівняння])− сортування елементів списку;
reverse ()− розгортає список;
copy ()− повертається копія списку;
clear ()− очищає список;
len () − довжина списку;
Так само списки підтримують арифметичні складання, де:
список + список - об'єднання списків;
список * число - повторення списку n раз.
29
Для перевірки, чи є елемент частиною списку, можна використовувати
оператор in:
>>> list=['one','two']
>>> 'one'in list
True
До списків можна звертатися, використовуючи індекси і зрізи:
>>> list=[1,2,3,4,5,6]
>>> list.append('seven')
>>> list
[1,2,3,4,5,6,'seven']
>>> list[7]
Traceback (most recent call last):
File "",line 1,in
IndexError: list index out of range
>>> list[6]
'Seven'
Вартовідмітити,
щоіндексаціяйде,починаючизнуля,
анез
1,
щоговоритьповідомлення: IndexError: list index out of range.
Зрізи
Списки підтримують зрізи. Зріз - витяг з рядка одного символу або деякого
фрагмента підрядка. За замовчуванням, синтаксис зрізу наступний: [start: stop:
step], де останній аргумент не є обов'язковим. Також якщо вказувати від`ємні
параметри, то зріз буде починатися з кінця.
Приклад:
>>> list=[1,2,3,4,5,6,7]
>>> list[1:]
[2,3,4,5,6,7]
>>> list[3:5]
[4,5]
>>> list[3:-2]
[4,5]
>>> list[::2]
[1,3,5,7]
30
Більш детальну інформацію про роботу зі списками можна отримати з [2]
стр.71-80 і [5] стр.5-15.
Кортежі
Кортежі служать для зберігання кількох об'єктів разом. Їх можна
розглядати як аналог списків, але без такої великої функціональності, яку надає
клас списку. Одна з найважливіших особливостей кортежів полягає в тому, що
вони незмінні, так само, як і рядки. Тобто модифікувати кортежі неможливо.
Кортежі зазвичай використовуються в тих випадках, коли оператор або
призначена для користувача функція повинні напевно знати, що набір значень,
тобто кортеж значень, не зміниться.
Кортежі позначаються зазначенням елементів, розділених комами; за
бажанням, їх можна ще укласти в круглі дужки.
tup =(1,2,3,4,5,6,7)
Для кортежів необов'язково наявність дужок, тобто вони можуть бути
записані як:
>>> tup=1,2,3,4,5,6
>>> print(tup)
Хоча дужки і не є обов'язковими, краще вказувати їх, щоб було очевидно,
що це кортеж, особливо в двозначних випадках. Наприклад, print(1,2,3) і
print((1,2,3)) роблять різні речі: перше вираження виводить три числа, тоді як
друге - кортеж, що містить ці три числа.
Кортежі, як і списки, підтримують додавання і множення:
>>> tup+(7,8,9)
(1,2,3,4,5,6,7,8,9)
>>> tup*2
(1,2,3,4,5,6,1,2,3,4,5,6)
Варто відзначити, що кортеж можна створити з ітеріруемого об'єкта:
>>> tup=tuple('Hello!')
>>> tup
('H','e','l','l','o','!')
Для роботи з кортежами доступні два методи:
count (x) - повертає кількість x в кортежі;
31
index (x) - повертає індекс першого-ліпшого x.
Більш детальну інформацію про роботу з кортежами можна отримати з [5]
стр.12-15.
До кортежів, як і до списків, застосовне поняття упаковки і розпаковування
елементів:
>>> tup=1,2,3
>>> a,b,c=tup
>>> a
1
>>> b
2
>>> c
3
>>> list=[1,2,3]
>>> d,e,f=list
>>>d
1
>>> e
2
>>> f
3
Кортеж можна перетворити в список, як власне і список в кортеж:
>>> list=[1,2,3]
>>> tup=tuple(list)
>>> tup
(1,2,3)
Множини
Множина в мові Python- це структура даних, еквівалентна множинам в
математиці. Множина може складатися з різних елементів, порядок елементів у
множині невизначений. У множину можна додавати і видаляти елементи, можна
перебирати елементи множини, можна виконувати операції над множинами
(об'єднання, перетин, різниця). Можна перевіряти приналежність елемента
множині.
32
На відміну від масивів, де елементи зберігаються у вигляді послідовного
списку, у множинах порядок зберігання елементів невизначений (більш того,
елементи множини зберігаються не підряд, як в списку, а за допомогою хитрих
алгоритмів). Це дозволяє виконувати операції типу "перевірити приналежність
елемента множині" швидше, ніж просто перебираючи всі елементи множини.
Елементами множини може бути будь-який незмінний тип даних: числа,
рядки, кортежі. Не можна зробити елементом множини список (але можна
зробити кортеж) або іншумножину. Вимога незмінності елементів множини
накладається особливостями подання множини в пам'яті комп'ютера.
Для створення множини
можна використовувати фігурні дужки або
функцію set(). Для створення порожнього набору потрібно використовувати
set(), але не {}, тому що фігурні дужки в даному випадку створюють інший тип
даних − порожній словник.Способи створення множин:
>>> set([3,6,3,5])
{3,5,6}
>>>
Множини можна створювати на основі списків. Зверніть увагу, що в
момент створення множини зі списку будуть видалені повторювані елементи. Це
відмінний спосіб очистити список від повторів:
>>> list(set([3,6,3,5]))
[3,5,6]
>>>
Функція range() дозволяє створювати множини з діапазону:
>>> set(range(10))
{0,1,2,3,4,5,6,7,8,9}
>>>
33
ЛАБОРАТОРНА РОБОТА №1. ПРОГРАМУВАННЯ ЛІНІЙНИХ
АЛГОРИТМІВ ТА РОЗГАЛУЖЕНИХ ПРОЦЕСІВ
Мета роботи: Придбання навичок по роботі з інтегрованим середовищем
Python IDLE. Вивчення принципів розробки програм лінійної структури.
Отримання навичок роботи з функціями уведення / виведення, різними типами
даних, прийнятих в цій мові. Вивчення керуючих структур мови Python і
отримання навичок складання програм з розгалуженнями.
Теми для попереднього опрацювання:
 системи числення;
 цілі числа;
 числа з плаваючою точкою;
 перетворення типів;
 арифметичні операції;
 логічні операції;
 операції порівняння;
 введення і виведення в Python (форматування, вивід рядків на екран);
 математичні функції;
 поняття умовних конструкцій;
 оператор if-else;
 оператор if-elif-else;
 умовний вираз;
 оператор вибору;
 логічні значення виразів, які мають типи, що відрізняються від
булевского.
1.1 Теоретичні відомості
Лінійний алгоритм - алгоритм, в якому обчислення виконуються строго
послідовно. Такий алгоритм реалізується простими інструкціями. Прості
34
інструкції (simple statements) є базовим елементом більшості мов прог-рамування
і Python не виняток.
Прості інструкції розташовуються в одному рядку. Кілька простих
інструкцій теж можна розташовувати в одному рядку, для цього вони повинні
бути розділені крапкою з комою. Однак, зловживати не варто, так як це погано
позначається на читання коду.
Типова блок-схема лінійного алгоритму показана на рис. 11.
початок
start
A, B
sum = A + B
sum
Уведення даних
користувачем
Обробка даних
Виведення
результатів на
екран
кінець
end
Рисунок 11. Приклад лінійного алгоритму програми.
Цілі числа (int)
Числа в Python 3 нічим не відрізняються від звичайних чисел. Вони
підтримують набір звичайних математичних операцій:
x+y
x-y
x*y
x/y
x // y
x%y
-x
abs(x)
divmod(x, y)
x ** y
pow(x, y[, z])
додавання
віднімання
множення
ділення
отримання цілої частини від
ділення
залишок від ділення
зміна знака числа
модуль числа
Частка і залишок від ділення
зведення в ступінь
xy по модулю (якщо модуль
заданий)
35
Також потрібно відзначити, що цілі числа в Python 3, на відміну від
багатьох інших мов, підтримують довгу арифметику (проте, це вимагає більше
пам'яті).
Приклади операцій:
>>> 255+34
289
>>> 5*2
10
>>> 20/3
6.666666666666667
>>> 20//3
6
>>> 20%3
2
>>> 3**4
81
>>> pow(3,4)
81
>>> pow(3,4,27)
0
>>> 3**150
369988485035126972924700782451696644186473100389722973815184405301748249
Бітові операції
Над цілими числами також можна виконувати бітові операції.
x|y
x^y
x&y
x << n
x >> y
~x
побітове або
побітове виключення або
побітовеі
бітовий зсув вліво
бітовий зсув вправо
інверсія бітів
Системи числення
Для переведення числа з однієї системи числення в іншу Python надає
кілька функцій:
36
 int ([object], [основа системи числення]) - перетворення до цілого числа
в десятковій системі числення. За замовчуванням система числення десяткова,
але можна задати будь-яку основу від 2 до 36 включно.
 bin (x) - перетворення цілого числа в двійковий рядок.
 hex (х) - перетворення цілого числа в шістнадцятковий рядок.
 oct (х) - перетворення цілого числа в вісімковий рядок.
Дійсні числа (float)
Дійсні числа підтримують ті ж операції, що і цілі.Більш докладно про
можливі операції див. Додаток 4.
Прості приклади роботи з числами:
>>>c=150
>>>d=12.9
>>>c+d
162.9
>>>p=ab(d-c)# Модуль числа
>>>print(p)
137.1
>>>round(p)# Заокруглення
137
Крім стандартних виразів для роботи з числами (а в Python їх не так вже й багато),
в складі Python є кілька корисних модулів.
Модуль math надає більш складні математичні функції.
>>>
>>>import math
>>>math.pi
3.141592653589793
>>>math.sqrt(85)
9.219544457292887
Модуль random реалізує генератор випадкових чисел і функції випадкового
вибору.
>>>import random
>>>random.random()
0.15651968855132303
37
Більш докладно операції з різними типами змінних описано в Додатку 4.
Функції print і input
Для обміну даними із зовнішнім для програми середовищем в Python
застосовуються функції print і input.
Функція print виводить на монітор те, що вказано в дужках при виклику
цієї функції. У дужках можуть бути будь-які типи даних. Крім того, кількість
даних може бути різним:
>>> print(1032)
1032
>>> print(2.34)
2.34
>>> print("Hello")
Hello
>>> print("a:", 1)
a: 1
>>> one = 1
>>> two = 2
>>> three = 3
>>> print(one, two, three)
123
Аргументи функції (те, що в дужках), поділяються між собою комами. У
виводі замість ком значення розділені пробілом. Якщо в дужках стоїть вираз, то
спочатку він виконується, після чого print () вже виводить результат цього
виразу:
>>> print("hello" + " " + "world")
hello world
>>> print(10 - 2.5/2)
8.75
У print () передбачені додаткові параметри. Наприклад, через параметр sep
можна вказати відмінний від пробілу роздільник рядків:
>>> print("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", sep="-")
Mon-Tue-Wed-Thu-Fri-Sat-Sun
>>> print(1, 2, 3, sep="//")
38
1//2//3
Форматування виведення може виконуватися в так званому старому стилі
або за допомогою строкового методу format. Старий стиль також називають Сістилем, так як він схожий з тим, як відбувається вивід на екран в мові C. Приклад:
>>> pupil = "Ben"
>>> old = 16
>>> grade = 9.2
>>> print("It's %s, %d. Level: %f" % (pupil, old, grade))
It's Ben, 16. Level: 9.200000
Тут замість трьох комбінацій символів %s, %d, %f підставляються
значення змінних pupil, old, grade. Букви s, d, f позначають типи даних - рядок,
ціле число, дійсне число. Якби було потрібно підставити три рядки, то у всіх
випадках використовувалося б сполучення % s.
Хоча в якості значення змінної grade було зазначено число 9.2, на екран
воно вивелося з додатковими нулями. Однак, можна вказати, скільки потрібно
знаків після коми, записавши перед буквою f точку з бажаним числом знаків в
дробовій частині:
>>> print("It's %s, %d. Level: %.1f" % (pupil, old, grade))
It's Ben, 16. Level: 9.2
Тепер розглянемо метод format ():
>>> print("This is a {0}. It's {1}.".format("ball", "red"))
This is a ball. It's red.
>>> print("This is a {0}. It's {1}.".format("cat", "white"))
This is a cat. It's white.
>>> print("This is a {0}. It's {1} {2}.".format(1, "a", "number"))
This is a 1. It's a number.
У рядку в фігурних дужках вказані номери даних, які будуть сюди підставлені. Далі до рядка застосовується метод format (). У його дужках вказуються самі дані (можна використовувати змінні). На нульове місце підставиться перший аргумент методу format (), на місце з номером 1 - другий і т. д.
За введення у програму даних з клавіатури в Python відповідає функція
input (). Коли викликається ця функція, програма зупиняє своє виконання і чекає,
39
коли користувач введе текст. Після цього, коли він натисне Enter, функція input
() забере введений текст і передасть його програмі, яка вже буде обробляти його
відповідно до своїх алгоритмів.
Якщо у інтерактивному режимі ввести команду input (), то комп'ютер буде
чекати, коли ви введете щось і натиснете Enter або просто натиснете Enter. Якщо
ви щось ввели, це відразу ж відобразитися на екрані:
>>> input()
Yes!
'Yes!'
Функція input () передає введені дані у програму. Їх можна присвоїти
змінній. В цьому випадку інтерпретатор не виводить рядок відразу ж:
>>> answer = input()
No, it is not.
В даному випадку рядок зберігається в змінній answer, і при бажанні
можно вивести її значення на екран:
>>> answer
'No, it is not.'
При використанні функції print () лапки опускаються.
За замовчуванням функція іnput () вводить інформацію як рядок, тобто як
символи.
Приклад:
>>> x=input()
12
>>> y=input()
5
>>> print (x+y) # до першого рядку приєднується другий
125
Щоб працювати з числовою інформацією треба для функції input() вказати тип числа,
що вводиться ( наприклад, int або float).
Приклад:
>>> x=int(input())
12
40
>>> y=int(input())
5
>>> print(x+y)
# перше число складається з другим
17
>>>
Перед викликом функції треба передбачити спеціальне запрошення, тому
що користувач може не зрозуміти, що від нього чекає програма.
Приклад:
>>> UserName=input ()
Natalia
>>> print (UserName)
Natalia
>>>
Поняття розгалуження
Розгалужений обчислювальний процес передбачає кілька можливих
напрямків обчислення, але тільки одиніз них повинен виконуватися при
реалізації алгоритму. Тому розгалуження включає перевірку одного або
декількох умов, в залежності від якої і буде вибиратися напрямок (гілка)
обчислення.
Таким чином, алгоритм розгалуження складається з перевірки умови
(умов) і всіх можливих гілок обчислення, при цьому бажано, щоб дії, загальні
для всіх гілок, описувалися один раз (до або після розгалуження).
Найбільш
відома
інструкція,
що
дозволяє
реалізувати
логічне
розгалуження, складається з трьох частин: if, elif, else.
Керуючі конструкції - оператори IF ... ELIF ... ELSE
Структура керуючої конструкції (або "прийняття рішення") вимагає, щоб
програміст поставив одне або більше умов, які будуть виконані і перевірені
програмою і однієї або декількох дій, які будуть виконані, якщо умова буде
визначено як істина (true) і, опціонально, інші вирази, які будуть виконані, якщо
умова буде визначено як хибність (false).
Нижче наведено форму типової структури форми керуючої конструкції,
яка схожа в більшості мов програмування (рис.12):
41
start
false
умова
true
оператори
end
Рисунок 12. − Приклад розгалуженого алгоритму програми.
Мова програмування Python передбачає будь-яке не рівне нулю або не
порожнє значення як істину (true), і навпаки - якщо значення буде порожнім або
дорівнювати нулю - то воно буде вважатися хибним(false).
Оператор IF
Оператор if в Python подібний цьому оператору в інших мовах. Утвердження з використанням оператора if містить в собі логічну умову, в який
проводиться порівняння даних і по результату вибирається подальша дія.
Синтаксис
Синтаксис оператора if в Python такий:
if умова:
дія(s)
Якщо логічна умова є істиною (true), тоді блок дій в виразі буде виконаний.
Якщо умова є хибною (false) - тоді буде виконаний наступний блок коду після
цього виразу.
Приклад:
var1 = 100
if var1:
print ("1 - Got a true expression value")
print (var1)
var2 = 0
if var2:
print ("2 - Got a true expression value")
print (var2)
print ("Good bye!")
Коли цей код буде виконаний - він приведе до такого результату:
42
1 - Got a true expression value
100
Good bye!
Операторы IF…ELIF…ELSE
Оператор else може використовуватися разом з оператором if. Оператор
else містить блок коду, який буде виконаний, якщо результат виразу дорівнює
нулю або вважається хибним. Це опціональний оператор, і він може бути тільки
один у всьому виразі після if.
Синтаксис
If умова:
дія (ї)
else:
дія (ї)
Приклад:
var1 = 100
if var1:
print ("1 - Got a true expression value")
print (var1)
else:
print ("1 - Got a false expression value")
print (var1)
var2 = 0
if var2:
print ("2 - Got a true expression value")
print (var2)
else:
print ("2 - Got a false expression value")
print (var2)
print ("Good bye!")
Результат виконання:
1 - Got a true expression value
100
2 - Got a false expression value
0
Good bye!
Оператор elif
Оператор elif дозволяє виконувати множинну перевірку виразу і
виконувати блок коду, як тільки результат буде вважатися істиною.
43
Як і оператор else, elif опціональний, однак, на відміну від else, він може
використовуватися багаторазово.
Синтаксис
if умова:
дія (ї)
elif умова2:
дія(ї)
elif умова3:
дія(ї)
else:
дія(ї)
В Python немає таких операторів як switch або case, але можна
використовувати оператори if..elif ... замість них.
Приклад:
var = 100
if var == 200:
print ("1 - Got a true expression value")
print (var)
elif var == 150:
print ("2 - Got a true expression value")
print (var)
elif var == 100:
print ("3 - Got a true expression value")
print (var)
else:
print ("4 - Got a false expression value")
print (var)
print ("Good bye!")
Коли цей код буде виконаний - він приведе до такого результату:
3 - Got a true expression value
100
Good bye!
Вкладені конструкції IF
Бувають випадки, коли ви хочете провести ще одну перевірку після того,
як результат виразу прийнятий як істина. В такому випадку - можна
використовувати вкладені керуючі конструкціїif (або інакше каскадні).
44
У вкладеної конструкції, ви можете додавати if..elif ... else всередині іншої
такої ж конструкції.
Синтаксис
if умова1:
дія (ї)
if умова2:
дія (ї)
elif умова3:
дія (ї)
else
дія (ї)
elif умова4:
дія (ї)
else:
дія(ї)
Приклад:
var = 100
if var < 200:
print ("Expression value is less than 200")
if var == 150:
print ("Which is 150")
elif var == 100:
print ("Which is 100")
elif var == 50:
print ("Which is 50")
elif var < 50:
print ("Expression value is less than 50")
else:
print ("Could not find true expression")
print ("Good bye!")
Результат виконання:
Expression value is less than 200
Which is 100
Good bye!
45
Як правило, в якості умови, що перевіряється використовується результат
обчислення одного з наступних операторів порівняння:
<Менше - умова вірна, якщо перший операнд менше другого.
>Більше - умова вірна, якщо перший операнд більше другого.
<= Менше або дорівнює.
>= Більше або дорівнює.
== Рівність. Умова вірна, якщо два операнда рівні.
! = Нерівність. Умова вірна, якщо два операнда нерівні.
Оператори порівняння в Python можна об'єднувати в ланцюжки (на відміну
від більшості інших мов програмування, де для цього потрібно використовувати
логічні зв'язки), наприклад, a==b==c або1<=x<=10.
Оператори порівняння повертають значення спеціального логічного типу
bool. Значення логічного типу можуть приймати одне з двох значень: True
(істина) або False (хибність). Якщо перетворити логічне True до типу int, то
вийде 1, а перетворення False дасть 0. При зворотному перетворенні число 0
перетворюється в False, а будь-яке ненульове число в True. При перетворенні str
в bool порожній рядок перетворюється в False, а будь-який непорожній рядок в
True.
Питання для самоперевірки
1. Наведіть
приклади
операцій.
Для
чого
призначена
операція
присвоєння?
2. Які існують правила і рекомендації для іменування змінних?
3. Які типи даних ви знаєте? Опишіть їх.
4. Чому операція виду а <в = з недопустима, а операція виду а <в == с допустима?
5. Чим відрізняються результати операцій «/» і «//» для цілих чисел? А для
дійсних чисел?
6. Чи можна перетворити дробове число в ціле? ціле в дробове? У яких
випадках можна рядок перетворити в число?
7. Який обчислювальний процес називається розгалуженим?
46
8. Як записується повна форма умовної інструкції?
9. Яка інструкція називається неповним розгалуженням?
10.
Які оператори порівняння використовуються для перевірки умови?
11.
Який тип даних повертають оператори порівняння?
12.
Перерахуйте логічні оператори.
13.
Наведіть синтаксис каскадної умовної інструкції.
1.2 Узагальнене формулювання завдання до лабораторної роботи
1) Вивчити основні можливості інтегрованого середовища Python IDLE для
підготовки тексту програми і запуску її на виконання.
2) Вивчити структуру програми на мові Python, способи оголошення
змінних і перетворення типів, функції введення і виведення даних.
3) Розробити лінійну програму відповідно до варіанта завдання.
4)Вивчити принципи побудови програм із застосуванням умовних
операторів.
5)Розробити 1 лінійну програму і 2 програми з операторами розгалуження
відповідно до варіанта завдання.
6) Вхідні дані і результат роботи супроводжувати відповідною
інформацією на екрані.
7) Показати розроблену програму викладачеві.
8) Письмово відповісти на Питання для самоперевірки.
9) Оформити звіт відповідно до вимог.
Завдання на виконання лабораторної роботи складається з 3-х частин:
 обчислення в математичних задачах (лінійний алгоритм);
 використання математичних формул за виконанням певних умов
(розгалужений процес);
 обчислення конкретної функції, в залежності від введеного значення х
(розгалужений процес).
Варіанти завдань до лабораторної роботи
Обчислення в математичних задачах
47
(Перше завдання)
1) Скласти програму переведення радіанної міри кута в градуси, хвилини і
секунди.
2) Дійсні числа a і b уводяться з клавіатури. Для a обчислити відсоток b від цього
числа.
3) Катети прямокутного трикутника уводяться з клавіатури. Обчислити довжину
гіпотенузи, периметр і площу цього трикутника. Відповідь дати з точністю до 10
знаків після коми.
4) Користувач уводить три числа. Збільшити перше число в два рази, друге числа
зменшити на 3, третє число звести в квадрат і потім знайти суму нових трьох
чисел.
5) Користувач уводить ціни 1 кг цукерок і 1 кг печива. Знайти вартість: а) однієї
покупки з 300 г цукерок і 400 г печива; б) трьох покупок, кожна з 2 кг печива і 1
кг 800 г цукерок.
6) Дано значення температури в градусах Цельсія. Вивести температуру в
градусах Фаренгейта.
7) Користувач уводить суму вкладу в банк і річний відсоток. Знайти суму вкладу
через 5 років (розглянути два способи нарахування відсотків)
8) З тризначного числа x відняли його останню цифру. Коли результат розділили
на 10, а до приватного зліва приписали останню цифру числа x, то вийшло число
237. Знайти число x.
9) Вивести на екран п'ять рядків з нулів, причому кількість нулів у кожному
рядку дорівнює номеру рядка.
10) Вивести на екран прямокутник, заповнений літерами А. Кількість рядків в
прямокутнику дорівнює 5, кількість стовпців дорівнює 8.
11) Вивести на екран букву "W" з символів "*" (зірочка).
12) Дано три змінні a, b і c. Змінити значення цих змінних так, щоб в a зберігалося
значення a + b, в b зберігалася різниця старих значень c-a, а в c зберігалося сума
старих значень a + b + c.
48
13) Число Армстронга - це таке натуральне число, яке дорівнює сумі своїх цифр,
зведених в ступінь, рівну кількості його цифр. Знайти всі такі числа від 1 до n, де
n вводиться на вимогу з клавіатури.
14) Користувач вводить кількість тижнів, місяців, років і отримує кількість днів
за цей час. Вважати, що в місяці 30 днів.
15) Потрібно обчислити, скільки банок фарби потрібно, щоб пофарбувати
поверхню бака циліндричної форми. Пофарбувати треба і зовні, і зсередини.
Користувач вводить діаметр і висоту бака, а також, яку площу можна забарвити
однієї банкою фарби.
16) Обчислити тривалість року на двох планетах по введеним їх радіусів орбіт і
швидкості руху по орбітах. З'ясувати, чи правда, що рік на першій планеті довше,
ніж на другий. Тривалість року обчислюється за формулою: 2 * радіус_орбіти *
¶ / орбітальная_скорость.
17) Уводяться два числа в двійковій системі числення. Потрібно виконати над
ними побітові операції І, АБО і виключення АБО. В кінці вивести результат
операцій також в двійковому поданні.
18) Знайти суму членів арифметичної прогресії, якщо відомі її перший член,
знаменник і число членів прогресії.
19) Розрахуйте | x | + x5, якщо x = -2.
20) Користувач вводить три числа. Знайдіть середнє арифметичне цих чисел, а
також різницю подвоєної суми першого і третього чисел і потроєного другого
числа.
21) Дано число a. Не користуючись ніякими арифметичними операціями крім
множення, отримайте: а) a4 за дві операції; б) a6 за три операції; в) a15 за п'ять
операцій.
22) Дан прямокутник розміром 647 x 170. Скільки квадратів зі стороною 30
можна вирізати з нього?
23) Розрахуйте значення виразу (a + 4b) (a-3b) + a2 при a = 2 і b = 3.
24) Три опору R1, R2, R3 з'єднані паралельно. Знайти опір з'єднання. Величина
опорів вводиться користувачем.
49
25) Скласти програму для обчислення шляху, пройденого човном, якщо його
швидкість в стоячій воді v км / год, швидкість течії річки v1 км / ч, час руху по
озеру t1 ч, а проти течії річки - t2 ч.
26) Дана величина А, що виражає обсяг інформації в байтах. Перекласти А в
більш великі одиниці виміру інформації.
27) Знайти (в радіанах в градусах) всі кути трикутника зі сторонами а, b, с.
28) Дано два числа. Знайти середнє арифметичне кубів цих чисел і середнє
геометричне модулів цих чисел.
29) Дано дійсне число R виду nnn. ddd (три цифрових розряду в дробової і цілої
частинах). Поміняти місцями дробову і цілу частини числа і вивести отримане
значення числа.
30) Написати програму визначення кількості шестизначних "щасливих"
трамвайних квитків, у яких сума перших трьох цифр збігається з сумою трьох
останніх.
Використання математичних формул за виконанням певних умов
(Друге завдання)
1) Увести з клавіатури три дійсних числа. Піднести до квадрата ті з них, значення
яких невід'ємні, і в четверту ступінь - від`ємні .
2) Увести з клавіатури координати двох точок А (х1, у1) і В (х2, у2). Скласти
алгоритм, який визначає, яка з точок знаходиться ближче до початку координат.
3) Увести з клавіатури величини двох кутів трикутника (в градусах). Визначити,
чи існує такий трикутник, і якщо так, то чи буде він прямокутним.
4) Увести з клавіатури дійсні числа х і у, не рівні одне одному. Менше з цих двох
чисел замінити половиною їх суми, а більше - їх подвоєним добутком.
5) На площині ХОY задана своїми координатами точка А (координати ввести з
клавіатури). Вказати, де вона розташована (на якій осі або в якому координатном
куті).
6) Увести з клавіатури цілі числа a, b. Якщо числа не рівні, то замінити кожне з
них одним і тим же числом, рівним більшому із вихідних, а якщо рівні, то
замінити числа нулями.
50
7) Підрахувати кількість негативних серед чисел а, b, с (ввести з клавіатури).
8) Підрахувати кількість додатних серед чисел а, b, с (ввести з клавіатури).
9) Підрахувати кількість цілих серед чисел а, b, с (ввести з клавіатури).
10) Визначити, дільником яких чисел а, b, с є число k (ввести з клавіатури).
11) Послуги телефонної мережі оплачуються за таким правилом: за розмови до
А хвилин в місяць - В грн., а розмови понад встановлену норму оплачуються з
розрахунку З грн. за хвилину. Написати програму, яка обчислює плату за
користування телефоном для уведеного часу розмов за місяць. Дані вводити з
клавіатури.
12) Скласти програму, яка перевіряла б, не приводить чи сумування двох цілих
чисел А і В до переповнення (тобто до результату більшого ніж 32 767). Якщо
буде переповнення, то повідомити про це, інакше вивести суму цих чисел. Всі
величини вводити з клавіатури.
13) Визначити правильність дати, введеної з клавіатури (число - від 1 до 31,
місяць - від 1 до 12. Якщо введені некоректні дані, то повідомити про це.
14) Скласти програму, що визначає результат ворожіння на ромашці - «любитьне любить», взявши за вихідне дане кількість пелюсток n (ввести з клавіатури).
15) Написати програму, яка аналізує дані про вік і відносить людину до однієї з
чотирьох груп: дошкільник, учень, працівник, пенсіонер. Вік вводиться з
клавіатури.
16) Скласти програму, що визначає, чи пройде графік функції у = ах2 + b х + с
через задану з клавіатури точку з координатами (t, n).
17) До фіналу конкурсу кращого за професією «Спеціаліст електронного офісу»
були допущені троє: Іванов, Петров, Сидоров. Змагання проходили в три тури.
Іванов в першому турі набрав t1 балів, у другому - n1, в третьому - p1. Петров t2, n2, p2 відповідно; Сидоров - t3, n3, p3. Скласти програму, що визначає, скільки
балів набрав переможець (бали вводити з клавіатури).
18) Написати програму-фільтр, яка при натисканні будь-яких клавіш виводить на
екран тільки букви і цифри, при цьому вказуючи, що виводиться: буква або
цифра.
51
19) Написати програму, за довжинами сторін (задаються з клавіатури) розпізнає
серед всіх трикутників ABC прямокутні. Якщо таких немає, то обчислити
величину кута С.
20) Знайти max {min (a, b), min (c, d)}. Числа вводити з клавіатури.
21) Ввести 4 числа а, b, с, d. Визначити, яке з 3-х чисел дорівнює d (чи a, чи b, чи
c). Якщо жодне не дорівнює d, то знайти max (d - а, d -b, d-с). Якщо якесь число
дорівнює d, то вивести на екран цю информацію.
22) Ввести координати чотирьох точок А1 (х1, у1), А2 (x2, у2), А3 (x3, у3), А4
(х4, у4). Визначити, чи будуть вони вершинами паралелограма.
23) На осі ОХ розташовані три точки а, b, с (ввести з клавіатури). Визначити, яка
з точок b або cрозташована ближче до а.
24) Ввести три додатних числа а, b, с. Перевірити, чи будуть вони сторонами
трикутника. Якщо так, то обчислити площу цього трикутника.
25) Дан коло радіуса R (ввести з клавіатури). Визначити, чи поміститься
правильний трикутник зі стороною а в цьому колі.
26) Ввести число х. Надрукувати в порядку зростання числа: sin x, cos x, ln x
Якщо при будь-якому х деякі з виразів не мають сенсу, вивести повідомлення
про це і порівнювати значення тільки тих, які мають сенс.
27) Задані розміри А, В прямокутного отвору і розміри х, у, z цегли (всі значення
вводити з клавіатури). Визначити, чи пройде цеглина через отвір.
28) Скласти програму, яка здійснює перетворення величин з радіанної міри в
градусну і навпаки. Програма повинна запитувати, яке перетворення потрібно
здійснити, і виконати вказану дію. Всі величини вводити з клавіатури.
29) Два прямокутники, розташовані в першому квадраті, зі сторонами,
паралельними осям координат, задано координатами своїх лівого верхнього і
правого нижнього кутів. Для першого прямокутника це точки (x1, y1) і (х2, 0),
для другого - (x3, y3), (х4, 0). Скласти програму, що визначає, чи перетинаються
дані прямокутники, і обчислює площу загальної частини, якщо вона існує. Всі
величини вводити з клавіатури.
52
30) У хмарочосі N поверхів і всього один під'їзд; на кожному поверсі по 3
квартири; ліфт може зупинятися тільки на непарних поверхах. Людина сідає в
ліфт і набирає номер потрібної йому квартири М. На який поверх повинен
доставити ліфт пасажира? Всі величини вводити з клавіатури.
Обчислення конкретної функції, в залежності від введеного значення х
(Третє завдання)
53
54
55
𝑥 2 sin 𝑥
𝜋+cos 𝑥
, если x< -1 ;
26.F(x)= 𝑥 cos 𝑥 + 𝜋, если − 1 ≤ 𝑥 < 0;
𝑥
,
𝜋+sin 𝑥+cos 𝑥
если 𝑥 ≥ 0 .
𝜋 sin 𝑥 , если x < -1.5;
𝑥 sin 𝑥 , если -1.5 ≤ x < 2.5;
27. 𝐹(𝑥) =
𝜋 𝑥 , если x ≥ -2.5.
√|𝑥| , если 𝑥 ≤ 0.5;
28. 𝐹 (𝑥) =
sin 𝜋𝑥, если 0 < 𝑥 ≤ 1;
𝜋 2 𝑥 2, если x > 1.
sin 𝑥 + 𝑥 2 , если 𝑥 < 0;
29. 𝐹(𝑥) = cos 𝑥 + sin 𝑥 , если 0 ≤ 𝑥 ≤ 𝜋⁄2 ;
𝑥 − cos 𝑥, если 𝑥 > 𝜋⁄2.
𝜋𝑥 2 , если x < 1;
30. 𝐹(𝑥) =
sin 𝑥 3 , если 1≤ x ≤ 4;
𝑥
𝑥 sin(𝜋), если x>4.
56
ЛАБОРАТОРНА РОБОТА №2. ПРОГРАМУВАННЯ ЦИКЛІЧНИХ
АЛГОРИТМІВ
Мета роботи:Вивчення засобів реалізації циклічних конструкцій мови
Python і отримання навичок складання програм з використанням операторів
циклу.
Теми для попереднього опрацювання:
 поняття про циклічну структуру в програмі;
 інструкція for;
 функція range;
 інструкція while;
 вихідзциклуbreak іcontinue.
2.1 Теоретичнівідомості
Цикли – це інструкції, які виконують одну й туж послідовність дій, покидіє
задана умова. Типова блок-схема циклу показана на рис. 13.
оператори
false
true
умова
оператори
оператори
Рисунок 13.  Блок-схема циклічного процесу.
За побудовою цикли ділять на цикли типу арифметичної прогресії і
ітерації. Цикл типу арифметичної прогресії має відоме кінцеве число повторень
(for). У циклі типу ітерації число повторень невідомо (while).
Цикл FOR
Цикл for, також називається циклом з параметром, в мові Python багатий
можливостями. У циклі for вказується змінна і множина значень, за яким буде
57
пробігати змінна. Множина значень може бути задана списком, кортежем,
рядком або діапазоном. Формальне визначення циклу for:
for int_var in функція_range:
інструкції
Після ключового слова for йде змінна int_var, яка зберігає цілі числа (назва
змінної може бути будь-якою), потім ключове слово in, виклик функції range() і
двокрапка.А з наступного рядка розташовується блок інструкцій циклу, які
також повинні мати відступи від початку рядка. Ось простий приклад
використання циклу, де в ролі множини значень використовується кортеж:
i=1
for color in 'red','orange','yellow','green','cyan','blue', 'violet':
print('#', i,' color of rainbow is',color,sep = '')
i+=1
У цьому прикладі змінна color послідовно приймає значення 'red', 'orange' і т.д. У
тілі циклу виводиться повідомлення, яке містить назву кольору, тобто значення
змінної color, а також номер ітерації циклу число, яке спочатку дорівнює 1, а
потім збільшується на один (інструкцією i+= 1 з кожним проходом циклу.
Інструкція i + = 1 еквівалентна конструкції i = i + 1 (це просто скорочений запис).
Такий скорочений запис можна використовувати для всіх арифметичних
операцій: * =, - =, / =,% = ...
У списку значень можуть бути вирази різних типів, наприклад:
for i in 1,2,3,'one','two','three':
print(i)
Вихідні дані:
1
2
3
one
two
three
При перших трьох ітераціях циклу змінна i буде приймати значення типу int, при
наступних трьох - типу str.
При виконанні циклу Python послідовно отримує все числа з колекції, яка
створюється функцією range, а також зберігає числа в змінній int_var. При
58
першому проході цикл отримує перше число з колекції, при другому - друге
число і так далі, поки не перебере всі числа. Коли все числа в колекції будуть
перебрані, цикл завершує свою роботу.
Функция RANGE
Як правило, цикли for використовуються або для повторення будь-якої
послідовності дій задану кількість разів, або для зміни значення змінної в циклі
від деякого початкового значення до деякого кінцевого. Для повторення циклу
деяке задане число разів n можна використовувати цикл for разом з функцією
range:
for i in range(4): #рівносильноінструкції for iin 0,1,2,3:
# тут можна виконувати циклічні дії
print(i)
print(i**2)
# цикл закінчився, оскільки закінчився блок з відступом
print('Кінець циклу')
Функція range має такі форми:
 range(stop):повертає всі цілі числа від 0 до stop;
 range(start, stop):повертає всі цілі числа в проміжку від start (включно) до stop (не
включаючи);
 range(start, stop, step):повертає цілі числа в проміжку від start(включно) до stop (не
включаючи), які збільшуються на значення step.
Приклади викликів функції range:
range(5)
# 0,1,2,3,4
range(1,5)
# 1,2,3,4
range(2,10,2)
# 2,4,6,8
range(5,0,-1)
# 5,4,3,2,1
Наприклад, виведемо послідовно всі числа від 0 до 4:
for i in range(5):
print(i, end=" ")
Вкладені цикли
Одні цикли всередині себе можуть містити інші цикли. Розглянемо на
прикладі виведення таблиці множення:
59
for i in range(1,10):
for j in range(1,10):
print(i*j,end="\t")
print("\n")
Зовнішній цикл for i in range (1, 10) спрацьовує 9 разів, так як в колекції,
яка повертається функцією range, 9 чисел. Внутрішній цикл for j in range
(1, 10) спрацьовує 9 разів для однієї ітерації зовнішнього циклу, і відповідно
81 разів для всіх ітерацій зовнішнього циклу. У кожній ітерації внутрішнього
циклу на консоль буде виводитися добуток чисел i та j.
Цикл WHILE
Універсальним організатором циклу в мові програмування Python (як і в
багатьох інших мовах) є конструкція while. Слово "while" з англійської мови
перекладається як "поки" ("поки логічне вираження повертає істину, виконувати
певні операції"). Конструкцію while на мові Python можна описати наступною
схемою:
while умовний_ вираз:
інструкції
Ця схема є приблизною, оскільки логічний вираз в заголовку циклу while може
бути більш складним, а змінюватися може змінна (або вираз).
Коли виконання програмного коду доходить до циклу while, виконується
логічний вираз в заголовку, і, якщо було отримано True (істина), виконуються
вкладені вирази. Після потік виконання програми знову повертається в заголовок
циклу while, і знову перевіряється умова.Якщо умова ніколи не буде хибною, то
не буде причин зупинки циклу і програма зациклиться. Щоб цього не сталося,
необхідно передбачити можливість виходу з циклу - хибність виразу в заголовку.
Таким чином, змінюючи значення змінної в тілі циклу, можна довести логічний
вираз до хибності.Цю змінювану змінну, яка використовується в заголовку циклу
while, зазвичай називають лічильником. Як і будь-якій змінній їй можна давати
довільні імена, однак, дуже часто використовують букви i і j. Найпростіший цикл
на мові програмування Python може виглядати так:
str1 = "+"
60
i=0
while i < 10:
print (str1)
i=i+1
В останньому рядку коду відбувається збільшення значення змінної i на
одиницю, тому з кожним оборотом циклу її значення збільшується. Коли буде
досягнуто число 10, логічний вираз i <10 дасть помилковий результат, виконання
тіла циклу буде припинено, а потік виконання програми перейде на команди, які
йдуть за всією конструкцією циклу.Результатом виконання скрипта, наведеного
вище, є вивід на екран десяти знаків + в стовпчик. Якщо збільшувати лічильник
в тілі циклу не на одиницю, а на 2, то буде виведено лише п'ять знаків, тому що
цикл зробить тільки п'ять оборотів.Всі інструкції, які відносяться до циклу while,
розташовуються на наступних рядках і повинні мати відступ від початку рядка.
choice = "y"
while choice.lower() == "y":
print("Привіт")
choice = input("Для продовження натисніть Y, а для виходу іншу клавішу: ")
print("Робота програми завершена ")
В даному випадку цикл while триватиме, поки змінна choice містить
латинську букву "Y" або "y". Сам блок циклу складається з двох інструкцій.
Спочатку виводиться повідомлення "Привіт", а потім уводиться нове значення
для змінної choice. І якщо користувач натисне якусь іншу клавішу, відмінну від
Y, відбудеться вихід з циклу, так як умова choice.lower ()=="y" поверне значення
False. Кожен такий прохід циклу називається ітерацією.Також зверніть увагу, що
остання інструкція print ("Робота програми завершена") не має відступів від
початку рядка, тому вона не входить в цикл while.Істотна відмінність циклу while
від циклу for:
while використовується тоді, коли заздалегідь невідомо, скільки разів має
повторюватися деяка дія.
Вихід із циклу break і continue
61
Для управління циклом можна використовувати спеціальні оператори
break і continue. Оператор break здійснює вихід з циклу. А оператор continue
виконує перехід до наступної ітерації циклу.
Оператор break може використовуватися, якщо в циклі утворюються
умови, які несумісні з його подальшим виконанням.
Приклад:
#! Програма Обмінний пункт
print("Для виходу натисніть Y")
while True:
data = input("Уведіть суму для обміну: ")
if data.lower()=="y":
break #вихідзциклу
money = int(data)
cache = round(money/26,2)
print("До видачі ", cache, "доларів ")
print("Робота обмінного пункту завершена ")
Тут продемонстровано нескінченний цикл, так як умова while True завжди
істинна і завжди буде виконуватися. Це популярний прийом для створення
програм, які повинні виконуватися невизначено довго.
У самому циклі отримуємо введення з консолі. Передбачається, що
користувач буде вводити число - умовну суму грошей для обміну. Якщо
користувач вводить літеру "Y" або "y", то за допомогою оператора break вихід з
циклу і фінал роботи програми. Інакше ділиться введена сума на обмінний курс,
за допомогою функції round округляється результат і виводиться на консоль. І
так до нескінченності, поки користувач не захоче вийти з програми, натиснувши
на клавішу Y.
Образ роботи програми:
>>>
Для виходу натисніть Y
Уведіть суму для обміну: 20000
До видачі 769.23 доларів
Уведіть суму для обміну: y
62
Робота обмінного пункту завершена
>>>
Але що, якщо користувач введе від`ємне число? У цьому випадку програма
також видасть від`ємний результат, що не є коректною поведінкою. І в цьому
випадку перед обчисленням можна перевірити значення, менше воно нуля, і
якщо менше, за допомогою оператора continue виконати перехід до наступної
ітерації циклу без його завершення:
print ("Для виходу натисніть Y")
while True:
data = input ("Уведіть суму для обміну:")
if data.lower () == "y":
break # вихід з циклу
money = int (data)
if money <0:
print ("Сума повинна бути додатньою!")
continue
cache = round (money / 26, 2)
print ("До видачі", cache, "доларів")
print ("Робота обмінного пункту завершена")
І в цьому випадку не можна отримати результат для від'ємної суми:
>>>
Образ роботи програми:
Для виходу натисніть Y
Уведіть суму для обміну: -20000
Сума повинна бути додатньою!
Уведіть суму для обміну: 10000
До видачі 384.62 доларів
Уведіть суму для обміну: y
Робота обмінного пункту завершена
>>>
Питання для самоперевірки
1. Який обчислювальний процес називається циклічним?
2. Чим відрізняється арифметичний цикл від ітераційного?
3. Скільки операторів циклу існує в мові Python?
63
4. Що називається параметром циклу, тілом циклу?
5. Як працює оператор циклу з передумовою?
6. Як можна вийти з циклу примусово?
7. Які правила пунктуації необхідно дотримувати при записі операторів
циклу?
2.2 Узагальнене формулювання завдання до лабораторної роботи
1) Вивчити принципи побудови програм циклічної структури.
2) Розробити програми з операторами циклу відповідно до варіанта
завдання.
3) Вхідні дані і результат роботи супроводжувати відповідною
інформацією на екрані.
4) Показати розроблену програму викладачеві.
5) Письмово відповісти на Питання для самоперевірки.
6) Оформити звіт відповідно до вимог.
Завдання на виконання лабораторної роботи складається з 2-х частин:
 програма, яка реалізує цикл за допомогою оператора for;
 програма, яка реалізує цикл через ітераційний процес − оператор while.
Варіанти завдань до лабораторної роботи
Організація циклу за допомогою оператора for
(Перше завдання)
n
1)
Обчислити
 ix
i 1
n
2)
i
x
Обчислити i 1
n
3)
i
Обчислити i1
n
4)

Обчислити i 1
n
5)

Обчислити i0
.
2
i
.
 x2
xi
i .
xi
x2 .
.
64
n
6)

Обчислити i1
xi
i2 .
n
7)
Обчислити
 (i  x)
i 1
n
8)
Обчислити
1
x
n
9)
Обчислити
x
Обчислити
.
i
i
i 1
n
10)
i
2
i 1

i 1
.
.
( x  i)
i2
n
11)
 ( x  i)
Обчислити i 1
n
12)
 (i
Обчислити i0
.
 x  i 
Обчислити i 1
n
14)
Обчислити

17)
i 1
x
x
.
n
x
2
i 1
n
2
1
i
Обчислити i1
Обчислити
.
i
n
16)
.
2
x
i 1

Обчислити
2
 x  i
n
15)
.
 x2 )
2
n
13)
2
i
.
x
2
i
18)
Обчислити
19)
𝑥𝑖
Обчислити ∑
𝑥−𝑛
i 1
𝑛
.
𝑖=1
20)
Обчислити ∑𝑛𝑖=1
21)
Обчислити ∑𝑛𝑖=1
22)
Обчислити∑ni=1
23)
Обчислити∑𝑛𝑖=1
24)
Обчислити∑𝑛𝑖=1
25)
Обчислити∑𝑛𝑖=1
(𝑥+2)𝑖
𝑥−1
(2∗𝑥 𝑖 −1)
𝑛−1
(2*x+1)i
x-1
(𝑛∗𝑥−1)𝑖
𝑥−𝑛
(𝑥 𝑖 +𝑛)
𝑥−𝑛
2𝑖
𝑥−𝑛
65
26)
Обчислити∑𝑛𝑖=1
27)
Обчислити∑𝑛𝑖=1
28)
Обчислити∑𝑛𝑖=1
29)
Обчислити∑𝑛𝑖=1
30)
Обчислити∑𝑛𝑖=1
𝑥𝑖
𝑥−1
(𝑥 𝑖 +1)
𝑥−1
(𝑥 𝑖 −2∗𝑛)
𝑥−𝑛
(𝑛𝑖 −2∗𝑥)
𝑥−1
(𝑛𝑖 +𝑥)
𝑛−3
Організація циклу за допомогою оператора while
(Друге завдання)
1) Дано ціле число, що складається з різних цифр. Визначити, яка з цифр
заданого числа більше, тобто знайти найбільшу цифру числа.
2) Із натурального числа видалити задану цифру. Число і цифру уводити з
клавіатури.
3) Знайдіть кількість парних цифр даного натурального числа.
4) Організувати безперервне введення чисел з клавіатури, поки користувач не
введе 0. Після введення нуля, показати на екрані кількість чисел, які були
введені, їх загальну суму і середнє арифметичне.
5) Необхідно підсумувати всі непарні цілі числа в діапазоні, який введе
користувач з клавіатури.
6) Вивести всі квадрати натуральних чисел, які не перевищують числа N.
7) Визначити і вивести на екран і цифри цілого числа n.
8) Скласти програму розкладання натурального числа n на прості множники.
9) Написати програму, в результаті виконання якої з'ясується, чи входить цифра
2 в запис даного цілого числа n.
10) Скласти програму виведення всіх натуральних чисел, менших n, квадрат
суми цифр яких дорівнює заданому числу m.
11) Дано додатні числа A і B (A>B). На відрізку довжиною A розміщено
максимально можлива кількість відрізків довжиною B (без накладання). Не
використовуючи операції множення і ділення, знайти кількість відрізків B,
розміщених на відрізку A.
66
12) Дано цілі додатні числа N і K. Використовуючи тільки операції додавання і
віднімання, знайти частку від ділення без остачі N на K, а також залишок від
цього ділення.
13) Дано ціле число N(>0). Якщо воно є ступенем числа 3, то вивести True, якщо
ні - вивести False.
14) Дано ціле число N(>0), що є деяким ступенем числа 2: N = 2K. Знайти ціле
число K - показник цього ступеня.
15) Дано ціле число N(>0). Знайти подвійний факторіал N: N!!= N•(N-2) •(N-4)•
... (останній співмножник дорівнює 2, якщо N - парне, і 1, якщо N - непарне).
Щоб уникнути цілочисельного переповнення, обчислювати цей добуток за
допомогою дійсної змінної і вивести його як дійсне число.
16) Дано ціле число N(>0). Знайти найменше ціле додатне число K, квадрат якого
перевершує
N:K2>N.
Функцію
добування
квадратного
кореня
не
використовувати.
17) Дано ціле число N(>0). Знайти найбільше ціле число K, квадрат якого не
перевищує
N:
K2≤N.
Функцію
добування
квадратного
кореня
не
використовувати.
18) Дано ціле число N(>1). Знайти найменше ціле число K, при якому
виконується нерівність 3K>N.
19) Дано ціле число N(>1). Знайти найбільше ціле число K, при якому
виконується нерівність 3K<N.
20) Дано ціле число N(>1). Вивести найменше із цілих чисел K, для яких сума
1+2+...+K буде більше або дорівнює N, і саму цю суму.
21) Дано ціле число N(>1). Вивести найбільше із цілих чисел K, для яких сума
1+2+...+K буде менше або дорівнює N, і саму цю суму.
22) Дано число A(>1). Вивести найменше із цілих чисел K, для яких сума
1+1/2+...+1/K буде більше A, і саму цю суму.
23) Дано число A(>1). Вивести найбільше із цілих чисел K, для яких сума 1+1/2
+...+1/K буде менше A, і саму цю суму.
24) Використовуючи алгоритм Евкліда, знайти НСД двох чисел.
67
25) Для чисел, що вводяться визначити відсоток додатнихі негативних чисел.
При уведенні числа − 65432 закінчити роботу.
26) Визначити суму введених додатних чисел. Причому числа з непарними
номерами (по порядку уведення) підсумовувати з протилежним знаком, а числа
з парними номерами перед підсумовуванням зводити в квадрат. Підрахувати
кількість доданків. При уведенні першого негативного числа закінчити роботу.
27) Дано два числа: число P і число H. Визначити суму чисел менше P, добуток
чисел більше H і кількість чисел в діапазоні значень P і H. При уведенні числа
рівного P або H, закінчити роботу.
28) Підсумувати введені числа, серед яких немає нульових. При уведенні нуля
забезпечити виведення поточного значення суми. При уведенні числа 99999
закінчити роботу.
29) Вводяться додатні числа. Визначити суму чисел, що діляться на додатне
число B без остачі. При введенні негативного числа закінчити роботу.
30) Послідовно увести числа. Визначити суму чисел з непарними номерами (по
порядку уведення). Підрахувати кількість доданків і кількість співмножників.
При уведенні числа 55555 закінчити роботу.
68
ЛАБОРАТОРНА РОБОТА №3. РЯДКИ
Мета роботи: Вивчення типу даних String, функцій і модулів, які
використовуються для обробки даних цього типу.
Теми для попереднього опрацювання:
 строковий тип;
 зрізи (slicing);
 операції з рядками;
 форматування;
 вбудовані методи для роботи з рядками.
3.1 Теоретичні відомості
Рядок представляє послідовність символів в кодуванні Unicode. До
окремих символів рядка можна звернутися за індексом в квадратних дужках:
string = "hello world"
c0 = string[0] # h
print(c0)
c6 = string[6] # w
print(c6)
c11 = string[11] # помилка IndexError: string index out of range
print(c11)
Індексація починається з нуля, тому перший символ рядка буде мати індекс
0. А якщо спробувати звернутися до індексу, якого немає в рядку, то виникає
помилка − виключення IndexError. Наприклад, в випадку вище довжина рядка 11
символів, тому її символи матимуть індекси від 0 до 10.
Щоб отримати доступ до символів, починаючи з кінця рядка, можна
використовувати від'ємні індекси. Так, індекс -1 представлятиме останній
символ, а -2 - передостанній символ і так далі.
При роботі з рядками треба враховувати те, що в Python, на відміну від
інших мов програмування, рядки незмінні, тобто змінити символи в рядку в
принципі не можна. Тому є тільки такий вихід:
69
 сформувати новий змінений рядок або
 замінити певні символи або слова (в залежності від завдання) при
виведенні їх на екран і.
Сформувати новий рядок також можна двома способами (як мінімум):
 перетворити вихідний в список, виконати в ньому заміну, а потім
елементи списку з'єднати в новий рядок;
 використовувати механізм зрізів, без використання нового рядка.
Спроба простим привласненням змінити символ в певній позиції або підрядок
викличе помилку. Але можна зробити так:
word ='strength'
word =word[:3]+'!'+ word[4:]
'str!ngth' результат заміни символа
або так:
word = word.replace('!','e')
'strength'  результат заміни символа
Отримання підрядка
При необхідності можна отримати з рядка не тільки окремі символи, а й
підрядок. Для цього використовується наступний синтаксис:
string [: end]: вилучається послідовність символів, починаючи з 0-го
індексу по індекс end
string [start: end]: вилучається послідовність символів, починаючи з індексу
start по індекс end
string [start: end: step]: вилучається послідовність символів, починаючи з
індексу start по індекс end через крок step
Всі варіанти отримання підрядка:
string = "hello world"
# з 0 до 5 символа
sub_string1 = string[:5]
print(sub_string1)
# hello
# з 2 до 5 символа
sub_string2 = string[2:5]
print(sub_string2)
# llo
70
# з 2 по 9 символ через один символ
sub_string3 = string[2:9:2]
print(sub_string3)
# lowr
Функції ord і len
Оскільки рядок містить символи Unicode, то за допомогою функції ord ()
можна отримати числове значення для символа в кодуванні Unicode:
print(ord("A"))
# 65
Для отримання довжини рядка можна використовувати функцію len ():
string = "hello world"
length = len(string)
print(length) # 11
Пошук у рядку
За допомогою виразу term in string можна знайти підрядок term у рядку
string. Якщо підрядок знайдений, то вираз поверне значення True, інакше
повертається значення False:
string = "hello world"
exist = "hello" in string
print(exist) # True
exist = "sword" in string
print(exist) # False
Перебір рядка
За допомогою циклу for можна перебрати всі символи рядка:
string = "hello world"
for char in string:
print(char)
Базові операції з рядками
# Конкатенація (додавання)
>>>s1='spam'
>>>s2='eggs'
>>>print(s1+s2)
'spameggs'
# Дублювання рядка
>>>print('spam'*3)
71
Spamspamspam
# Довжина рядка
>>>len('spam')
4
# Доступ за індексом
>>>S='spam'
>>>S[0]
's'
>>>S[2]
'a'
>>>S[-2]
'a'
# Зріз
>>>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'
Повний перелік функцій і методів роботи з рядками представлений у
Додатку 5. Більш докладно з принципами роботи з рядками можна ознайомитися
72
із [2] стор. 56-69. Що стосується форматування рядків, то рекомендується
подивитися матеріал за посиланням https://metanit.com/python/tutorial/5.3.php.
Питання для самоперевірки
1. Що представляє строковий тип?
2. Як можна звернутися до символів рядка (з початку рядка і з кінця)?
3. Як можна отримати підрядок?
4. Як можна дізнатися довжину рядка і яка максимально можлива довжина
рядка?
5. Як можна дізнатися числовий код символа?
6. Які базові оперции з рядками?
7. Що таке зріз стосовно рядку?
3.2 Узагальнене формулювання завдання до лабораторної роботи
1) Вивчити тип даних String., зрізи, операції з рядками.
2) Розробити програму відповідно до варіанта завдання.
3) Вхідні дані і результат роботи супроводжувати відповідною
інформацією на екрані.
4) Показати розроблену програму викладачеві.
5) Письмово відповісти на Питання для самоперевірки.
6) Оформити звіт відповідно до вимог.
Варіанти завдань до лабораторної роботи
Кількість слів у рядку і максимальний розмір кожного зі слів вибираються
студентом. Рекомендується працювати з латинськими символами.
1) Поміняти місцями слова з максимальною і мінімальною довжиною при
виконанні умови, що такі слова єдині.
2) Замінити закінчення (останні два символи) на 'xz' у словах, довжина яких
дорівнює 5.
3) Поміняти місцями слово, що починається на 'a', зі словом, що закінчується на
'z', за умови, що такі слова існують і є єдиними.
4) Видалити останні 3 символа зі слів, що починаються на 'a'.
5) Видалити перші 3 символи зі слів, що закінчуються на 'th'.
73
6) Доповнити символом '*' слова, що мають довжину менше заданої
(максимальної) до максимальної.
7) Замінити перші 3 символи слів, що мають обрану довжину, на символ '*'.
8) Видалити всі символи 'а' зі слів, довжина яких дорівнює обраної.
9) Замінити всі символи 'a' на 'd' у словах, довжина яких менше обраної.
10) Замінити перші малі літери на великі у кожному слові, довжина якого більше
обраної.
11) Вставити пробіл після перших 2-х символів в слова, що мають довжину, на 1
менше заданої.
12) Замінити першу малу літеру на заголовну в словах, що мають обрану
довжину.
13) Вставити пробіл перед останніми 2-мя символами в слова, що мають
мінімальну (задану) довжину.
14) Порахувати кількість голосних букв в рядку і замінити їх на '*'.
15) Упорядкувати символи в рядку за алфавітом.
16) Вивести всі слова, у яких перша і остання літери однакові
17) Упорядкувати рядок по спадаючій довжин слів.
18) Перевірити у математичному вираженні, заданому рядком, відповідність
відкриваючих і закриваючих дужок.
19) Вивести всі слова в рядку в зворотному порядку.
20) Видалити подвійні пробіли і перемістити всі знайдені в тексті цифри в кінець
рядка.
21) Дано два рядки S1 і S2. Створити рядок, що складається з латинських букв,
які не належать будь-якої рядку S1 і S2.
22) Дано два рядки S1 і S2. Створити рядок, що складається з символів, що
входять або в S1, або в S2, але не в обидві відразу.
23) З рядка видалити всі цифри і малі латинські букви.
24) Складіть програму, у результаті виконання якої у першому заданому рядку
подвоюється кожен символ, що належить також другому рядку.
74
25) Скласти програму, у результаті виконання якої зі першого заданого рядка
видаляється кожен символ, що належить другому рядку.
26) У цьому рядку подвоїти все цифри і малі латинські букви.
27) Дано два рядки. Створити рядок, що складається тільки зі символів,
загальних для двох даних рядків.
28) Визначити, чи задовольняє рядок наступній властивості: рядок
містить (крім букв) тільки одну цифру, причому її числове значення дорівнює
довжині рядка.
29) Дана послідовність символів s1, s2, ..., sn. Підрахуйте, скільки разів серед
даних символів зустрічаються символи + та *.
30) Дана послідовність символів s1, s2, ..., sn. Визначте число входжень груп букв
abc.
75
ЛАБОРАТОРНА РОБОТА №4. ВИКОРИСТАННЯ ФУНКЦІЙ
Мета роботи:Вивчення написання і застосування функцій на мові Python
Теми для попереднього опрацювання:
 призначення і правила створення функцій
 аргументи і змінні
 типи аргументів при виклику функцій
 розміщення локальних і глобальних змінних
 повернення з функції (який може бути результат роботи
4.1 Теоретичні відомості
Функції - це багаторазово використовувані фрагменти програми, які
забезпечують кращу модульність програми та значно підвищують рівень
повторного використання коду (див. [2] стр.118-130).
Функції дозволяють надати ім'я визначеному блоку команд з тим, щоб
згодом запускати цей блок за вказаним ім'ям в будь-якому місці програми. Це
називається викликом функції.
Існують правила для створення функцій в Python.
 Блок функції починається з ключового слова def, після якого записано
назву функції і круглі дужки.
 Будь аргументи, які приймає функція, повинні бути розміщені всередині
цих дужок.
 Після дужок йде двокрапка і з нового рядка з відступом починається тіло
функції (блок команд, які складають функцію).
На прикладі можна побачити простоту застосування функції.
Приклад: (зберегти, як function1.py)
def sayHello ():
print ('Привіт, студенти!') # блок, що належить функції
# Кінець функції
sayHello () # виклик функції
76
sayHello () # ще один виклик функції
висновок:
$ Python function1.py
Привіт, студенти!
Привіт, студенти!
Як це працює:
Визначити функцію з ім'ям sayHello, використовуючи описаний вище
синтаксис. Ця функція не приймає параметрів, тому в дужках не оголошені будьякі змінні. Параметри функції - це якісь вхідні дані, які можна передати функції,
щоб отримати відповідний їм результат.
Видно, що можна викликати одну й ту ж функцію багато разів, а значить,
немає необхідності писати один і той же код знову і знову.
Параметри функцій
Функції можуть приймати параметри, тобто деякі значення, що
передаються функції для того, щоб вона щось зробила з ними. Ці параметри
схожі на змінні, за винятком того, що значення цих змінних вказується при
виклику функції, і під час роботи функції їм уже присвоєні їх значення.
Параметри вказуються в дужках при оголошенні функції і розділяються
комами. Аналогічно передаються значення, коли викликається функція. Слід
звернути увагу на термінологію: імена, зазначені в оголошенні функції,
називаються параметрами, тоді як значення, які передаються в функцію при її
виклику, - аргументами.
Приклад: (зберегти, як func_param.py)
def printMax(a, b):
if a>b:
print(a,'максимально')
elif a==b:
print(a,'дорівнює ',b)
else:
print(b,'максимально')
printMax(3,4) # пряма передача значень
x=5
y=7
77
printMax(x,y) # передача змінних в якості аргументів
Вивід:
$ python func_param.py
4 максимально
7 максимально
Як це працює:
Тут визначена функція з ім'ямprintMax, яка використовує два параметри з
іменами a і b. Знаходиться найбільше число із застосуванням простого оператора
if..else і виводиться це число.
При першому виклику функції printMax безпосередньо передаються числа
в якості аргументів. У другому випадку викликається функція зі змінними в
якості аргументів. printMax (x, y) призначає значення аргументу x параметру a, а
значення аргументу y - параметру b. В обох випадках функція printMax працює
однаково.
Аргументи функції в Python
Викликаючи функцію, можна передавати їй такі типи аргументів:
 Обов'язкові аргументи (Required arguments)
 Аргументи за замовчуванням (Default argument)
 Аргументи-ключові слова (Keyword argument)
 Аргументи довільної довжини (Variable-length argumens)
Обов'язкові аргументи функції
Якщо при створенні функції ми вказали кількість переданих їй аргументів і їх
порядок, то і викликати її ми повинні з тією ж кількістю аргументів, заданих в
потрібному порядку.
Приклад:
def bigger(a,b):
if a>b:
print a
else:
print b
# В описі функції зазначено, що вона приймає 2 аргументи
# Коректне використання функції
bigger(5,6)
# Некоректне використання функції
78
bigger()
bigger(3)
bigger(12,7,3)
Аргументи за замовчуванням
Найчастіше частина параметрів функцій можуть бути необов'язковими, і для них
будуть використовуватися деякі задані значення за замовчуванням, якщо
користувач не вкаже власних. Цього можна досягти за допомогою значень
аргументів за замовчуванням. Їх можна вказати, додавши до імені параметра у
визначенні функції оператор присвоювання (=) з подальшим значенням.
Значення за замовчуванням має бути константою. Або точніше кажучи,
воно має бути незмінним.
Приклад: (зберегти, як func_default.py)
def say(message,times = 1):
print(message *times)
say('Привіт')
say('Мир', 5)
Вивід:
$ python func_default.py
Привіт
МирМирМирМирМир
Як це працює:
Функція під ім'ям say використовується для виведення на екран рядку
вказане число раз. Якщо не вказується значення, за замовчанням рядок
виводиться один раз. Це досягається вказанням значення аргументу за
замовчуванням, рівного 1 для параметра times.
При першому виклику say вказується тільки рядок, і функція виводить його
один раз. При другому виклику say вказується також і аргумент 5, позначаючи
таким чином, що фраза сказана 5 разів.
Важливо:
Значеннями за замовчанням можуть бути наділені тільки ті параметри, що
знаходяться в кінці списку параметрів. Таким чином, в списку параметрів
функції параметр із значенням за замовчанням не може передувати параметру
без значення за замовчанням. Це пов'язано з тим, що значення присвоюються
79
параметрам відповідно до їх положення. Наприклад, def func(a,b=5) допустимо,
а def func(a=5,b) - не допустимо.
Аргументи-ключові слова
Якщо є деяка функція з великим числом параметрів, і при її виклику
потрібно вказати тільки деякі з них, значення цих параметрів можуть задаватися
по їх імені - це називається ключові параметри. В цьому випадку для передачі
аргументів функції використовується ім'я (ключ) замість позиції (як було досі).
Є дві переваги такого підходу: по-перше, використання функції стає легше,
оскільки немає необхідності відстежувати порядок аргументів; по-друге, можна
задавати значення тільки деяким обраним аргументів, за умови, що інші
параметри мають значення аргументу за замовчуванням.
Приклад: (зберегти, як func_key.py)
def func(a, b=5, c=10):
print('a дорівнює', a, ', b дорівнює', b, ', а c дорівнює', c)
func(3, 7)
func(25, c=24)
func(c=50, a=100)
Вивід:
$ python func_key.py
a дорівнює3, b дорівнює7, а c дорівнює10
a дорівнює25, b дорівнює5, а c дорівнює24
a дорівнює100, b дорівнює5, а c дорівнює50
Як це працює:
Функція з ім'ям func має один параметр без значення за замовчуванням, за
яким слідують два параметра із значеннями за замовчуванням.
При першому виклику func(3,7) параметр a отримує значення 3, параметр
b отримує значення 7, а c отримує своє значення за замовчуванням, яке дорівнює
10.
При другому виклику func (25,c=24) змінна a отримує значення 25 в через
позицію аргументу. Після цього параметр c отримує значення 24 по імені, тобто
як ключовий параметр. Змінна b отримує значення за замовчуванням, яке
дорівнює 5.
80
При
третьому
зверненні
func(c=50,a=100)
ключові
аргументи
використовуються для всіх вказаних значень. Звертається увага на те, що
значення для параметра c указується перед значенням для a, навіть, незважаючи
на те, що у визначенні функції параметр a вказано раніше c.
Аргументи довільної довжини
Іноді буває потрібно визначити функцію, здатну приймати будь-яке число
параметрів. Цього можна досягти за допомогою зірочок (зберегти як
function_varargs.py):
def total(a=5, *numbers, **phonebook):
print('a', a)
# Прохід по всіх елементах кортежу
for single_item in numbers:
print('single_item', single_item)
# прохідповсіхелементахсловника
for first_part, second_part in phonebook.items():
print(first_part,second_part)
print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))
Вивід:
$ python function_varargs.py
a 10
single_item 1
single_item 2
single_item 3
Inge 1560
John 2231
Jack 1123
None
Як це працює:
81
Коли оголошується параметр із зірочкою (наприклад, *param), всі
позиційні аргументи, починаючи з цієї позиції і до кінця, будуть зібрані в кортеж
під ім'ям param.
Аналогічно, коли оголошуються параметри зі двома зірочками (** param),
всі ключові аргументи, починаючи з цієї позиції і до кінця, будуть зібрані в
словник під ім'ям param.
Тільки ключові параметри
Якщо деякі ключові параметри повинні бути доступні тільки по ключу, а
не як позиційні аргументи, їх можна оголосити після параметра із зірочкою
(збережіть як (keyword_only.py)):
def total(initial=5,*numbers,extra_number):
count=initial
for number in numbers:
count+=number
count+=extra_number
print(count)
total(10,1,2,3,extra_number=50)
total(10,1,2,3)
# викличе помилку, оскільки ми не вказали значення
# аргументу за замовчуванням для 'extra_number'.
Вивід:
$ python keyword_only.py
66
Traceback (most recent call last):
File "keyword_only.py",line 12,in <module>
total(10,1,2,3)
TypeError: total() needs keyword-only argument extra_number
Як це працює:
Оголошення параметрів після параметра із зірочкою дає тільки ключові
аргументи. Якщо для таких аргументів не вказано значення за замовчуванням, і
воно не передано при виклику, звернення до функції викличе помилку, що
показано в прикладі.
82
Використання +=, який представляє собою скорочений оператор, дозволяє
замість x=x+y просто написати x+=y.
Якщо потрібні аргументи, що передаються тільки по ключу, але не
потрібен параметр із зірочкою, то можна просто вказати одну зірочку без
вказівки імені: def total (initial = 5, *, extra_number).
Область видимості змінних
Деякі змінні скрипта можуть бути недоступні деяким областям програми.
Все залежить від того, де оголошені ці змінні.
В Python дві базових області видимості змінних:
 Локальні змінні
 Глобальні змінні
локальні змінні
При оголошенні змінних всередині визначення функції, вони жодним
чином не пов'язані з іншими змінними з таким же ім'ям за межами функції - тобто
імена змінних є локальними в функції. Це називається областю видимості
змінної. Область видимості всіх змінних обмежена блоком, в якому вони
оголошені, починаючи з точки оголошення імені.
Приклад: (зберегти як func_local.py)
x=50
def func(x):
print('x дорівнює ', x)
x=2
print('Заміна локального x на ', x)
func(x)
print('x як і раніше ', x)
Вивід:
$ pythonfunc_local.py
x дорівнює 50
Заміна локального x на 2
x як і раніше 50
83
Як це працює:
При першому виведенні значення, присвоєного імені x, в першому рядку
функції Python використовує значення параметра, оголошеного в основному
блоці, вище визначення функції.
Далі x призначається значення 2. Ім'я x локально для даної функції. Тому
коли замінюється значення x в функції, x, оголошений в основному блоці,
залишається незмінним.
Останнім викликом функції print виводиться значення x, вказане в
основному блоці, підтверджуючи таким чином, що воно не змінилося при
локальному присвоєнні значення в раніше викликаної функції.
Зарезервоване слово "global"
Щоб надати деяке значення змінної, визначеної на вищому рівні програми
(тобто не в якій-небудь області видимості, як-то функції або класи), необхідно
вказати Python, що її ім'я не локально, а глобально (global). Робиться це за
допомогою зарезервованого слова global. Без застосування зарезервованого
слова global неможливо привласнити значення змінної, визначеної за межами
функції.
Можна використовувати вже існуючі значення змінних, визначених за
межами функції (за умови, що всередині функції не було оголошено змінної з
таким же ім'ям). Однак, це не вітається, і його слід уникати, оскільки людині, що
читає текст програми, буде незрозуміло, де знаходиться оголошення змінної.
Використання зарезервованого слова global досить ясно показує, що змінна
оголошена в самому зовнішньому блоці.
Приклад: (зберегти, як func_global.py)
x = 50
def func():
global x
print('x дорівнює',x)
x=2
print('Замінюємо глобальне значення x на', x)
func()
84
print('Значення x становить', x)
Вивід:
$ pythonfunc_global.py
xдорівнює 50
Замінюємо глобальне значення x на 2
Значення x становить 2
Як це працює:
Зарезервоване слово global використовується для того, щоб оголосити, що
x - це глобальна змінна, а значить, коли присвоюється значення імені x всередині
функції, це зміна відіб'ється на значенні змінної x в основному блоці програми.
Використовуючи одне зарезервоване слово global, можна оголосити
відразу кілька змінних: global x,y,z.
Зарезервоване слово "nonlocal"
Раніше розглянуто отримання доступу до змінних в локальній і глобальній
області видимості. Є ще один тип області видимості, званий "нелокальної"
(nonlocal) областю видимості, який є чимось середнім між першими двома.
Нелокальні області видимості зустрічаються, коли визначається функція
всередині функцій.
Оскільки в Python все є виконуваним кодом, функції можна визначати де
завгодно.
Приклад:
# Filename: func_nonlocal.py
def func_outer():
x=2
print('x дорівнює', x)
def func_inner():
nonlocal x
x=5
func_inner()
print('Локальне x змінилося на', x)
func_outer()
Вивід:
85
$ pythonfunc_nonlocal.py
x дорівнює 2
'Локальне x змінилося на' 5
Як це працює:
Усередині func_inner, змінна x, визначена в першому рядку func_outer
розташована ні в локальній області видимості (визначення змінної не входить в
блок func_inner), ні в глобальному контексті (вона також і не в основному блоці
програми). Оголошується використання саме цієї змінної x наступним чином:
nonlocal x.
Оператор return
Оператор return використовується для повернення з функції, тобто для
припинення її роботи і виходу з неї. При цьому можна також повернути деяке
значення з функції.
Приклад: (зберегти, як func_return.py)
#!/usr/bin/python
# Filename: func_return.py
def maximum(x,y):
if x>y:
return x
elif x==y:
return 'Числарівні.'
else:
return y
print(maximum(2,3))
Вивід:
$ python func_return.py
3
Як це працює:
Функція maximum повертає максимальний з двох параметрів, які в даному
випадку передаються їй при виклику. Вона використовує звичайний умовний
оператор if..else для визначення найбільшого числа, а потім повертає це число.
Оператор return без вказівки значення, що повертається, еквівалентний
висловуreturn None. None - це спеціальний тип даних в Python, що позначає
86
“нічого”. Наприклад, якщо значення змінної встановлено в None, це означає, що
їй не присвоєно ніякого значення.
Кожна функція містить в неявній формі оператор return None в кінці, якщо
не вказано свій власний оператор return. У цьому можна переконатися,
запустивши print(someFunction()), де функція someFunction - це якась функція,
яка не має оператора return в явному вигляді. наприклад:
def someFunction():
pass
Оператор pass використовується в Python для позначення порожнього
блоку команд.
Порада:
Існує вбудована функція max, в якій вже реалізований функціонал "пошук
максимуму", так що рекомендується користуватися цією вбудованою функцією,
де це можливо.
lambda-функції
lambda-функція - це безіменна функція з довільним числом аргументів і
обчислює один вислів. Тіло такої функції не може містити більше однієї
інструкції (або виразу). Дану функцію можна використовувати в рамках будьяких конвеєрних обчислень (наприклад, всередині filter (), map () і reduce ()) або
самостійно, в тих місцях, де потрібно провести якісь обчислення, які зручно
"загорнути" в функцію.
>>> (lambda x: x**2)(5)
25
lambda-функцію
можна
присвоїти
будь-якій
змінній
і
надалі
використовувати її в якості імені функції.
>>>sqrt=lambda x: x**0.5
>>>sqrt(25)
5.0
Наступний фрагмент коду показує різницю між звичайним визначенням
функції f і lambda-функції g:
87
>>> def f (x): return x**2
...
>>> print f(8)
64
>>>
>>> g = lambda x: x**2
>>>
>>> print g(8)
64
Як видно,f() і g() роблять одне і теж і можуть використовуватися в одних і
тих же місцях. Визначення lambda-функції не включає оператор return - ця
конструкція завжди містить вираз, результат якого повертається. Визначення
lambda-функції може використовуватися скрізь, де очікується функція і немає
потреби присвоювати значення змінній.
Узагальнюючи, можна констатувати, що lambda-функція - це функція, яка
має довільне число аргументів (включаючи необов'язкові аргументи) і повертає
значення одного виразу. lambda-функції не можуть містити інструкцій або
більше одного виразу. Не треба включати в lambda-функцію занадто багато.
Якщо необхідно щось більш складне - визначити звичайну функцію.
Використання lambda-функцій - справа стилю. Скрізь, де можна
використовувати lambda-функцію, можна визначити і використовувати звичайну
функцію. Доцільно використовувати в місцях, де потрібно інкапсулювати
характерний код, який не підлягає повторному використанню, без засмічення
програми безліччю маленьких однорядкових функцій.
Основну частину можливостей Python, які демонструє lambda-функція
можна побачити в зворотних викликах Tkinter. Tkinter - це включений в Python
набір інструментів, для створення графічних інтерфейсів.
Розглянуто досить багато аспектів функцій, але, тим не менше, треба
розуміти, що це далеко не всі їхні аспекти. У той же час, представлено більшість
того, з чим можна зіткнутися при повсякденному використанні функцій в Python.
Питання для самоперевірки
1. Що являє собою об'єкт функція.
88
2. Які правила створення функції.
3. Різниця між аргументами і змінними в функції.
4. Що таке обов'язкові аргументи.
5. Що таке аргументи за умовчанням.
6. Що таке аргументи-ключові слова.
7. Що таке аргументи довільної довжини.
8. Області видимості змінних.
9. Як працює оператор return.
10. Для чого використовується оператор pass.
11. Що являє собою lambda-функція. Яке її застосування.
4.2 Узагальнене формулювання завдання до лабораторної роботи
1) Вивчити принципи створення функцій мови Python.
2) Розробити програми з визначенням і викликом функцій, які призначені
для користувача, відповідно до варіанта завдання. Функції повинні працювати з
параметрами.
У звіті обов'язково повинно бути описано, які типи аргументів
передаються при виклику функції.
3) Вхідні дані і результат роботи супроводжувати відповідною
інформацією на екрані.
4) Показати розроблену програму викладачеві.
5) Письмово відповісти на Питання для самоперевірки.
6) Оформити звіт відповідно до вимог.
Завдання на виконання лабораторної роботи складається з 2-х частин:
 функції на обчислення і логіку;
 функції для роботи з рядками.
Варіанти завдань до лабораторної роботи
Функції на обчислення і логіку
(Перше завдання)
89
1) Ввести два дроби: A/B і C/D. (А, В, C, D - натуральні числа). Написати
функцію для складання цих дробів. Результат має бути нескоротним дробом.
Вхідні параметри: A, B, C, D. Вихідні параметри: нескоротний дріб.
2) Ввести координати вершин двох трикутників((x1, y1)(x2, y2)(x3, y3)).
Визначити, який з них має більшу площу. Написати функцію, яка обчислює
площу трикутника. Вихідні параметри: S - площа трикутника.
3) Ввести число Х. Вивести на екран в порядку зростання результат обчислення
наступних математичних функцій : sinx, cosx, lnx. Написати функцію, яка,
залежно від вхідних параметрів, виконує обчислення. Вихідні параметри:
результат обчисленої функції.
4) Написати функцію, яка б по введеному номеру пори року в якості параметра
(1 - зима, 2 - весна, 3 - літо, 4 - осінь) повертала місяці, кількість днів в кожному
з місяців, що відповідають цій порі року.
5) Ввести координати точки А (х, у). Написати функцію, яка визначає, чи
належить вона трикутнику з вершинами в точках (x1, y1)(x2, y2)(x3, y3). Усі
значення передавати у функцію. Результат у вигляді булевої змінної.
6) Ввести два дійсних додатних числа Х і У. Арифметичні дії над числами
пронумеровані (1 - додавання, 2 - віднімання, 3 - множення, 4 - ділення).
Написати функцію, яка по введеному номеру виконує ту чи іншу дію над
числами. Числа, операції передаються в якості параметрів. Результат операції
повертається.
7) Ввести дійсні числа х1, у1, х2, у2, ..., х10, у10. Знайти периметр десятикутника,
вершини якого мають відповідно координати (х1, у1), (х2, у2), ..., (х10, у10).
Написати функцію обчислення відстані між двома точками, заданими своїми
координатами, які передаються при виклику функції.
8) Ввести відрізки a, b, c і d. Для кожної трійки цих відрізків, з яких можна
побудувати
трикутник,
надрукувати
площу
даного
трикутника.
Написатифункцію, яка обчислює площу трикутника зі сторонами x, y і z, якщо
такий трикутник існує.
90
9) Мішень для стрільби являє собою концентричні кільця з центром на початку
координат. радіус внутрішнього кільця ("десятки") - 1см. Ширина всіх інших
кілець - по 1см. Написати функцію, яка за координатами трьох точок попадання
(х1, у1), (х2, у2) і (х3, у3) обчислює суму вибитих очок.
Зауваження. Серед аналізованих пострілів можуть виявитися і попадання в
"молоко" (за межі мішені), що не приносять очок.
10) Ввести оцінки спортсмена 8-ма суддями. Написати функцію підрахунку
середньої оцінки спортсмена за показаннями 8 суддів. При підрахунку середньої
оцінки необхідно відкинути найбільшу і найменшу оцінки.
11) На площині задано кільце з центром в точці (х0, у0), внутрішнім радіусом r1
і зовнішнім r2. Скласти функцію, яка для заданого масиву точок ХY обчислює
кількість точок, що належать кільцю. Точки, розташовані на межі кільця,
вважати належним кільцю.
12) Скласти функцію, яка повертає ціле число з діапазону [1 ... 6], що відповідає
номеру ситуації при взаємному розташуванні двох кіл. Кола О1 і О2 задаються
своїми центрами (х1, у1), (х2, у2) і радіусами r1 і r2.
Ситуація 1. Кола знаходяться досить далеко одне від одного.
Ситуація 2. Кола перетинаються, але, по щонайменше, центр одного з них не
належить іншому.
Ситуація 3. Коло О2 цілком знаходиться всередині кола О1, але їх центри не
співпадають.
Ситуація 4. Коло О1 цілком знаходиться всередині кола О2, але їх центри не
співпадають.
Ситуація 5. Кола концентричні, і О2 має менший радіус.
Ситуація 6. Кола концентричні, і О1 має менший радіус.
13) Задати коло радіуса r з центром в точці (x0, y0) і досліджувану точку з
координатами (x, y). Написати функцію, що визначає, який чверті кола, належить
досліджувана точка. Номери чвертей окружності повторюють номера квадрантів
в декартовій системі координат (N = 1,2,3 або 4). Якщо точка знаходиться поза
91
колом, то покласти N = 0. Граничними ефектами (попадання в центр, на контур
кола, на горизонтальний або вертикальний діаметри) - знехтувати.
14) Написати функцію Ro(n1,n2), яка обчислює відстань між двійковими кодами,
відповідними машинному представленню цілочисельних аргументів n1 і
n2.Відстанню між двома двійковими кодами називається кількість незбіжних
двійкових розрядів. Наприклад:
0101101
0010101
======
= *** = = = (відстань = 3)
15) Два прямокутники задати парами чисел (a1, b1) і (a2, b2), що визначають
довжини їх сторін. Написати функцію, яка з'ясовує, чи можна один з
прямокутників цілком помістити в іншому. Передбачається таке розташування
прямокутників, при якому зберігається паралельність сторін.
16) Ввести два дробу: A/B і C/D. (А, В, С, D- натуральні числа). Написати
функцію множення дробу на дріб. Результат повинен бути нескоротним дробом.
Вхідні параметри: A, B, C, D. Вихідні параметри: нескоротний дріб.
17) Ввести координати вершин трикутника ((x1, y1), (x2, y2), (x3, y3)) і
координати деякої точки всередині нього (х, у). Написати функцію, яка
знаходить відстань від даної точки до найближчої сторони трикутника. (При
визначенні відстаней врахувати, що площа трикутника обчислюється і через три
його сторони, і через основу і висоту.)
18) Написати програму обчислення виразу: U =
𝑚𝑎𝑥 2 (𝑥,𝑦,𝑧)−2𝑥 ∗𝑚𝑖𝑛(𝑥,𝑦,𝑧)
sin 2+max(𝑥,𝑦,𝑧)/𝑚𝑖𝑛(𝑥,𝑦,𝑧)
за
заданими з клавіатури числами x, y, z. Знаходження максимального і
мінімального значення з 3-х чисел оформити у вигляді функцій maxim(x,y,z) і
minim(x,y,z). (Для цього варіанту вбудовані функції max і min не застосовувати).
19) Для двох квадратних рівнянь a1x2 + b1x + c1 = 0 і a2x2 + b2x + c2 = 0 визначити,
чи мають вони спільні корені. Вивести на екран коріння рівняння, які не
збігаються. Рішення рівняння оформити у вигляді функцій. Коефіцієнти a1, b1, c1,
a2, b2, c2 вводяться з клавіатури.
92
20) Ввести натуральне число n. Серед чисел 1, 2, ..., n знайти всі ті, які можна
представити у вигляді суми квадратів натуральних чисел. Написати функцію, що
дозволяє розпізнавати повні квадрати.
21) Один з алгоритмів перевірки числа на "простоту" полягає в тому, вихідне
число N послідовно ділять на 2,3,5,7,9, ...,2*p+1 (n≤(2*p+1)2≤n+1). Якщо жоден
із залишків від ділення не дорівнює нулю, то n - просте. Написати логічну
функцію, аргументом якої є довге ціле додатнечисло. Функція повинна
повертати значення true, якщо її аргумент є простим числом.
22) Скласти функцію, що визначає максимальне число підряд розташованих
одиниць в двійковому представленні числа n. Число n є вхідним параметром для
функції.
23) На площині виділена полоса, яка утворена двома паралельними прямими
A*x+B*y+C1=0і A*x+B*y+C2=0. Написати логічну функцію, приймаючу
значення true, якщо точка з координатами (x0, y0) належить вказаній полосі.
24) Скласти програму, яка вводить k натуральних чисел n1,n2,...,nk (k <10) і
сортує їх, розташовуючи "пірамідкою" (найбільше число - в середині, найменші
- по краях). У припущенні, що ni<80 організувати виведення відсортованих
чисел, представляючи кожне з них відповідною кількістю зірочок в i - тому
рядку.
n1 = 3 ***
n2 = 7 *******
25) Скласти програму, яка вводить два значення x і q типу float і str, відповідно.
Перше (x) розглядається як значення температури, а друге є ознакою системи
вимірювання:
q='C' - для шкали Цельсія;
q='F' - для шкали Фаренгейта;
q='K' - для шкали Кельвіна.
Написати функцію, яка повинна видати значення температури в кожній з трьох
систем
вимірювань.
формулами:
Зв'язок
між
системами
визначається
наступними
93
F = (9/5)* C + 32
K = 273 + C
26) Ввести довжини сторін прямокутника. Написати функцію, яка обчислює кут
(в градусах) між його діагоналями.
27) З початку доби минуло H годин, M хвилин, S секунд (0≤H<12,0≤M<60,0≤S
<60). Написати функцію, яка за даними числами H, M, S повинна визначити кут
(в градусах), на який повернулаcь годинникова стрілка з початку доби і вивести
його у вигляді дійсного числа. При вирішенні цього завдання не можна
користуватися умовними інструкціями і циклами.
28) Є дві ємності: кубічна з ребром А, циліндрична з висотою H і радіусом
основи R. Написати функцію з вхідними параметрами А, H, R, M, яка визначить,
чи поміститься рідина об'єму M в першу ємність, в другу, в обидві .
29) Написати функцію, яка переводить число з десяткової системи числення в
двійкову або вісімкову.
30) Написати функцію, яка підраховє кількість парних і непарних цифр в числі,
переданому в якості параметра.
Функції для роботи з рядками
(Друге завдання)
Якщо є аналог заданої фунции в методах по роботі з рядками або у вбудованих
функціях, їх не застосовувати, а писати свою. Функція повинна реалізовувати
поставлену задачу - і нічого більше. Це означає, що функцію можна буде,
наприклад, перенести без змін в будь-яку іншу програму, якщо специфікації
функції задовольняють умовам задачі.
Примітка: під "словом" всюди розуміється послідовність символів, яка не
містить пробілів.
1) Функція - Copies(s,s1,n). Призначення - копіювання рядка s в рядок s1 n раз.
2) Функція - Words(s). Призначення - підрахунок слів в рядку s.
3) Функція - Concat(s1,s2). Призначення - конкатенація рядків s1 і s2.
4) Функція - Parse(s,t). Призначення - поділ рядка s на дві частини: до першого
входження символу t і після нього.
94
5) Функція - StrCenter(s1,s2,l). Призначення - центрування - розміщення рядка s1
в середині рядка s2 довжиною l.
6) Функція - Delete(s,n,l). Призначення - видалення з рядка s підрядка,
починаючи з позиції n, довжиною l.
7) Функція - Left(s,l). Призначення - вирівнювання рядка s по лівому краю до
довжини l.
8) Функція - Right(s,l). Призначення - вирівнювання рядка s по правому краю до
довжини l.
9) Функція - Insert(s,s1,n). Призначення - вставка в рядок s підрядка s1,
починаючи з позиції n.
10) Функція - Reverse(s). Призначення - зміна порядку символів в рядку s на
протилежний.
11) Функція - Pos(s,s1). Призначення - пошук першого входження підрядка s1 у
рядок s.
12) Функція - LastPos(s,s1). Призначення - пошук останнього входження
підрядка s1 у рядок s.
13) Функція - WordIndex(s,n). Призначення - визначення позиції початку в рядку
s слова з номером n.
14) Функція - WordLength(s,n). Призначення - визначення довжини слова з
номером n в рядку s.
15) Функція - SubWord(s,n,l). Призначення - виділення з рядка s l слів,
починаючи зі слова з номером n.
16) Функція - WordCmp(s1,s2). Призначення - порівняння рядків (з ігноруванням
множинних пробілів).
17) Функція - StrSpn(s,s1). Призначення - визначення довжини тієї частини рядка
s, яка містить тільки символи з рядка s1.
18) Функція - StrCSpn(s,s1). Призначення - визначення довжини тієї частини
рядка s, яка не містить символи з рядка s1.
19) Функція - Overlay(s,s1,n). Призначення - перекриття частини рядка s,
починаючи з позиції n, рядком s1.
95
20) Функція - SymbReplace(s,s1,s2). Призначення - заміна в рядку s комбінації
символів s1 на s2.
21) Функція - Compress(s,t). Призначення - заміна в рядку s множинних входжень
символу t на одне.
22) Функція - Trim(s). Призначення - видалення початкових і кінцевих пробілів
в рядку s.
23) Функція - StrSet(s,n,l,t). Призначення - установка l символів рядка s,
починаючи з позиції n, в значення t.
24) Функція - Space(s,l). Призначення - доведення рядка s до довжини l шляхом
вставки пробілів між словами.
25) Функція - Findwords(s,s1). Призначення - пошук входження в рядок s заданої
фрази (послідовності слів) s1.
26) Функція - StrType(s). Призначення - визначення типу рядка s (можливі типи
- рядок букв, десяткове число, 16-ковий число, двійкове число і т.д.).
27) Функція - Compul(s1,s2). Призначення - порівняння рядків s1 і та s2 з
ігноруванням відмінностей в регістрах.
28) Функція - Translate(s,s1,s2). Призначення - переклад в рядку s символів, які
входять в алфавіт s1, в символи, які входять в алфавіт s2.
29) Функція - Word(s). Призначення - виділення першого слова з рядка s.
30) Функція - Substr(s,n,l). Призначення - виділення з рядка s підрядка,
починаючи з позиції n, довжиною l.
96
ЛАБОРАТОРНА РОБОТА №5. СТРУКТУРИ ДАНИХ: СПИСКИ,
КОРТЕЖИ, МНОЖИНИ
Мета роботи:Вивчення структур даних (list, tuple, set), створюваних
користувачем.
Теми для попереднього опрацювання:
 що таке список, кортеж, множина;
 операції зі списками;
 перетворення списку в інші типи даних.
5.1 Теоретичні відомості
Послідовності (списки, кортежі, множини) створюються на основі базових
типів даних, вивчених раніше. Послідовність представляється у вигляді об'єктів,
проіндексованих за допомогою їх позиції, висловленої цілим числом: перший,
другий і далі до останнього.
Списки
Списки - найбільш багатофункціональний тип даних, який записується як
список елементів, розділених комами, і укладених в квадратні дужки. Список є
одним з найбільш використовуваних типів даних в мові Python. Кожне окреме
значення списку називається «елемент списку». Елементи списку при зберіганні
списку в пам'яті мають унікальні порядкові номери - «індекси» (нумерація
безперервна і починається з 0). Список дуже схожий на масив, який реалізований в
процедурних мовах програмування.Різниця полягає в тому, що елементами списку
можуть бути об'єкти різних типів. Розмір списку не статичний, його можна
змінювати. Список за своєю природою є змінним типом даних на відміну,
наприклад, від рядків. Змінна, яка визначається як список, містить посилання на
структуру в пам'яті, яка в свою чергу зберігає посилання на будь-які інші об'єкти
або структури. При створенні списку в пам'яті резервується область, яку можна
97
умовно назвати деяким "контейнером", в якому зберігаються посилання на інші
елементи даних в пам'яті. На відміну від таких типів даних, як число або рядок,
вміст "контейнера" списку можна змінювати.
Створення, зміна, видалення списків і робота з його елементами. Базові
операції.
Список можна створити за допомогою оператора [] або методу list.
Список можна створити з нуля або більше елементів:
>>> empty_list = []
>>> weekdays = ['Monday', 'Tuesday','Wednesday']
>>> weekdays
['Monday', 'Tuesday', 'Wednesday']
>>>
або
>>> another_empty_list = list()
>>>another_empty_list
[]
>>>
Створившипорожнійсписок,
можназаповнитийогозадопомогоюметодуappend,
якийдодаєелементвкінецьсписку.
Крім того, мова Python надає можливість швидкого створення списків
цілих значень, без необхідності їх перераховувати:
>>>range (1,5)
[1,2,3,4]
В даному прикладі функція range() приймає два цілих аргумента і повертає
список, який містить всі цілі числа в проміжку між заданими значеннями,
включаючи перше і виключаючи друге.
Існує ще два способи виклику функції range(). Якщо їй передано тільки
одне значення, то в результаті вона поверне список з цілими значеннями від 0 до
N, де N - значення параметра:
>>>range (10)
[0,1,2,3,4,5,6,7,8,9]
98
Якщо ж range() викликана з трьома аргументами, то останній з них
інтерпретується як розмір кроку, тобто в результуючому списку значення
йтимуть через проміжки, рівні кроку:
>>>range (1,10,2)
[1,3,5,7,9]
І ще один спосіб створити список - це генератори списків. Генератор
списків - спосіб побудувати новий список, застосовуючи вираз до кожного
елементу послідовності. Генератори списків дуже схожі на цикл for. Загальний
вигляд генератора наступний:
[Вираз for змінна in послідовність],
де змінна - ідентифікатор деякої змінної, послідовність - послідовність
значень, які приймає дана змінна (це може бути список, рядок або об'єкт,
отриманий за допомогою функції range), вираз - деякий вираз, як правило,
залежить від використаної в генераторі змінної, яким будуть заповнені елементи
списку.
Приклади використання генераторів
>>> c=['l','i','s','t']
>>> c=[c*3 for c in 'list']
>>> c
['lll','iii','sss','ttt']
Можлива і більш складна конструкція генератора списків:
>>> =[c*3 for c in 'list' if c!='i']
>>> c
['lll','sss','ttt']
>>> c=[c+d for c in 'list' if c!='i' for d in 'spam' if d!= 'a']
>>> c
['ls','lp','lm','ss','sp','sm','ts','tp','tm']
При створенні списку в змінної зберігається посилання на об'єкт, а не сам
об'єкт. Це обов'язково слід враховувати при груповому присвоюванні. Групове
присвоювання можна використовувати для чисел і рядків, але для списків цього
робити не можна. При зміні однієї змінної в одному списку змінюватиметься
змінна і в іншому списку, так як обидві змінні посилаються на один об'єкт.
99
Синтаксис звернення до елементів списку точно такий же, як і при
зверненні до символів рядків - використовуємо оператор індексування ([]).
numbers[0]
numbers[-1]
Індексом може бути будь-який вираз, що повертає ціле число, зокрема
негативне. Якщо індекс менше нуля, то відлік індексу буде розпочато з кінця
списку.
Список, який є елементом іншого списку, називають вкладеним і
розглядається, як один елемент списку.
Довжина списку обчислюється за допомогою функції len(). Одне з
застосувань цієї функції - визначення довжини списку в циклах, які здійснюють
перебір елементів списку.
mylist = ['one','two','three','four','five']
i=0
while i < len(mylist):
print(mylist[i])
i+=1
Приклад для вкладеного списку:
>>> mylist=[[1,'one'],[2,'two'],[3,'three'],'four',5]
>>>print(len(mylist))
>>> 5
Обробкасписківдозволяєзастосовуватитакідії, як "слайсинг" або "зріз". Для
списку можна отримати зріз, об'єднати кілька списків і так далі:
>>> a=['trees','grass',123,1234]
>>> a[0]
'trees'
>>> a[3]
1234
>>> a[-2]
123
>>> a[:2]+['forest',5*5]
['trees','grass','forest',25]
>>> 3*a[:3]+['green']
100
['trees','grass',123,'trees','grass',123,'trees','grass',
123,'green']
Ще цікавий приклад, який здійснює доступ до потрібного елементу списку.
Це нагадує непряму адресацію в процедурних мовах.Необхідно вивести на екран,
наприклад, число 6.
индех0индех1индех2
>>> mylist = [1, 2, [18, 45, 87, [7, 6]]]
индех3 во 2-ом индех1 в 3
>>> print(mylist[2][3][1])
6
>>>
Нижче наведені додаткові операції, що дозволяють додавати, видаляти і
замінювати елементи списку (x− довільний об'єкт, s і t− послідовності
однакового типу):
s[i]=x− замінює елемент послідовності, на який вказує індекс i на x.
dels[i]− видаляє елемент послідовності, на який вказує індекс i.
s[[i]:[j]]=t− замінює зріз послідовності від i до j на t(видаляє з
послідовності елементи, що входять до зрізу, і вставляє елементи з t).
del s[[i]:[j]]− видаляє з послідовності елементи, що входять до зрізу.
Еквівалентно: s[i:j]=[].
Ще до базових операцій належать операції конкатенації (додавання) і
дублювання списку.
+ - операція конкатенації (додавання списків);
* - операція дублювання списку n раз.
Створення копії списку
Раніше стверджувалося, що значення змінної зберігається в якомусь місці
пам'яті комп'ютера і викликається в програму по імені цієї змінної. Це означає,
що змінна «пов'язана» або «посилається» на відповідне місце в пам'яті. Точно так
же зі значенням в пам'яті пов'язано і назву списку (і інших об'єктів Python).
Якщо спробувати отримати список b шляхом привласнення йому значень
всіх елементів списку а:a=[...]
b=a
101
то дві змінні a і b будуть пов'язані з одним і тим же списком, тому при зміні
одного списку буде змінюватися і другий (адже це фактично один і той же
список, до якого можна звертатися за двома різними іменами). Цю особливість
Python потрібно враховувати при роботі зі списками.
Якщо в програмі потрібна саме копія списку (а не ще одне посилання на
нього), можна використовувати зріз списку, який формує його повну копію:
b=a[0:len(a)]
В результаті a і b будуть незалежними списками, і зміна одного з них не
змінить другого.
Вбудовані функції для роботи зі списками
Функція max повертає елементи зі списку list з максимальним значенням.
max(list)
У наступному прикладі показано використання функції max ().
>>>list1,list2 =['123''xyz','zara','abc'],[456,700,200]
>>>print("Max value element : ",max(list1))
Max value element : zara
>>>print("Max value element : ",max(list2))
Max value element : 700
Функціяmin()повертаєелементизіспискуlistзмінімальнимзначенням.
min(list)
У наступному прикладі показано використання методу min().
>>>list1,list2 =['123','xyz','zara','abc'],[456,700,200]
>>>print ("min value element : ",min(list1))
min value element : 123
>>>print ("min value element :",min(list2))
min value element :200
Вбудованіметодидляроботизісписками
1. lst.append(x)
Додавання елементу х у кінець списку. Еквівалентно:s[len(s):len(s)]=[x]
Приклад:
>>> lst=['sss','fff','kkk',1,2]
>>> lst.append(100)
102
>>> print(lst)
['sss','fff','kkk',1,2,100]
>>>
2. lst.extend(t)
Додавання кортежу або списку t у кінець списку. Схоже на об'єднання списків,
але створення нового списку не відбувається. Еквівалентно:
s[len(s):len(s)]=[x]
Приклад:
>>> lst1=[1,2,3]
>>> lst2=['one','two']
>>> lst1.extend(lst2)
>>> print(lst1)
[1,2,3,'one','two']
>>>
3. lst.count(x)
Повертає число входжень елементу х у список.
Приклад:
>>> lst=['sss','fff','kkk',1,2,'sss','sss','ddd','sss']
>>> print (lst.count('sss'))
4
>>>
4. lst.index(x)
Визначення першої зліва позиції елементу x у списку lst. Якщо такого елементу
немає, з'являється повідомлення про помилку.
Приклад:
>>> lst=['fff','kkk', 'sss',1,2,'sss','ddd','sss']
>>> print(lst.index('sss'))
2
>>>
5. lst.insert(i,х)
Вставка у послідовність елементу х перед i-м елементом. Еквівалентно: s[i:
i]=[x], якщо i≥0. Якщо значення індексу менше 0, то вставляється у початок
списку, а якщо більше довжини послідовності, то - у кінець списку.
103
Приклад:
>>> aList=[123,'xyz','zara','abc']
>>> aList.insert( 3,2017)
>>> print("Final List :",aList)
Final List :[123,'xyz','zara',2017,'abc']
>>>
6. lst.pop( [i])
Повертаєi-й елемент послідовності, одночасно видаляючи його зі списку.
Якщо індекс не вказано, мається на увазі останній елемент списку. Положення
елементу можна відраховувати з кінця, вказуючи негативний індекс. Якщо
індекс виходить за межі діапазону, генерується виключення IndexError.
Приклад:
>>>aList=[123,'xyz','zara','abc']
>>> print("A List :",aList.pop())
A List : abc
>>> print("B List :",aList.pop(2))
B List :zara
>>> print(aList)
[123,'xyz']
>>>
7. lst.remove(x)
Видаляє зі списку перший елемент зі значенням х. Еквівалентно: dellst
[lst.index(x)].Якщо такого у списку немає, то генерується виключення
ValueError.
Приклад:
>>> aList=[123,'xyz','zara','abc','xyz']
>>> aList.remove('xyz')
>>> print("List : ",aList)
List : [123,'zara','abc','xyz']
>>> aList.remove('abc')
>>> print("List : ",aList)
List : [123,'zara','xyz']
>>>
104
8. lst.reverse()
Розташовує елементи послідовності у зворотному порядку. Новий список не
створюється.
Приклад:
>>>aList=[123,'xyz','zara','abc','xyz']
>>> aList.reverse()
>>> print("List :",aList)
List : ['xyz','abc','zara','xyz',123]
>>>
9. lst.sort()
Розташовує елементи послідовності у порядку зростання. Новий список не
створюється.
Приклад:
>>>aList =['123','xyz','zara','abc','xyz']
>>> aList.sort()
>>> print("List :",aList)
List : ['123','abc','xyz','xyz','zara']
>>>
10.lst.clear()−очищує список.
Функції вищого порядку для обробки послідовностей
Функцію, яка приймає іншу функцію як аргумент або повертає іншу функцію,
називають функцією вищого порядку або "first-class-functions".
Функціїmар(),zip(),filter(),reduce(),lambda()дозволяють
досить
просто
виконувати різні маніпуляції з даними, для чого у "звичайному" процедурному
стилі доводиться писати трохи більше коду. Все нижче написане відноситься до,
так званого, функціонального програмування.
Вбудована функція map() дозволяє застосувати функцію до кожного
елементу послідовності. Функція має наступний формат:
mар (<функція>, <послідовність 1> [..., <послідовність n>])
Функція map() повертає об'єкт, що підтримує ітерації. Щоб отримати
список, необхідно результат передати в функцію list(). Як параметр <функція>
вказується посилання на функцію (назва функції без круглих дужок), якій буде
105
передаватися поточний елемент послідовності. Усередині функції зворотного
виклику необхідно повернути нове значення.
Приклад:
# Додати до кожного елементу списку число 10
>>> def func (elem) :
return elem+10
>>> arr=(1,2,3,4,5)
>>> print(list( map(func, arr) ) )
[11,12,13,14,15]
>>>
Функціїmap() можна передати кілька послідовностей. В цьому випадку в
функцію зворотного виклику будуть передаватися відразу кілька елементів,
розташованих в послідовності на однаковому зміщенні.
Приклад:
# Підсумувати елементи 3-х різних списків
>>> def func(el,е2,еЗ):
return el+е2+еЗ # повертає нове значення
>>> arrl=[1,2,3,4,5]
>>> arr2=[10,20,30,40,50]
>>> arr3=[100,200,300,400,500]
>>> print(list(map(func,arrl,arr2,arr3) ) )
[111,222,333,444,555] # результат виконання
>>>
Якщо кількість елементів в послідовності буде різною, то вибирається
послідовність з мінімальною кількістю елементів.
Функція zip на кожній ітерації повертає кортеж, що містить елементи
послідовностей, які розташовані на однаковому зміщенні. Щоб отримати список,
необхідно результат передати в функцію list().
Приклад:
>>> a=[1,2]
>>> b=[3,4]
>>> c=[5,6]
print (list(zip(a,b,c)))
106
[(1,3,5),(2,4,6)]
>>>
Приклад:
>>> arr1=[1,2,3,4,5]
>>> arr2=[10,20,30,40,50]
>>> arr3=[100,200,300,400,500]
>>> arr=[x+y+z for (x,y,z) in zip(arr1,arr2,arr3)]
>>> print(arr)
[111,222,333,444,555]
>>>
В якості ще одного прикладу переробимо програму підсумовування
елементів трьох списків і використаємо функцію zip() замість функції map().
Приклад:
>>> arr1=[1,2,3,4,5]
>>> arr2=[10,20,30,40,50]
>>> arr3=[100,200,300,400,500]
>>> arr=[x+y+z for(x,y,z) in zip(arr1,arr2,arr3)]
>>> print(arr)
[111,222,333,444,555]
>>>
Функція
filter()
дозволяє фільтрувати значення
послідовності. В
результуючому списку тільки ті значення, для яких значення функції для
елемента істинно. Формат функції:
filter (<функція><послідовність>)
Приклад:
# видалити всі від`ємні значення зі списку
>>> arr=[-1,2,-3, 4,0,-20,10]
>>> arr=list(filter(func, arr))
>>> print(arr)
[2,4,0,10]
# результат
>>>
# використання генераторів списків
>>> arr=[-1,2,-3,4,0,-20,10]
>>> arr=[ i for i in arr if func(i) ]
107
>>> print(arr)
[2,4,0,10]
>>>
Функція reduce із модуля functools бере два перших елемента, застосовує
до них функцію, бере значення і третій елемент, і таким чином згортає об'єкт,
який підтримує ітерації, до єдиного значення. Формат функції:
Reduce (<функція>,<послідовність>[,<початкове значення>])
Приклад:
>>>fromfunctoolsimportreduce
>>> func=lambda el_prev,el:el_prev+el
>>> reduce(func,[1,2,3 4])
10
# (((1+2)+3)+4)
Але рекомендується використовувати звичайний прохід по елементам за
допомогою for для підвищення читання коду.
Кортежі
Кортеж - це незмінний список. Кортеж не може бути змінений ніяким
способом після його створення. Іншими словами, можна отримати елемент за
індексом, але змінити його не можна.
Приклади:
>>>a_tuple=("a","b","z","example") # створюємо кортеж
>>>a_tuple
('a','b','z','example')
>>>a_tuple[0] # отримуємо елемент за індексом
'a'
>>>a_tuple[-1] # отримати останній елемент'example'
>>> a_tuple[1:3] #отримуємозріз
('b','example')
Спільностіівідмінностіміжкортежамиісписками
1. Кортеж визначається так само, як список, за винятком того, що набір елементів
укладається в круглі дужки, а не в квадратні.
108
2. Елементи кортежу задані в певному порядку, як і в списку. Елементи кортежу
індексуються з нуля, як і елементи списку, таким чином, перший елемент не
порожнього кортежу - це завжди a_tuple[0].
3. Від`ємні значення індексу відраховуються від кінця кортежу, як і в списку.
Останній елемент має індекс -1.
4. Створення зрізу кортежу («slicing») аналогічно створенню зрізу списку. Коли
створюється зріз списку, виходить новий список; коли створюється зріз кортежу,
виходить новий кортеж.
5. Основна відмінність між кортежами і списками полягає в тому, що кортежі не
можуть бути змінені. На практиці це означає, що у них немає методів, які б
дозволили їх змінити. Усписківєтакіметоди, якappend(), extend(), insert (),
remove(),pop(). У кортежів жодного із цих методів немає.
Основні операції з кортежами
1.len(t)
Визначається кількість елементів кортежу (результатом є число t)
2. t1+t2
Об'єднання кортежів. Виходить новий кортеж, в якому після елементів кортежу
t1 знаходяться елементи кортежу t2.
3. t*n или n*t
n-кратне повторення кортежу.
4. min(t)
Визначається елемент з найменшим значенням відповідно до алфавітного
(«словникового») порядку.
5. max(t)
Визначається елемент з найбільшим значенням відповідно до алфавітного
(«словникового») порядку.
Важливо розуміти, що «словниковий» порядок - спочатку числа по зростанню,
потім рядки, що починаються на цифри в порядку їх зростання, потім рядки, що
починаються на великі літери в алфавітному порядку, а потім рядки, що
109
починаються на малі літери також в алфавітному порядку, − завжди
використовується в обчислювальній техніці при сортуванні імен об'єктів.
Так де ж можуть стати в нагоді кортежі?
1. Кортежі в деяких випадках швидши, ніж списки. Але такі оптимізації в
кожному конкретному випадку вимагають додаткових досліджень.
2. Кортежі роблять код безпечніше в тому випадку, якщо у вас є «захищені від
запису» дані, які не повинні змінюватися.
3. Деякі кортежі можуть використовуватися в якості елементів множини і ключів
словника (конкретно, кортежі, що містять незмінні значення, наприклад, рядки,
числа та інші кортежі). Списки ніколи не можуть використовуватися в якості
ключів словника, тому що списки - змінювані об'єкти.
Кортежі можуть бути перетворені в списки і навпаки. Вбудована функція
tuple() приймає список і повертає кортеж із усіх його елементів, функція list ()
приймає кортеж і повертає список. По суті справи, tuple() заморожує список, а
list() розморожує кортеж.
Приклад:
s=’spring’
t=tuple(s)
t → (‘s’,’p’,’r’,’i’,’n’,’g’)
Множини
Множина в мові Python - це структура даних, еквівалентна множинам в
математиці. Множина може складатися з різних елементів. Цей тип даних є
неврегульованим, як наслідок неіндексованим, змінним і ітеративним. Також
множина не зберігає в собі два однакових елемента:
>>> set([1,1,1,2,2,2,3,3,3,4])
{1,2,3,4}
>>>
У множину можна додавати і видаляти елементи, можна перебирати
елементи множини, можна виконувати операції над множинами (об'єднання,
перетин, різниця). Можна перевіряти приналежність елементу множини.
110
У множину можна перетворювати списки, кортежі і рядки, а множини, в свою
чергу, можна перетворювати в списки і кортежі. Оскільки множини −
ітеріративні, їх можна передавати безпосередньо в цикл for:
>>> a=set([1,2,3])
>>> for i in a:
print(i)
1
2
3
>>>
Елементами множини може бути будь-який незмінний тип даних: числа,
рядки, кортежі. Змінні типи даних не можуть бути елементами множини,
зокрема, не можна зробити елементом множини список (але можна зробити
кортеж) або іншу множину. Вимога незмінності елементів множини визначена
особливостями подання множини в пам'яті комп'ютера.
Множина задається перерахуванням всіх його елементів в фігурних дужках.
Наприклад:A={1,2,3}
Винятком є порожня множина, яку можна створити за допомогою функції set ().
Якщо функції set передати в якості параметра список, рядок або кортеж, то вона
поверне множина, складену із елементів списку, рядки, кортежу. наприклад:
A=set('qwerty')
print(A)
{'e','q','r','t','w','y'}.
Кожен елемент може входити у множину тільки один раз, порядок проходження
елементів не важливий. Наприклад, програма:
A ={1,2,3}
B ={3,2,1}
print(A == B)
виведе True, так як A і B - рівні множини.
Кожен елемент може входити в множину тільки один раз. set('Hello') поверне
множину із чотирьох елементів: {'H','e','l','o'}.
Робота з елементами множин
Дізнатися число елементів у множині можна за допомогою функції len.
111
Перебрати всі елементи множини (в невизначеному порядку!) можна за
допомогою циклу for:
C ={1,2,3,4,5}
for elem in C:
print(elem)
Перевірити, чи належить елемент множини, можна за допомогою операції
in, що повертає значення типу bool:
i in A
Аналогічно є протилежна операція not in.
Щоб додати елемент в множину є метод add:
A.add(x)
Для видалення елемента x із множини є два методи: discard і remove. Їх
поведінка відрізняється лише в разі, коли видаляється елемент відсутній у
множині. У цьому випадку метод discard не робить нічого, а метод remove
генерує виняток KeyError.
Нарешті, метод pop видаляє із множини один випадковий елемент і повертає
його значення. Якщо ж множина порожня, то генерується виключення KeyError.
З множини можна зробити список за допомогою функції list.
Перебір елементів множини
За допомогою циклуforможна перебрати всі елементи множини:
Primes={2,3,5,7,11}
for num im Primes:
print(num)
Операції з множинами
З множинами в Python можна виконувати звичайні для математики операції
над множинами.
A|B
Повертає множину, що є об'єднанням множин A і B.
A.union(B)
A |= B
Додає у множину A все елементи із множини B.
A.update(B)
A&B
Повертає множину, що є перетином множин A і B.
112
A.intersection(B)
A &= B
A.intersection_update(B)
A-B
A.difference(B)
A -= B
Залишає у множині A тількі ті елементи, які є у
множині B.
Повертає різницю множин A і B (елементи, що входять
до A, але не входять до B).
Видаляє із множини A все елементи, що входять до B.
A.difference_update(B)
Повертає симметрическую різницю множин A і B
A^B
A.symmetric_difference(B)
A ^= B
Записує до A симетричну різницю множин A і B.
A.symmetric_difference_update(B)
A <= B
Повертає true, якщо A − підмножина B.
A.issubset(B)
A >= B
Повертає true, якщо B − підмножина A.
A.issuperset(B)
A<B
Еквивалентно A <= B and A != B
A>B
Еквивалентно A >= B and A != B
Питання для самоперевірки
1. Що таке список, кортеж, множина.
2. Перерахуйте відмінності списку від кортежу.
3. Наведіть приклади створення списку, кортежу, множини.
4. Перерахуйте методи зміни списку.
5. Перерахуйте функції вищого порядку для роботи з послідовностями.
6. Що повертає функція zip.
7. Як кортеж перетворити у список.
8. Скільки разів елемент може входити до множини.
9. Чи може список бути елементом множини.
113
10. Як можна із множини зробити список.
11. Чи можна у Python виконувати звичайні для математики операції над
множинами.
5.2 Узагальнене формулювання завдання до лабораторної роботи
1) Вивчити принципи створення списків і множин у мові Python.
2) Розробити програми відповідно до варіанта завдання.
3) Вхідні дані і результат роботи супроводжувати відповідною
інформацією на екрані.
4) Показати розроблену програму викладачеві.
5) Письмово відповісти на Питання для самоперевірки.
6) Оформити звіт відповідно до вимог.
Завдання на виконання лабораторної роботи складається з 2-х частин:
 робота зі списками;
 робота з множинами.
Варіанти завдань до лабораторної роботи
Завдання на списки
(Перше завдання)
1) Створити змінну seasons, у яку занести список пор року. Необхідно:
 створити скрипт, який друкує номер елемента у списку і вміст елемента;
 створити скрипт, який запитує номер і друкує елементи з початку і до
елемента з цим номером;
 передбачити перевірку відповідності номера кількості елементів - у разі,
якщо номер перевищує число елементів у списку передбачити друк
повідомлення про помилку і завершення скрипта.
Порада: для того, щоб скрипт друкував номер елемента і вміст елемента,
необхідно скористатися вбудованою функцією enumerate.
2) Створити 2 списка, елементами яких є числа. Необхідно:
114
 створити новий список, елементами якого будуть всі можливі комбінації
(попарно) чисел, що становлять ці списки (елемент зі списку 1, елемент зі списку
2 і т.д.);
 вивести на екран результуючий список.
Порада:
із
модуля
itertools,
який
представляє
збірник
ітераторів,
використовувати функцію product.
3) Ввести список чисел одним рядком. Необхідно:
 для кожного елемента цього списку вивести суму двох його сусідів. Для
елементів списку, які є крайніми, одним із сусідів вважається елемент, що
знаходиться на протилежному кінці цього списку.
 якщо на вхід прийшло тільки одне число, треба вивести його ж.
 вивід повинен містити один рядок з числами нового списку, розділеними
пробілом.
4) Створити два списки, однакових за кількістю слів. Необхідно:
 порівняти слова на однакових позиціях і видалити більше;
 якщо слова однакові по довжині, видалити обидва;
 вивести на екран обидва модифікованих списку.
5) Написати генератор списку, який генерує список від 1 до 25 і кожне непарне
число підносить до квадрату. Необхідно:
 вивести на екран отриманий список;
 впорядкувати отриманий список, поставивши спочатку всі непарні
числа;
 вивести на екран.
6) Знайти перетин двох списків з повторюваними елементами. Необхідно:
створити два списки цілих чисел;
 упорядкувати їх по зростанню;
 знайти загальні елементи, включаючи повтори (оформити як функцію);
 зберегти у третьому списку і вивести на екран.
Порада: не використовувати множини, тому що не будуть враховані повтори.
115
7) Перетворити однорівневий список у список із вкладеними списками, згідно з
визначеними умовами. Необхідно:
 створити список, у якому елементи можуть чергуватися з роздільниками.
Тип роздільника вибирається самостійно. Це може бути що завгодно, навіть
якесь слово;
 написати функцію, яка буде формувати новий список, елементами якого
будуть вкладені списки, що складаються зі значень, що знаходяться між
роздільниками;
 результат вивести на екран.
8) Перетворити список, у якому елементи представляють групи символів, у
список з поодинокими символами, вибраними з цих груп. Необхідно:
 виконати це завдання 4-ма варіантами, визначити час виконання кожним
і знайти самий швидкодіючий;
 1-ий варіант: працювати з оператором for (це найпростіший варіант);
 2-ий варіант: застосувати функціональне програмування, а саме, функції
reduce, map, lambda (один рядок);
 3-ий варіант: застосувати функцію sum (один рядок);
 4-ий варіант: застосувати функцію join (один рядок).
9) Визначити індекси елементів списку, значення яких належать заданому
діапазону (тобто не менше заданого мінімуму і не більше заданого максимуму).
Необхідно:
 заповнити список випадковими числами;
 запросити для введення мінімум і максимум діапазону;
 знайти індекси елементів, значення яких входять в діапазон. Додавати
знайдені індекси до нового списку;
 вивести загальне число знайдених індексів і окремо всі індекси;
 елементи списку, які знаходяться за певним індексом, видалити зі списку
і занести у новий список.
10) Створити список з не менше 20 цілих чисел. Необхідно:
 підсумувати елементи списку;
116
 з отриманого числа зробити список;
 продовжувати такі обчислення над отриманими списком цифр, поки не
залишиться одна цифра;
 всі проміжні результати демонструвати на екрані.
11) Створити список, елементами якого будуть слова. Необхідно:
 підрахувати, скільки разів кожен символ зустрічається у списку;
 створити новий список, елементами якого будуть вкладені списки, що
складаються з двох елементів: символ і кількість його повторень у вихідному
списку. Наприклад, ['s', 10];
 упорядкувати новий список або по символу або по числу;
 типом даних dict у цьому завданні не користуватися.
12) Задати деяке число n. Створити список з цілих чисел, число елементів якого
не перевищує n. Необхідно:
 сформувати новий список з відсутніх чисел. Наприклад, n=10, список (1, 2, 3, 6, 7), тоді результат (4, 5, 8, 9);
 з'єднати два списки і впорядкувати.
13) Створити два списки: список ключів ('a', 'b', 'c', 'd' ...) і список значень (4, 3, 6,
20 ...). Кількість елементів у обох списках однакова. Необхідно:
 створити новий список, елементами якого будуть вкладені списки, що
складаються з двох елементів: (ключ і значення);
 порахувати середнє арифметичне з усіх значень;
 типом даних dict у цьому завданні не користуватися.
14) Створити 2 списка. Необхідно:
 другий список скласти з тих же елементів, що і перший, але, однозначно,
більше його;
 елементи у першому списку не дублюються;
 у другому списку можливі дублікати;
 написати функцію, яка заповнить третій список позиціями символів
другого списку у першому. Наприклад, перший список - ['a', 'b', 'c'] і другий - ['a',
'b', 'a', 'c', 'b']. Отриманий третій список - [0, 1, 0, 2, 1].
117
15) Створити три списки (W, X, Y). Необхідно:
 Знайти у списку W елементи, наявні у списку X і замінити їх
відповідними елементами списку Y, інші елементи залишити без зміни.
Наприклад, вихідні спискі: список X: ['a', 'b'], список Y: [1, 2], список W: [['a', 'b'],
'a', ['c '[' a ', [' a ',' d ']]]]. Після перетворення список W повинен прийняти такий
вигляд: W: [[1, 2], 1, ['c' [1, [1, 'd']]]].
16) Визначити індекси елементів списку, значення яких належать заданому
діапазону (тобто не менше заданого мінімуму і не більше заданого максимуму).
Необхідно:
 заповнити список випадковими числами;
 запросити для введення мінімум і максимум діапазону і число, з яким
треба порівнювати числа з діапазону;
 знайти індекси елементів, значення яких входять в діапазон. Додавати
знайдені індекси до нового списку;
 вивести загальне число знайдених індексів і окремо всі індекси;
 елементи списку, які знаходяться згідно з певними індексами, порівняти
з введенним числом. Ті числа, які більше введеного, організувати у список.
17) Створити список з символьними елементами одно-дво-і трирівневими
вкладеннями. Необхідно:
 перетворити у однорівневий список;
 впорядкувати список за алфавітом.
18) Створити список із не менше 20 елементів. Визначити яку-небудь ознаку для
пошуку слова. Необхідно:
 замінити всі елементи спискузнайдені, згідно з ознакою, на символ '*'.
 виконати циклічний зсув списку вправо на задане число елементів (без
використання методу insert() і циклічного зсуву елементів.
19) Створити список з n слів. Необхідно:
 вибрати зі списку випадкове слово;
 з обраного випадкового слова випадково вибрати букву;
118
 попросити користувача її вгадати (вивести на екран слово зі знаком
питання замість букви);
 відновити слово.
Порада: використовувати метод choice() модуля random.
20) Створити список дійсних чисел. Необхідно:
 замінити всі парні (за номером) елементи списку, на довільну константу.
 отримати суму чисел, що є сусідами з константою.
 занести їх в новий список.
21) Створити список елементами якого є цілі числа. Обов'язково має бути кілька
нулів. Необхідно:
 поміняти місцями елементи в списку: перший з останнім, другий з
передостаннім і т.д.
 всі нулі замінити на суму сусідніх (для крайніх нулів брати значення з
іншої сторони списку.
22) Створити 4 списка. Кожен із них складається із 3-х елементів. Перший
список - це дні тижня. Другий - страви сніданку. Третій - напої. І четвертий десерт. Необхідно:
 використовуючи функцію zip, скласти меню сніданку на будь-який день;
 вивести на екран.
23) Злиття двох списків. Необхідно:
 створити два упорядкованих списку по неспаданню;
 отримати новий список, що складається з елементів двох заданих
списків, таким же чином упорядкований;
 сортування не використовувати.
24) Створити список, елементами якого є слова. Необхідно:
 визначити середню «довжину» слова;
 визначити кількість слів, в яких більше п'яти символів;
 визначити кількість символів в найдовшому слові;
 визначити номер першого найкоротшого слова.
119
25) Створити список, елементами якого є вкладені списки. Кількість елементів
не менше 15. Вкладений список складається з двох елементів: країна і місто в цій
країні. необхідно:
 знайти міста, що знаходяться в Італії;
 знайти країну, міста якої найбільше вказані в списку.
26) Створити список, елементами якого є двозначні цілі числа в діапазоні 00-66.
Ці числа відповідають кісткам доміно. Наприклад, число 42 відповідає кістки
доміно «4-2» або «2-4». Необхідно:
 визначити, чи відповідає послідовність чисел ряду кісток доміно,
викладеному по правилам цієї гри;
 розглянути можливість ситуації в грі, званою «рибою». Подібна ситуація
можлива тоді, коли на стіл викладені всі шість (не рахуючи дубля) кісточок з
однаковим значенням і обидва кінці ланцюга замикають кістки з цим же
значенням.
27) Створити список з цілочисельних елементів, кількість яких не перевищує 25.
Необхідно:
 ввести індекси чисел i та j такі, що задовольняють умові: (1 <i<j<25);
 числа, що знаходяться між індексами, включаючи самі індекси, замінити
на символи латинського алфавіту, що знаходяться на тих же позиціях;
 впорядкувати вставку за алфавітом.
28) Створити випадковим чином, використовуючи random, список з 15 чисел.
Необхідно:
 якщо перший елемент в списку непарний, то сортувати елементи на
парних місцях, інакше на непарних. Сортування відбувається по неспаданню.
 зробити 2 варіанти: з використанням вбудованих функцій Python і без
них.
29) Ввести цілочисельний список розміру n. Серія - це група поспіль однакових
елементів, а її довжина - кількість цих елементів. Якщо довжина серії дорівнює
1, то її не змінювати. Необхідно:
 перетворити список, збільшивши кожну його серію на один елемент.
120
 створити новий список, в який записати кількість елементів кожної серії
(якщо довжина серії дорівнює 1, то не записувати).
30) Ввести 2 рядки і сформувати з цих рядків список. Необхідно:
 якщо рядки складаються тільки з чисел, то додати в середину списку
суму введених чисел;
 інакше додати рядок, утворений від об'єднань двох раніше введених
рядків;
 підсумковий рядок вивести на екран.
Завдання на множини
(Друге завдання)
Звертаю Вашу увагу на наступні моменти:
1. Майже всі завдання можна виконати в одному рядку.
2. Вся робота полягає в перекладі дій ДМ по множинам на МП Python.
У всіх наступних завданнях універсум має склад:
U  {1,2,3,4,a,b,c,d,ee,tt,ww}.
Спираючись на визначення базових операцій на множинах, знайти:
a) C  A  B -об'єднання двох множин;
б) C  A  B -перетин двох множин;
в) C  A \ B -різницю першої і другої множини ;
г) C  B \ A - різницю другої і першої множини;
д) C  A  B -симетрична різниця двох множин;
е) C  A -доповнення першої множини;
є) C  B - доповнення другої множини ;
ж) C  A  B -декартовий добуток першої множини на другу;
з) C  B  A - декартовий добуток другої множини на першу;
и) множина C задана зазначеної формулою F ( A, B) .
Варіанти завдань на тип множина (set)
1)
A  1, a, d , B  a, ee,4, d , F   A  B   A \ B ;
2)
A  ee, a, d , B  a, ee,4,2, F   A  B   A \ B ;
121
3)
A  1,2, ee, a, d , B  a, ee,4,2, F   A  B   A \ B ;
4)
A  1,2, ee, a, d , B  d , ee,4,3, F   A  B   A  B ;
5)
A  1,2, ee, a, d , B  1, d , ee,4,3, F   A  B   A  B ;
6)
A  1,2, ee, a, d , B  1, d , tt,4,3, F   A  B   A \ B ;
7)
A  1,2, ee, ww, a, d , B  1, d , tt,4,3, F   A  B \  A \ B
8)
A  1,2, ee, ww, a, d , B  1, a, c, tt,4,3, F   A \ B   A  B
9)
A  1,2, ee, ww, a, d , B  2, a, c, tt,4,3, F   A  B   A \ B
10)
A  1,2, ee, ww, a, d , B  2, a, b, tt,4,3, F   A  B \  A \ B
11)
A  1,2, ee, ww, a, d , B  2, a, b, tt,4,3, F   A  B   A \ B
12)
A  1,2, ee, ww, a, d , B  2, a, b, tt,1,3, F   A  B  B \ A
13)
A  1,2, ee, ww, c, d , B  2, a, b, tt,1,3, F   A  B   A \ B
14)
A  1,2, ee, ww, c, d , B  4, a, b, tt,1,3, F   A  B   A \ B
15)
A  1, a, ee, ww, c, d , B  4, a, b, tt,1,3, F   A \ B \  A  B
16)
A  1, a, ee, ww, c, d , B  4, a, b, ee,1,3, F   A  B   A \ B
17)
A  1, a, ee, ww, c, d , B  c, a, b, ee,1,3, F   A  B   A \ B
18)
A  1, a, b, ww, c, d , B  c, a, b, ee,1,3, F   A  B  B
19)
A  1, a, b, ww,2, d , B  tt, a, b, ee,1,3, F  B   A \ B
20)
A  1, a, b, ww,2, d , B  c, a, b, ee,1,3, F   A  B  B
21)
A  1, a, b, ww,2, d , B  2, a, b, ee,1,3, F   A  B  A
22)
A  1, a, b, ww, tt, d , B  2, a, b, ee,1,3, F   A  B   A  B
23)
A  1, a, b, ww, d , B  2, a, b, ee,1,3, F   A  B   A  B
24)
A  1, a, b, ww, d , B  2, a, c, ee,1,3, F   A \ B   A  B
25)
A  1, a, b, ww, d , B  1, a, c, ee,4,3, F   A  B   A \ B
26)Ввести два списки цілих чисел. Всі числа кожного списку знаходяться на
окремому рядку. Необхідно:
 вивести всі числа, які входять як в перший, так і в другій список;
 вивести числа в порядку зростання;
 завдання вирішити в один рядок.
122
27)
Ввести два списки цілих чисел. Всі числа кожного списку знаходяться на
окремому рядку. Необхідно:
 порахувати, скільки чисел міститься одночасно як в першому списку, так
і в другому;
 результат вивести на екран;
 завдання вирішити в один рядок.
28)
Згенерувати 2 випадкові рядки з будь-яких ASCII символів. Необхідно:
 створити 2 множини А і M з цих рядків;
 порахувати кількість елементів у множині А типу М;
 вивести на екран елементи і їх кількість.
29)
Згенерувати рядок, що містить символи, цифри, роздільники. Необхідно:
 створити з рядка 3 множини: з символів, цифр і роздільників;
 вивести на екран і підрахувати потужність кожного.
30)
Виконати операцію AB декартового добутки (всілякі комбінації значень)
двох множин. Цікавий приклад декартового добутку двох множин виникає, якщо
взятиA={a,b,c,d,e,f,g,h}, аB={1,2,3,4,5,6,7,8}. У цьому випадку множина AB
означає набір полів шахової дошки. Необхідно:
 створити 2 множини А і В;
 виконати операцію декартового добутки в одному рядку;
 результат вивести на екран.
Порада: використовувати метод itertools.product з модуля itertools.
123
ЛАБОРАТОРНА РОБОТА №6. РЕКУРСІЯ ТА ОБРОБКА МАТРИЦЬ
Мета роботи:Вивчення роботи з одновимірними і двовимірними
масивами із застосуванням рекурсивних функцій.
Теми для попереднього опрацювання:
 методи створення масивів;
 модулі та їх функції / методи (array і NumPy);
 базові операції з масивами;
 рекурсивні функції для роботи з масивами.
6.1 Теоретичні відомості
Одна з чудових особливостей базових типів мови Python полягає в тому,
що вони підтримують можливість створення вкладених конструкцій довільної
глибини і в будь-яких комбінаціях. Одне з очевидних застосувань цієї
особливості - уявлення матриць, або «багатовимірних масивів» в мові Python.
Робиться це за допомогою списку, який містить вкладені списки:
>>>M = [[1, 2, 3], # Матриця 3 x 3 у вигляді вкладених списків
[4, 5, 6], # Вираз у квадратних дужках може
[7, 8, 9]] # займати кілька рядків
>>>M
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Тут реалізовано список, що складається із трьох інших списків. У
результаті була отримана матриця чисел 3 x 3. Звертатися до такої структури
можна різними способами:
>>>M[1]# Отримати рядок 2
[4,5,6]
>>>M[1][2]# Отримати рядок 2, а потім елемент 3 в цьому рядку
6
Перша операція в цьому прикладі повертає другий рядок цілком, а друга третій елемент в цьому рядку. З'єднання операцій індексування дозволяє все далі
і далі занурюватися вглиб вкладеної структури об'єктів.
124
Така організація матриць цілком придатна для вирішення невеликих
завдань, але для реалізації більш складних програм цифрової обробки інформації
бажано використовувати спеціалізовані розширення, наприклад NumPy. Такого
роду інструменти дозволяють зберігати і обробляти матриці набагато
ефективніше, ніж така структура, яка реалізована у вигляді вкладених списків.
Як вже говорилося, розширення NumPy перетворює Python в вільний і більш
потужний еквівалент системи MatLab.
Генератори матриць
Основний спосіб реалізації матриць (вони ж - багатовимірні масиви) в мові
Python полягає в використанні вкладених списків. У наступному прикладі
визначаються дві матриці 3x3 у вигляді вкладених списків:
>>>M=[[1,2,3],
[4,5,6],
[7,8,9]]
>>>N=[[2,2,2],
[3,3,3],
[4,4,4]]
При такій організації завжди можна використовувати звичайну операцію
індексування для звернення до рядків і елементів усередині рядків:
>>>M[1]
[4,5,6]
>>>M[1][2]
6
Генератори списків є потужним засобом обробки таких структур даних,
тому що вони дозволяють автоматично сканувати рядки і стовпці матриць.
Наприклад, незважаючи на те, що при такій організації матриці зберігаються у
вигляді списку рядків, можна легко добути другий стовпець, просто обходячи
рядки матриці і вибираючи елементи з необхідного стовпця або виконуючи обхід
необхідних позицій в рядках: (див.[1] стор.585).
>>>[row[1] for row in M]
[2,5,8]
>>>[M[row][1] for row in(0,1,2)]
125
[2,5,8]
Використовуючи позиції, так само легко можна добути елементи, які лежать на
діагоналі. У наступному прикладі використовується функція range - вона
створює список зсувів, який потім використовується для індексування рядків і
стовпців одним і тим же значенням. В результаті спочатку вибирається M[0] [0],
потім M[1][1] і так далі (тут мається на увазі, що матриця має однакове число
рядків і стовпців):
>>>[M[i][i] for i in range(len(M))]
[1,5,9]
Генератори списків можна використовувати для об'єднання кількох
матриць. Перший приклад нижче створює простий список, що містить
результати множення відповідних елементів двох матриць, а другий створює
структуру вкладених списків, з тими ж самими значеннями:
>>>[M[row][col]*N[row][col] for row in range(3) for col in range(3)]
[2,4,6,12,15,18,28,32,36]
>>>[[M[row][col]*N[row][col] for col in range(3)] for row in range(3)]
[[2,4,6],[12,15,18],[28,32,36]]
В останньому виразі ітерації по рядках виконуються в зовнішньому циклі: для
кожного рядка запускається ітерація по стовпцях, яка створює один рядок в
матриці з результатами. Цей вислів еквівалентний наступному фрагменту:
>>>res =[]
>>>forrowinrange(3):
tmp =[]
for col in range(3):
tmp.append(M[row][col]*N[row][col])
res.append(tmp)
>>>res
[[2,4,6],[12,15,18],[28,32,36]]
На відміну від цього фрагмента, версія на базі генератора списків
вміщується в єдиний рядок і, ймовірно, працює значно швидше в разі великих
матриць, але, правда, складніше для сприйняття. Тому початківцям освоювати
мову Python рекомендується в більшості випадків використовувати прості цикли
for і функцію map, а генератори - в окремих випадках (якщо вони виходять не
126
надто складними). Тут також діє правило «чим простіше, тим краще»:
лаконічність програмного коду - набагато менш важлива мета, ніж його
читабельність.
З іншого боку, ускладнення програмного коду забезпечує більш високу
його продуктивність: проведені тести свідчать, що функція map працює
практично в два рази швидше, ніж еквівалентні цикли for, а генератори списків
зазвичай трохи швидше, ніж функція map. Цю різницю в швидкості виконання
обумовлено тим фактом, що функція map і генератори списків реалізовані на
мові C, що забезпечує більш високу швидкість, ніж виконання циклів for
всередині віртуальної машини Python.
Застосування циклів for робить логіку програми більш явною, тому можна
рекомендувати використовувати їх для забезпечення більшої простоти. Однак
функція map і генератори списків варті того, щоб знати і застосовувати їх для
реалізації простих ітерацій, а також у випадках, коли швидкість роботи програми
має критично важливе значення. Крім того, функція map і генератори списків є
вирази і синтаксично можуть перебувати там, де неприпустимо використовувати
інструкцію for, наприклад, в тілі lambda- виразів , тобто треба намагатися писати
прості функції map і генератори списків, а в більш складних випадках
використовувати повні інструкції.
Модуль array для одновимірних масивів
Модуль array містить визначення типу послідовності array.array, здатної
зберігати числа або символи досить економним способом. Цей тип даних нагадує
списки, за винятком того, що об'єкти цього типу можуть зберігати лише
елементи певного типу, який визначається на етапі його створення, тому, на
відміну від списків, вони не можуть одночасно зберігати об'єкти різних типів.
Масиви підтримують всі спискові методи (індексація, зрізи, множення, ітерації),
і інші методи. Масиви використовуються, коли потрібно досягти високої
швидкості роботи. В інших випадках масиви можна замінити іншими типами
даних: списками, кортежами, рядками.
127
Але, якщо потрібна максимально ефективна робота з масивами, слід
скористатися типом array з пакета NumPy.
Розмір і тип елемента в масиві визначається при його створенні і може
набувати таких значень:
Код типу
'b'
'B'
'h'
'H'
'i'
'I'
'l'
'L'
'q'
'Q'
'f'
'd'
Тип в
Python
int
int
int
int
int
int
int
int
int
int
float
float
Розмір в
байтах
1
1
2
2
2
2
4
4
8
8
4
8
array.array(typecode[,initializer]), де typecode - тип елементів масиву, initializer рядок або список значень, які використовуються для ініціалізації значень
елементів масиву.
Методи масивів (array) в Python
array.typecode−TypeCode символ, використаний при створенні масиву.
array.itemsize− розмір в байтах одного елемента в масиві.
array.append(х) −додавання елемента в кінець масиву.
array.buffer_info()−кортеж (комірка пам'яті, довжина). Корисно для
низькорівневих операцій.
array.count(х)−повертає кількість входжень х в масив.
array.extend(iter) − додавання елементів із об'єкта в масив.
array.frombytes(b)−робить масив array із масиву байт. Кількість байт повинна
бути кратна розміру одного елемента в масиві.
array.fromlist(список)−додавання елементів зі списку.
array.index(х) −номер першого входження x в масив.
array.insert(n,х) −включити новий пункт зі значенням х в масиві перед номером
n.
Від'ємні значення розглядаються відносно кінця масиву.
128
array.pop(i) − видаляє i-ий елемент із масиву і повертає його. За замовчуванням
видаляється останній елемент.
array.remove(х) − видалити перше входження х із масиву.
array.reverse()−. зворотний порядок елементів в масиві.
array.tobytes() − перетворення до байтів.
array.tolist() − перетворення масиву в список.
Приклади:
# Реалізовані наступні дії: ініцалізація, змінення, додавання елементів зі списку,
додавання і знаходження максимального елемента в масиві.
>>> import array
>>> a=array.array('i',[1,2,3,4,5])
>>> b=array.array(a.typecode,(2*x for x in a))
>>> lst=[20,40,60,80,100]
>>> b.fromlist(lst)
>>> print(b)
array('i',[2,4,6,8,10,20,40,60,80,100])
>>> print (b[4]+b[6])
50
>>> print(max(b))
100
>>>
# Реалізовано додавання елементів в масив
>>> import array
>>> a=array.array('i',[1,2,3,4,5])
>>> a.extend([100,200,300])
>>> print(a)
array('i',[1,2,3,4,5,100,200,300])
>>>
# Перетворення масиву в список
array('i',[1,2,3,4,5,100])
>>> a.tolist()
[1,2,3,4,5,100]
>>>
Модуль NumPy для матриць
129
NumPy - це бібліотека мови Python, що додає підтримку великих
багатовимірних масивів і матриць, разом з великою бібліотекою високорівневих
(і дуже швидких) математичних функцій для операцій з цими масивами.
Основним об'єктом NumPy є однорідний багатовимірний масив (в numpy
називається numpy.ndarray). Це багатовимірний масив елементів (зазвичай
чисел), одного типу.
Найбільш важливі атрибути об'єктів ndarray:
ndarray.ndim−число вимірювань (частіше їх називають "осі") масиву.
ndarray.shape − розміри масиву, його форма. Це кортеж натуральних чисел, що
показує довжину масиву по кожній осі. Для матриці із n рядків і m стовпців, shape
буде (n, m). Число елементів кортежу shape дорівнює ndim.
Ndarray.size−кількість елементів масиву. Очевидно, дорівнює добутку всіх
елементів атрибута shape.
ndarray.dtype − об'єкт, що описує тип елементів масиву. Можна визначити dtype,
використовуючи стандартні типи даних Python. NumPy тут надає цілий букет
можливостей, як вбудованих, наприклад: bool_, character, int8, int16, int32, int64,
float8, float16, float32, float64, complex64, object_, так і можливість визначити
власні типи даних, в тому числі і складові.
ndarray.itemsize − розмір кожного елемента масиву в байтах.
Створення масивів
У NumPy існує багато способів створити масив. Один із найбільш простих створити масив із звичайних списків або кортежів Python, використовуючи
функцію numpy.array(). Функція array() трансформує вкладені послідовності в
багатовимірні масиви. Тип елементів масиву залежить від типу елементів
вихідної послідовності (але можна і перевизначити його в момент створення).
>>>importnumpyasnp
>>>b=np.array([[1.5,2,3],[4,5,6]])
>>>b
array([[1.5, 2.,3.],
[4.,5.,6.]])
130
Є кілька функцій для того, щоб створювати масиви з якимось вихідним
вмістом (за замовчуванням тип створюваного масиву - float64).
Функція zeros() створює масив із нулів, а функція ones() - масив із одиниць.
Обидві функції приймають кортеж з розмірами, і аргумент dtype.
Функція eye() створює одиничну матрицю (двовимірний масив).
Функція empty() створює масив без його заповнення. Початковий вміст
випадковий і залежить від стану пам'яті на момент створення масиву (тобто від
того сміття, що в ній зберігається).
Для створення послідовностей чисел, в NumPy є функція arange(),
аналогічна вбудованої в Python range(), тільки замість списків вона повертає
масиви, і приймає не тільки цілі значення. Взагалі, при використанні arange() з
аргументами типу float, складно бути впевненим в тому, скільки елементів буде
отримано (через обмеження точності чисел з плаваючою комою). Тому, в таких
випадках зазвичай краще використовувати функцію linspace(), яка замість кроку
в якості одного із аргументів приймає число, що дорівнює кількості потрібних
елементів:
Приклад:
>>>np.linspace(0,2,9) # 9 чисел від 0 до 2 включно
array([ 0.,0.25,0.5 ,0.75,1. ,1.25,1.5 ,1.75,2. ])
# fromfunction():застосовує функцію до всіх комбінацій індексів
>>>
>>>deff1(i,j):
... return 3*i+j
...
>>>np.fromfunction(f1,(3,4))
array([[ 0.,1.,2.,3.],
[ 3.,4.,5.,6.],
[ 6.,7.,8.,9.]])
>>>np.fromfunction(f1,(3,3))
array([[ 0.,1.,2.],
[ 3.,4.,5.],
[ 6.,7.,8.]])
131
Базові операції
Математичні
операції
над
масивами
виконуються
поелементно.
Створюється новий масив, який заповнюється результатами дій оператора.
>>>importnumpyasnp
>>>a=np.array([20,30,40,50])
>>>b=np.arange(4)
>>>a+b
array([20,31,42,53])
>>>a-b
array([20,29,38,47])
>>>a*b
array([ 0,30,80,150])
Для цього, природно, масиви повинні бути однакових розмірів. Також
можна робити математичні операції між масивом і числом. У цьому випадку
операції виконуються з кожним елементом масиву. Багато унарних операцій,
таких як, наприклад, обчислення суми всіх елементів масиву, представлені
також і у вигляді методів класу ndarray. За замовчуванням, ці операції
застосовуються до масиву, як би він був списком чисел, незалежно від його
форми. Однак, вказавши параметр axis, можна застосувати операцію для
зазначеної осі масиву:
>>>a=np.array([[1,2,3],[4,5,6]])
>>>a.min(axis=0)# Найменше число в кожному стовпці
array([1,2,3])
>>>a.min(axis=1)# Найменше число в кожному рядку
array([1,4])
Індекси, зрізи, ітерації
Одновимірні масиви здійснюють операції індексування, зрізів і ітерацій
дуже схожим чином з звичайними списками і іншими послідовностями Python
(хіба що видаляти за допомогою зрізів не можна).
Приклад:
>>>a=np.arange(10)**3
>>>a
array([ 0,1,8,27,64,125,216,343,512,729])
132
>>>a[1]
1
>>>a[3:7]
array([27,64,125,216])
>>>a[3:7]=8
>>>a
array([0,1,8,8,8,8,8,343,512,729])
>>>a[::-1]
array([729,512,343,8,8,8,8,8,1,0])
У багатовимірних масивів на кожну вісь припадає один індекс. Індекси
передаються у вигляді послідовності чисел, розділених комами, тобто
кортежами:
>>>b=np.array([[0,1,2,3],
... [10,11,12,13],
... [20,21,22,23],
... [30,31,32,33],
... [40,41,42,43]])
>>>b[2,3] # Другий рядок, третій стовпець
23
>>>b[(2,3)]
23
>>>b[2][3] # Можна і так
23
>>>b[:,2] # Третій стовпець
array([ 2,12,22,32,42])
>>>b[:2] # Перші два рядки
array([[ 0,1,2,3],
[10,11,12,13]])
>>>b[1:3,::]# Другий і третій рядки
array([[10,11,12,13],
[20,21,22,23]])
Маніпуляції з формою
Форма масиву (shape) визначається числом елементів вздовж кожної осі:
>>>a
array([[[0,1,2],
133
[10,12,13]],
[[100,101,102],
[110,112,113]]])
>>>a.shape
(2,2,3)
Форма масиву може бути змінена за допомогою різних команд:
>>>a.ravel()# робить масив пласким
array([0,1,2,10,12,13,100,101,102,110,112,113])
>>>a.shape=(6,2)# змінаформи
>>>a
array([[0,1],
[2,10],
[12,13],
[100,101],
[102,110],
[112,113]])
>>>a.transpose()# транспонування
array([[0,2,12,100,102,112],
[1,10,13,101,110,113]])
>>>a.reshape((3,4))# змінаформи
array([[0,1,2,10],
[12,13,100,101],
[102,110,112,113]])
Об'єднаннямасивів
Кількамасивівможутьбутиоб'єднаніразомуздовжрізнихосейзадопомогоюф
ункційhstackіvstack.
hstack() об'єднує масиви по горизонталі осях, vstack() - по вертикалі:
>>>a=np.array([[1,2],[3,4]])
>>>b=np.array([[5,6],[7,8]])
>>>np.vstack((a,b))
array([[1,2],
[3,4],
[5,6],
[7,8]])
134
>>>np.hstack((a,b))
array([[1,2,5 6],
[3,4,7,8]])
Функція column_stack() об'єднує одновимірні масиви в якості стовпців
двовимірного масиву:
>>>np.column_stack((a,b))
array([[1,2,5,6],
[3,4,7,8]])
Аналогічно для рядків є функція row_stack().
>>>np.row_stack((a,b))
array([[1,2],
[3,4],
[5,6],
[7,8]])
Розбиття масиву
Використовуючи hsplit (), можна розбити масив вздовж горизонтальної осі,
вказавши або кількість масивів, щоповертаються однакової форми, або номера
стовпців, після яких масив розрізається "ножицями":
>>>a=np.arange(12).reshape((2,6))
>>>a
array([[0,1,2,3,4,5],
[6,7,8,9,10,11]])
>>>np.hsplit(a,3) # розбити на 3 частини[array([[0,1],[6,7]]),
array([[2,3],[8,9]]),
array([[4, 5],[10,11]])]
>>>np.hsplit(a,(3,4))# розрізати a після третього і четвертого стовпця
[array([[0,1,2],[6,7,8]]),
array([[3],[9]]),
array([[ 4,5],[10,11]])]
Функція vsplit() розбиває масив вздовж вертикальної осі, а array_split()
дозволяє вказати осі, уздовж яких відбудеться розбиття.
135
NumPy.random
На додаток слід зупинитися на темі створення масивів з випадкових
елементів і роботі з випадковими елементами в NumPy.Для створення масивів з
випадковими елементами служить модуль numpy.random.
Створення масивів
Найпростіший спосіб задати масив з випадковими елементами – використовувати функцію sample (або random, або random_sample, або ranf - це одна і
та ж функція).
>>> importnumpyasnp # імпортувати numpy
>>>np.random.sample()
0.6336371838734877
>>>np.random.sample(3)
array([0.53478558,0.1441317 ,0.15711313])
>>>np.random.sample((2,3))
array([[0.12915769,0.09448946,0.58778985],
[0.45488207,0.19335243,0.22129977]])
Без аргументів повертає просто число в проміжку (0,1), з одним цілим
числом - одновимірний масив, з кортежем - масив з розмірами, зазначеними в
кортежі (всі числа - з проміжку (0,1)).За допомогою функції randint або
random_integers можна створити масив з цілих чисел. Аргументи: low, high, size:
від якого до якого числа (randint не включає в себе це число, а random_integers
включає), і size - розміри масиву.
>>>np.random.randint(0,3,10)
array([0,2,0,1,1,0,2,2,2,0])
>>>np.random.random_integers(0,3,10)
array([2,2,3,3,1,1,0,2,3,2])
>>>np.random.randint(0,3,(2,10))
array([[0,1,2,0,0,0,1,1,1,2],
[0,0,2,2,2,0,1,2,2,1]])
Вибір і перемішування
Перемішати NumPy масив можна за допомогою функції shuffle:
>>>a=np.arange(10)
>>>a
136
array([0,1,2,3,4,5,6,7,8,9])
>>>np.random.shuffle(a)
>>>a
array([2,8,7,3,5,0,4,9,1,6])
Також можна перемішати масив за допомогою функції permutation (вона,
на відміну від shuffle, повертає перемішаний масив). Також вона, викликана з
одним аргументом, повертає перемішану послідовність від 0 до n.
Приклад:
>>>np.random.permutation(10)
array([1,2,3,8,7,9,4,6,5,0])
Зробити випадкову вибірку з масиву можна за допомогою функції choice.
numpy.random.choice(a,size=None,replace=True,p=None)
−a− одновимірний масив або число. Якщо масив, буде здійснюватися
вибірка з нього. Якщо число, то вибірка буде вироблятися з np.arange(a).
−size− розмірності масиву. Якщо None, повертається одне значення.
−replace− якщо True, то одне значення може вибиратися більш ніж один
раз.
−p− ймовірності. Це означає, що елементи можна вибирати з нерівними
можливостями. Якщо не задані, використовується рівномірний розподіл.
>>>a=np.arange(10)
>>>a
array([0,1,2,3,4,5,6,7,8,9])
>>>np.random.choice(a,10p=[0.5,0.25,0.25,0,0,0,0,0,0,0])
array([0,0,0,0,1,2,0,0,1,1])
Питання для самоперевірки
1. Як створюється одновимірний масив? Як отримати доступ до будь-якого
елементу масиву?
2. Як створюється матриця? Як отримати доступ до будь-якого елементу
матриці?
3. Які існують модулі для роботи з масивами?
4. Для чого можна використовувати генератори списків в масивах?
5. Методи додавання елементів в масив.
137
6. Що таке осі масиву?
7. Як можна створити послідовність чисел в масиві?
8. Яка функція створює одиничну матрицю?
9. Як можна змінити форму матриці?
10. Як можна виконати об'єднання і розбиття матриці?
11. Як можна створити масив з випадкових елементів?
6.2 Узагальнене формулювання завдання до лабораторної роботи
1) Вивчити принципи і способи створення одновимірних і двовимірних
масивів в мові Python.
2) Розробити програми відповідно до варіанта завдання.
3) Вхідні дані і результат роботи супроводжувати відповідною
інформацією на екрані.
4) Показати розроблену програму викладачеві.
5) Письмово відповісти на Питання для самоперевірки.
6) Оформити звіт відповідно до вимог.
Завдання на виконання лабораторної роботи складається з 2-х частин:
− робота з одновимірними масивами (векторами); функції для обробки
векторів повинні бути рекурсивними;
− робота з матрицями.
Варіанти завдань до лабораторної роботи
Завдання на одновимірні масиви
(Перше завдання)
1) Дан одновимірний масив числових значень, що нараховує n елементів.
Поміняти місцями елементи, які стоять на парних і непарних місцях: a[1] ↔ a [2];
a[3] ↔ a[4]. . .
2) Дан одновимірний масив числових значень, що нараховує n елементів.
Виконати переміщення елементів масиву по колу вправо, тобто a[1] → a[2]; a [2]
→ a[3]; . . .a[n] → a[1].
3) Дан одновимірний масив числових значень, що нараховує n елементів.
138
Поміняти місцями першу і другу половини масиву.
4) Дан одновимірний масив числових значень, що нараховує n елементів.
Поміняти місцями групу з m елементів, що починаються з позиції k з групою з m
елементів, що починаються з позиції p.
5) Дан одновимірний масив числових значень, що нараховує n елементів.
Вставити групу з m нових елементів, починаючи з позиції k.
6) Дан одновимірний масив числових значень, що нараховує n елементів. Суму
елементів масиву і кількість додатних елементів поставити на перше і друге
місце.
7) Дан одновимірний масив числових значень, що нараховує n елементів.
Виключити з нього m елементів, починаючи з позиції k.
8) Дан одновимірний масив числових значень, що нараховує n елементів.
Виключити всі нульові елементи.
9) Дан одновимірний масив числових значень, що нараховує n елементів. Після
кожного від'ємного елемента вставити новий елемент, рівний квадрату цього
від'ємного елементу.
10) Дан одновимірний масив числових значень, що нараховує n елементів.
Визначити, чи утворюють елементи масиву, розташовані перед першим
від'ємним елементом, зростаючу послідовність.
11) Дан одновимірний масив числових значень, що нараховує n елементів.
Визначити, чи утворюють елементи масиву, розташовані перед першим
від'ємним елементом, спадаючу послідовність.
12) Дан одновимірний масив числових значень, що нараховує n елементів. З
елементів вихідного масиву побудувати два нових. У перший повинні входити
тільки елементи з додатними значеннями, а в другій - тільки елементи з
від'ємними значеннями.
13) Дан одновимірний масив числових значень, що нараховує n елементів.
Додати стільки елементів, щоб елементів з додатними і від'ємними значеннями
стало б порівну.
139
14) Дан одновимірний масив числових значень, що нараховує n елементів.
Додати до елементів масиву такий новий елемент, щоб сума елементів з
додатними значеннями дорівнювала б модулю суми елементів з від'ємними
значеннями.
15) Дан одновимірний масив числових значень, що нараховує n елементів. Дано
додатне число t. Розділити це число між додатними елементами масиву
пропорційно значенням цих елементів і додати отримані частки до відповідних
елементів.
16) Дан одновимірний масив числових значень, що нараховує n елементів.
Виключити з масиву елементи, що належать проміжку [b;c].
17) Дан одновимірний масив числових значень, що нараховує n елементів.
Замість кожного елемента з нульовим значенням поставити суму двох
попередніх елементів масиву.
18) Дан одновимірний масив числових значень, що нараховує n елементів.
Визначити, чи є в масиві два підряд нуля.
19) Дан одновимірний масив числових значень, що нараховує n елементів.
Підрахувати кількість чисел, що діляться на 3 без остачі, і середнє арифметичне
чисел з парними значеннями. Поставити отримані величини на перше й останнє
місця в масиві (збільшивши масив на 2 елемента).
20) Дан одновимірний масив числових значень, що нараховує n елементів.
З'ясувати, чи є в даному масиві 2 підряд додатних елемента. Підрахувати
кількість таких пар.
21) Дан одновимірний масив числових значень, що нараховує n елементів.
Обчислити суму додатних і добуток парних членів даного масиву, якщо таких
членів немає, то видати повідомлення.
22) Дан одновимірний масив числових значень, що нараховує n елементів. Якщо
в даному масиві дійсних чисел є хоча б один член, менший ніж -2, то всі від'ємні
члени замінити їх квадратами.
23) Сформувати в програмі масив з цілих чисел від 2 до n. Підрахувати суму
квадpатов парних і суму квадратів непарних чисел.
140
24) Дано дійсні числа а1, .. a16. Отримати min (a1*a9, a2*a10, ..., a8*a16).
Скоригований масив вивести на екран.
25) Дан масив дійсних чисел a1, ..., an. Якщо серед елементів масиву є хоча б
одне число більше 100, то всі елементи масиву поділити на 100. Вихідний і
відкоригований масиви вивести на екран.
26) Дан масив дійсних чисел a1, ..., an. Знайти максимальний елемент серед
від'ємних елементів і поміняти його місцями з мінімальним додатним.
27) Дано 2 масиви цілих чисел х1, ..., хn, y1, ..., yn. Отримати новий масив по
наступному правилу:zi =
𝑥𝑖 +𝑦𝑖
𝑦𝑖
.
28) У упорядкованому за зростанням масиві з'ясувати, більше елементів зі
значенням >р або елементів зі значенням <р.
29) Дана послідовність з n цілих чисел. Визначити кількість інверсій в даній
послідовності (тобто таких пар елементів, в яких велике число знаходиться зліва
від меншого: xi> xj при i <j).
30) Дан масив цілих чисел a1, ..., an, кожне з яких відмінно від 0. Якщо в
послідовності від'ємні і додатні числа чергуються (+, -, +, -, ... або -, +, -, +, ...) ,
то відповіддю має бути вихідна послідовність. Інакше, отримати всі від'ємні
елементи послідовності, зберігши порядок їх слідування.
Завдання на двовимірні масиви (матриці)
(Друге завдання)
1) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Знайти найбільший елемент стовпця матриці A, для якого сума
абсолютних значень елементів максимальна.
2) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Знайти найбільше значення серед середніх значень для кожного рядка
матриці.
3) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Знайти найменший елемент стовпця матриці A, для якого сума
абсолютних значень елементів максимальна.
141
4) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Знайти найменше значення серед середніх значень для кожного рядка
матриці.
5) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Визначити середні значення по всіх рядках і стовпцях матриці.
Результат оформити у вигляді матриці з n+1 рядків і m+1 стовпців.
6) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Знайти суму елементів всієї матриці. Визначити, яку частку в цій сумі
становить сума елементів кожного стовпця. Результат оформити у вигляді
матриці з n+1 рядків і m стовпців.
7) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Знайти суму елементів всієї матриці. Визначити, яку частку в цій сумі
становить сума елементів кожного рядка. Результат оформити у вигляді матриці
з n рядків і m+1 стовпців.
8) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Визначити, скільки від’ємних елементів міститься в кожному стовпці і
в кожному рядку матриці. Результат оформити у вигляді матриці з n+1 рядків і
m+1 стовпців.
9) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Визначити, скільки нульових елементів міститься у верхніх f рядках
матриці і в лівих d стовпцях матриці.
10) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Перемножити елементи кожного стовпця матриці з відповідними
елементами k-го стовпця.
11) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Підсумувати елементи кожного рядка матриці з відповідними
елементами k-го рядка.
12) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Розділити елементи кожного рядка на елемент цього рядка з
найбільшим значенням.
142
13) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Розділити елементи кожного стовпця матриці на елемент цього стовпця
з найбільшим значенням.
14) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Розділити елементи матриці на елемент матриці з максимальним
значенням.
15) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Всі елементи мають цілий тип. Дано ціле число h. Визначити, які
стовпці мають хоча б одне таке число, а які не мають.
16) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Виключити з матриці рядок з номером k. Зімкнути рядки матриці.
17) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Додати до матриці рядок і вставити його під номером f.
18) Виконати обробку елементів квадратної матриці A(n). Знайти суму
елементів, що стоять на головній діагоналі, і суму елементів, що стоять на
побічній діагоналі (елементи головної діагоналі мають індекси від [0,0] до [n, n],
а елементи побічної діагоналі -від [n, 0] до [0 , n]).
19) Виконати обробку елементів квадратної матриці A(n). Визначити суму
елементів, розташованих паралельно головній діагоналі (найближчі до головної).
Елементи головної діагоналі мають індекси від [00] до [n,n].
20) Виконати обробку елементів квадратної матриці A(n). Визначити добуток
елементів, розташованих паралельно побічної діагоналі (найближчі до побічної).
Елементи побічної діагоналі мають індекси від [n,0] до [0,n].
21) Виконати обробку елементів квадратної матриціA(n). Кожній парі елементів,
симетричних відносно головної діагоналі (найближчі до головної), привласнити
значення, рівні напівсумі цих симетричних значень (елементи головної діагоналі
мають індекси від [0,0] до [n,n]).
22) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Вихідна матриця складається з нулів і одиниць. Додати до матриці ще
143
один стовпець, кожен елемент якого робить кількість одиниць в кожному рядку
парним.
23) Виконати обробку елементів квадратної матриці A(n). Знайти суму
елементів, розташованих вище головної діагоналі, і добуток елементів,
розташованих вище побічної діагоналі (елементи головної діагоналі мають
індекси від [0,0] до [n,n], а елементи побічної діагоналі _ від [n,0] до [0,n]).
24) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Дано номер рядка s і номер стовпця r, за допомогою яких вихідна
матриця розбивається на чотири частини. Знайти суму елементів кожної частини.
25) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Визначити, скільки нульових елементів міститься в кожному стовпці і
в кожному рядку матриці. Результат оформити у вигляді матриці з n +1 рядків і
m+1 стовпців.
26) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Дано номер рядка sі номер стовпця r, за допомогою яких вихідна
матриця розбивається на чотири частини. Знайти середнє арифметичне
елементів кожної частини.
27) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Всі елементи мають цілий тип. Дано ціле число h. Визначити, які рядки
мають хоча б одне таке число, а які не мають.
28) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Виключити з матриці стовпець з номером k. Зімкнути стовпці матриці.
29) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Додати до матриці стовпець чисел і вставити його під номером k.
30) Виконати обробку елементів прямокутної матриці A, що має n рядків і m
стовпців. Додати до елементів кожного стовпця такий новий елемент, щоб сума
позитивних елементів стала б рівна модулю суми негативних елементів.
Результат оформити у вигляді матриці з n+1 рядків і m стовпців.
ЛАБОРАТОРНА РОБОТА №7. РОБОТА З ФАЙЛАМИ
144
Мета роботи: Вивчення методів роботи з файлами та придбання практичних навичок створення і обробки текстових файлів.
Теми для попереднього опрацювання:

рядки, методи роботи з рядками;

списки, методи роботи зі списками.
7.1 Теоретичні відомості
Попередні роботи були пов'язані з об'єктами, що зберігаються в оперативній
пам'яті комп'ютера. Тобто після завершення роботи програми всі дії віддалялися.
У більшості програм виникає необхідність зберігати інформацію (наприклад,
дані або інформацію про стан) в файлах і завантажувати її з файлів. У мові Python
є безліч різних способів виконувати ці дії.
З точки зору програміста, файли бувають двох типів:
1) текстові, які містять текст, розбитий на рядки;
2) виконавчі, в яких можуть міститися будь-які дані і будь-які коди без обмежень;
в двійкових файлах зберігаються малюнки, звуки, відеофільми.
Текстовий файл можна розглядати і як текстовий, і як двійковий, а двійковий як
текстовий - не можна.
Структуровані текстові файли
Для простих текстових файлів єдиним рівнем організації є рядок. Але іноді може
знадобитися більш структурований файл. Наприклад, зберегти дані своєї
програми для подальшого використання або відправити їх іншій програмі.
Існує безліч форматів, які можна розрізнити за такими особливостями.

Роздільник, символ на зразок табуляції ('\ t'), коми (',') або
вертикальної риски ('|'). Це приклад формату зі значеннями, розділеними комою,
(CSV).

і HTML.
Символи '<' і '>', що оточують теги. Приклади включають в себе XML
145

Розділові знаки. Прикладом є JavaScript Object Notation (JSON).
Виділення пробілами. Прикладом є YAML (що в залежності від джерела може
означати YAML Is not Markup Language - «Не мова розмітки»).

Інші файли, наприклад, конфігураційні.
Кожен з цих форматів структурованих файлів може бути зчитаний і записаний
за допомогою як мінімум одного модуля Python. Більш детально зі
застосуванням цих форматів можна ознайомитися в джерелі [1] стор. 219-228.
У даній темі лабораторної роботи детально розглядаються текстові файли,
елементами яких будуть рядки.
Робота з файлом в програмі на мові Python включає три основних етапи.
Спочатку треба відкрити файл, тобто зробити його доступним для програми.
Якщо файл не відкритий, то програма не може до нього звертатися. При відкритті
файлу вказують режим роботи з ним. Коли файл відкритий (доступний),
програма виконує всі необхідні операції з ним. Після цього потрібно закрити
файл, тобто звільнити його, розірвати зв'язок з програмою. Саме при закритті всі
останні зміни, зроблені програмою в файлі, записуються на диск або інший носій
інформації.
Відкриття файлу проводиться за допомогою інструкції open (). Її формат:
<ім'я файлової змінної>=open (<ім'я файлу>,<режим відкриття >,
<encoding = "utf-8">), де
<ім'я файлової змінної> - ім'я змінної, за допомогою якої програма буде
здійснювати зв'язок з файлом (файловою змінною);
<ім'я файлу> - ім'я в лапках файлу, що використовується, і яке може включати
шлях до файлу; більш детально про знаходження абсолютного шляху до файлу з
прикладами див. [2], стор.279-282;
<режим відкриття> вказує, чи буде файл інтерпретуватися як текстовий або як
двійковий, і для виконання яких дій буде відкритий файл - для читання, для
запису, для доповнення в кінець або комбінації цих дій;
<encoding = "utf-8"> вказує кодування символів, що залежить від платформи.
146
Можливі режими відкриття файлів і їх позначення в інструкції open () наведені у
таблиці 7.1.
Таблиця 7.1. Список режимів доступу до файлу в Python.
r
Відкриває файл тільки для читання. Вказівник стоїть на початку файлу.
rb
Відкриває файл для читання в двійковому форматі. Вказівник стоїть на початку файлу.
r+
Відкриває файл для читання і запису. Вказівник стоїть на початку файлу.
rb+
w
wb
w+
wb+
a
ab
a+
ab+
Відкриває файл для читання і запису в двійковому форматі. Вказівник стоїть на початку
файлу.
Відкриває файл тільки для запису. Вказівник стоїть на початку файлу. Створює файл з
ім'ям ім'я_файлу, якщо такого не існує.
Відкриває файл для запису в двійковому форматі. Вказівник стоїть на початку файлу.
Створює файл з ім'ям имя_файлу, якщо такого не існує.
Відкриває файл для читання і запису. Вказівник стоїть на початку файлу. Створює файл
з ім'ям имя_файлу, якщо такого не існує.
Відкриває файл для читання і запису в двійковому форматі. Вказівник стоїть на початку
файлу. Створює файл з ім'ям имя_файлу, якщо такого не існує.
Відкриває файл для додавання інформації у файл. Вказівник стоїть в кінці файлу.
Створює файл з ім'ям имя_файлу, якщо такого не існує.
Відкриває файл для додавання у двійковому форматі. Вказівник стоїть в кінці файлу.
Створює файл з ім'ям имя_файлу, якщо такого не існує.
Відкриває файл для додавання і читання. Вказівник стоїть в кінці файлу. Створює файл
з ім'ям имя_файлу, якщо такого не існує.
Відкриває файл для додавання і читання в двійковому форматі. Вказівник стоїть в кінці
файлу. Створює файл з ім'ям имя_файлу, якщо такого не існує.
Режими можуть бути об'єднані, тобто, наприклад, 'rb' - читання в двійковому
режимі.
Приклади:
За
замовчуванням
режим
дорівнює
'rt'.
147
f = open('my_file1.txt') # Використано режим відкриття за замовчуванням
f2 = open('my_file2.txt', 'w')
input = open('список', 'r')
fv = open('C:/TEMP/1.txt') # Вказано повний шлях до файлу
fv1 = open('/Файлы/1.csv', 'r') # Вказано відносний шлях до файлу
fv15 = open('../My/15.csv', 'r') # Вказано відносний шлях до файлу
file = open('data', 'r+')
Увага! Якщо при відкритті файлу для запису вказати ім'я вже існуючого файлу з
інформацією, то вона буде загублена. Якщо файлу не існує - створюється новий.
Якщо файл, який відкривається на читання, не знайдений, виникає помилка. Для
закриття
файлу
призначений
метод
close().
Приклад:
f.close()
input.close()
де f и input – імена файлових змінних.
Запис інформації в файл
Для запису інформації в файл використовується метод write (). Наприклад,
записати в текстовий файл фразу 'How beautiful the world is!' можна так:
# Відкриваємо файл на запис
f = open(..., 'w') #. де замість ... повинно бути вказано ім'я файлу в лапках
# Записуємо в нього текст
f.write(' How beautiful the world is! ')
# Якщо більше нічого записуватися не буде - треба закрити файл
f.close()
Ще кілька прикладів програм, в яких відбувається запис інформації в файл.
Приклад 1. Запис рядка, значення якого задається в ході виконання програми:
f = open(..., 'w')
s = input('Задайте рядок ')
f.write(s)
f.close()
Приклад 2. Запис всіх чисел від 1 до 100 з пробілом між ними:
f = open(..., 'w')
for n in range(1, 101):
f.write(str(n),+ ' ')
148
f.close()
Тут функція str використовується тому, що файл - текстовий (послідовність
символів), а змінна n - число.
Приклад 3. Запис всіх символів заданого рядку:
s = input('Задайте рядок ')
f = open(..., 'w')
for nom in range(len(s)): # Розглядаємо всі номери символів рядка s
f.write(s[nom])
f.close()
або
s = input('Задайте рядок ')
f = open(..., 'w')
for sim in s: # Розглядаємо всі символи рядка s
f.write(sim)
f.close()
Приклад 4. Запис тексту, який при читанні файлу буде мати вигляд:
Hello,
people!
Програма:
f = open(..., 'w')
f.write(' Hello, ' + ' \n')
f.write(' people!' + '\n')
f.close()
або коротше:
f = open(..., 'w')
f.write(' Hello,\n')
f.write(' people!\n')
f.close()
Тут в рядок виведення в файл включено керуючий параметр '\ n', відповідний
символу переходу на наступний рядок. Звернемо увагу на те, що в другому
варіанті
програми
перед
цим
параметром
пробілів
немає.
Приклад 5. Запис кожного символу заданого рядку на окремий рядок файлу:
s = input('Задайте рядок ')
f = open(..., 'w')
149
for nom in range(len(s)):
f.write(s[nom] + '\n')
f.close()
або
s = input('Задайте рядок ')
f = open(..., 'w')
for sim in s:
f.write(sim + '\n')
f.close()
Приклад 6. Запис кожного з чисел від 1 до 10 на окремому рядку файлу:
f = open(..., 'w')
for m in range(1, 11): #m – числа, які записуються
f.write(str(m) + '\n')
f.close()
Приклад 7. Запис кожного елементу заданого списку зі значень строкового типу
на окремому рядку файлу:
sp = [...] #Заданий список
f = open(..., 'w')
for i in range( len(sp)):
f.write(sp[i] + '\n')
f.close()
У Python є можливість записати в файл всі елементи списку за допомогою методу
writelines ():
sp = [...]
f = open(..., 'w')
f.writelines(sp)
f.close()
Приклад 8. Запис кожного з 10 заданих назв футбольних клубів на окремому
рядку файлу:
f = open(..., 'w')
for k in range(10):
# Введення чергової назви
club = input(' Введіть назву клубу ')
# Запис його в файл
f.write(club + '\n')
150
f.close()
Файли, створені в результаті виконання цих програм, знадобляться для
вирішення завдань, розглянутих далі.
Читання інформації з файлу
Для читання рядка текстового файлу використовується метод readline ().
Наприклад, програма для виведення на екран першого рядка файлу, пов'язаного
з файловою змінною f, має вигляд:
f = open(..., 'r')
# Читаємо 1-й рядок файлу і запам'ятовуємо його в змінній s
s = f.readline()
# Друкуємо значення змінної s
print(s)
Якщо розробити таку програму для виведення на екран двох рядків файлу,
створеного при розв'язанні одного з попередніх прикладів:
# Відкриваємо файл для читання
f = open(..., 'r')
# Читаємо 1-й рядок файлу і запам'ятовуємо його в змінній s
s = f.readline()
# Друкуємо значення змінної s
print(s)
# Те ж саме з 2-м рядком
s = f.readline()
print(s)
# Закриваємо файл
f.close()
і виконати її, то результат буде (як і вимагалося в умові прикладу) таким:
Hello,
people!
Чому між двома рядками, прочитаними з файлу, виводиться порожній рядок?
Справа в тому, що під час запису тексту в файл в кінець кожного рядка був
записаний керуючий параметр '\ n', відповідний символу переходу на наступний
151
рядок. Тому після виведення першого рядка ( 'Hello,') відбувся перехід на
наступний рядок екрана. А згідно з правилами роботи інструкції print (), після її
виконання також відбувається перехід на наступний рядок. Тому, щоб
виключити виведення порожнього рядка, слід або включити в інструкцію print ()
параметр end = '', при якому переходу на наступний рядок після виведення не
буде:
f = open(..., 'r')
s = f.readline()
# друкуємо змінну s
print(s, end = '')
s = f.readline()
print(s, end = '')
f.close()
або не виводити керуючий параметр (це можна зробити, використовуючи зріз
рядка):
f = open(..., 'r')
s = f.readline()
# Друкуємо змінну s, використовуючи зріз
print(s[0: len(s) - 1])
s = f.readline()
print(s[0 : len(s) - 1])
f.close()
Керуючий параметр \ n можна також виключити з прочитаного рядка s за
допомогою методу rstrip (). Цей метод видаляє кінцеві символи рядка (за
замовчуванням - пробіли). У нашому випадку метод повинен бути використаний
з символом-параметром 'n':
...
s = f.readline()
s = s.rstrip('n')
...
Розв'яжемо ще ряд завдань, в яких відбувається читання інформації з файлу.
Завдання 1. Вивести на екран всі рядки файлу, створеного при вирішенні
прикладу 5. Порожніх рядків між ними бути не повинно.
152
Програма:
n = ... #n – число рядків у файлі
f = open(..., 'r')
for k in range(n):
s = f.readline()
print(s, end = '')
f.close()
або
n = ...
f = open(..., 'r')
for k in range(n):
st = f.readline()
print(st[0 : len(st) - 1])
f.close()
Але в цьому випадку, якщо зазначене n більше кількості рядків у файлі, то в
кінець при виведенні додаються порожні рядки до n.
Довжину файлу можна визначити так:
len(open('… .txt').readlines())
або інакше:
import re
len(re.findall(r"[\n']+", open('… .txt').read())) # виведе кількість без порожніх рядків
Завдання 2. Вивести на екран всі рядки файлу, створеного при вирішенні
прикладу 6. Порожніх рядків між ними бути не повинно.
Програма
f = open(..., 'r')
for k in range(10):
s = f.readline()
print(s, end = '')
f.close()
або
f = open(..., 'r')
for k in range(10):
s = f.readline()
153
print(s[0 : len(s) - 1])
f.close()
Завдання 3. Для файлу, створеного при вирішенні прикладу 7, вивести на екран
рядок
з
заданим
номером
n.
Список
не
використовувати.
Текстовий файл називають «файлом послідовного доступу до даних». Це
означає, що для того, щоб прочитати 100-е за рахунком значення з файлу,
потрібно спочатку прочитати попередні 99. У своїй внутрішній пам'яті система
зберігає положення вказівника (файлового курсора), який визначає поточне
місце в файлі. При відкритті файлу вказівник встановлюється в самий початок
файлу, при читанні зміщується на позицію, наступну за прочитаними даними.
Якщо потрібно повторити читання з початку файлу, потрібно його закрити, а
потім знову відкрити. Тому для вирішення завдання треба прочитати, але не
використовувати перші (n - 1) рядків файлу, а потім прочитати і вивести на екран
n-й рядок.
Відповідна програма:
n = int(input('Задайте номер рядку файла '))
f = open(..., 'r')
for k in range(1, n):
s = f.readline() # Пропускаємо перші (n - 1) рядків
# Читаємо рядок з номером n і запам'ятовуємо його в змінній s
s = f.readline()
#Виводимо його
print(s) # Керуючого параметра в кінці рядка можна не виключати
f.close()
Завдання 4. Всі рядки файлу, створеного при розв'язанні прикладу 7, записати в
список.
Програма:
sp = [] # заповнюваний список
f = open(..., 'r')
n = ... # n – число рядків у файлі
for k in range(n):
s = f.readline() # Читаємо черговий рядок файлу і запам'ятовуємо його в змінній s
154
sp.append(s[0 : len(s) – 1]) # Додаємо значення s без керуючого символу в якості нового#
элемента списка
f.close()
В Python є оригінальні можливості записати всі рядки текстового файлу в список.
Зокрема, це можна зробити за допомогою методів readlines () і strip ().
Наприклад, для отримання списку а, що складається з усіх рядків файла,
зв'язаного в програмі з файловою змінною f, необхідно записати:
a = f.readlines()
або
а = [line.strip() for line in f]
Ще один оригінальний спосіб - одночасне використання методів read () і split ():
a = f.read().split()
Перший метод читає всі рядки файлу і представляє їх як один рядок, а другий поділяє його на вихідні частини і записує їх окремо в список.
Можна також записати в список всі слова одного рядка текстового файлу. Для
цього треба:
1)
прочитати цей рядок:
s = f.readline()
2)
отримати список slova його слів:
slova = s.split()
Наявність або відсутність керуючого символу в кінці кожного елемента списку у
всіх перерахованих варіантах встановіть самостійно. У всіх розглянутих задачах
кількість рядків текстового файлу, що читається, було відомо (2, n і 10). А якщо
це не так? У подібних випадках для читання всіх рядків можна використовувати
інструкцію циклу for зі змінною line, відповідної кожному рядку файлу:
f = open(..., 'r')
for line in f: # Для всіх рядків файлу,що читається
s = line # значення рядків
...
Наприклад, програма для виведення на екран всіх рядків файлу без порожніх
рядків між ними має вигляд:
f = open(..., 'r')
155
for line in f:
s = line
print(s, end = '')
f.close()
або (при використанні зрізу):
f = open(..., 'r')
for line in f:
s = lineprint(s[0 : len(s) - 1]) # Виведення рядка на екран
# без керуючого символу
f.close()
Примітка. Можна замість змінної s використовувати при виведенні і інших діях
(див. завдання нижче) змінну line.
Завдання 5. Всі рядки файлу, створеного при розв'язанні прикладу 5, записати в
інший файл. Список не використовувати.
Програма
f = open(..., 'r') # Відкриваємо існуючий файл на читання,
# а новий файл - на запис
file = open(<ім'я файлу для запису >, 'w')
for line in f: # Для всіх рядків вихідного файлу:
s = line # Значення чергового рядка
file.write(s) # записуємо в інший файл,
# в тому числі і керуючий символ \ n
f.close()
file.close()
Завдання 6. Використовуючи файл, створений при розв'язанні прикладу 5,
визначити номер рядку, в якій записано деякий символ sim. Прийняти, що такий
символ у файлі зустрічається рівно один раз. Список не використовувати.
Завдання може бути вирішена різними засобами. Можна розглянути всі рядки
файлу, визначаючи при цьому номер кожного рядка. Якщо значення в рядку (без
врахування останнього, керуючого символу) збігається з відшукуваним
символом, то номер цього рядка потрібно запам'ятати.
Програма
sim = input('Задайте символ ')
156
f = open(..., 'r')
nomer_stroki = 0 # Поточний номер рядка файлу
#( умовне початкове значення)
isk_nomer = 0 # шуканий номер рядка
for line in f: # Для кожного рядка файлу:
nomer_stroki = nomer_stroki + 1 # визначаємо його номер
s = line # і значення в рядку
# Порівнюємо значення в рядку без керуючого символу
# з шуканим символом (використовуємо зріз)
if s[0 : len(s) - 1] == sim: # Зустрівся шуканий символ
# Запам'ятовуємо номер поточного рядка файлу
isk_nomer = nomer_stroki
# виводимо відповідь
print('Цей символ знаходиться в рядку номер', isk_nomer)
f.close()
Однак це спосіб нераціональний при великому числі рядків у файлі (шуканий
символ може виявитися вже на початку файлу, а ми читаємо і перевіряємо всі
його рядки). Можна проводити перевірку рядків тільки до знаходження
шуканого символу. Це можна зробити двома способами:
1)
використовувати інструкції for і break:
sim = input('Задайте символ ')
f = open(..., 'r')
nomer_stroki = 0
isk_nomer = 0
for line in f:
nomer_stroki = nomer_stroki + 1
s = line
# Порівнюємо значення в рядку з потрібним символом
if s[0 : len(s) - 1] == sim: # Зустрівся шуканий символ
# Запам'ятовуємо номер поточного рядка файлу
isk_nomer = nomer_stroki
# Припиняємо роботу інструкції for
break
# Зупинилися на рядку з заданим символом
# Виводимо відповідь
print ('Цей символ знаходиться в рядку номер', isk_nomer)
f.close()
157
2)
використовувати інструкцію while.
Особливості роботи відповідної програми наведені в коментарях.
sim = input ('Задайте символ')
f = open (..., 'r')
nomer_stroki = 1 # Номер рядка файлу
s = f.readline () # Його значення (символ)
while s [0: len (s) - 1]! = sim: # Поки не зустрінеться
# Шуканий символ
# Переходимо до наступного рядка (читаємо його)
s = f.readline ()
# Номер цього рядка
nomer_stroki = nomer_stroki + 1
# Зупинилися на рядку з заданим символом
print ('Цей символ знаходиться в рядку номер', nomer_stroki)
f.close ()
Звернемо увагу на необхідність виключення зі значення прочитаного рядка
керуючого символу. Це необхідно робити завжди, коли рядок файлу
порівнюється з «звичайним» рядком.
Завдання 7. Використовуючи файл, створений при вирішенні прикладу 5,
визначити, чи є в файлі заданий символ sim. Список не використовувати. Для
вирішення можна використовувати змінну est_sim логічного типу (або приймає
значення 0 і 1), що визначає, чи є в файлі заданий символ (якщо є, то ця змінна
має значення True або 1, інакше - False або 0).
Програма
sim = input ('Задайте символ')
f = open (..., 'r')
# Спочатку символ не знайден
est_sim = False # Або est_sim = 0
for line in f: # Для кожного рядка файлу:
s = line
# Порівнюємо його із заданим символом
if s [0: len (s) - 1] == sim: # Зустрівся шуканий символ
# Міняємо значення змінної est_sim
est_sim = True # Або est_sim = 1
158
# Припиняємо роботу інструкції for
break
# Виводимо відповідь
if est_sim: # Або if est_sim == True:
# Або if est_sim == 1:
print ('Даний символ у файлі є')
else:
print ('Даного символу у файлі немає')
f.close ()
Можна також використовувати інструкцію while:
sim = input ('Задайте символ')
f = open (..., 'r')
est_sim = False # Або est_sim = 0
while not est_sim: # Або while not est_sim == True:
# Або while est_sim == 0:
# Доки не зустрінеться шуканий символ:
# Читаємо черговий рядок файлу
s = f.readline ()
# Порівнюємо його із заданим символом
if s [0: len (s) - 1] == sim: # Зустрівся шуканий символ
# Міняємо значення змінної est_sim
est_sim = True # Або est_sim = 1
…
Завдання 8. У текстовому файлі gosud.txt на окремих рядках записані назви 10
держав, у файлі stolitsi.txt - їх столиці (також на окремих рядках і в тому ж
порядку, що і назви держав). Дано назву держави. Визначити його столицю.
Списки не використовувати. Вирішення цього завдання являє собою «суму»
рішень задач 6 і 3:
gos = input ('Введіть назву держави')
# Визначаємо номер рядка у файлі gosud.txt,
# В якому записано назву заданої держави
f1 = open ('gosud.txt', 'r')
nomer_stroki = 0
isk_nomer = 0
for line in f1: # Для кожного рядка файлу
nomer_stroki = nomer_stroki + 1 # визначаємо його номер
s = line # і значення в рядку
159
# Порівнюємо значення в рядку з шуканою назвою
if s [0: len (s) - 1] == gos: # Зустрілася шукана назва
# Запам'ятовуємо номер поточного рядка файлу
isk_nomer = nomer_stroki
# Припиняємо роботу інструкції for
break
# Закриваємо файл gosud.txt
f1.close ()
# Шукаємо рядок з номером isk_nomer у файлі stolitsi.txt
f2 = open ('stolitsi.txt', 'r')
for k in range (1, isk_nomer):
s = f2.readline () # Пропускаємо перші (Isk_nomer - 1) рядків
# Читаємо рядок з номером isk_nomer
s = f2.readline ()
# Виводимо його значення
print ('Столиця цієї держави:', s)
# Закриваємо файл stolitsi.txt
f2.close ()
Можна також не читати перші «непотрібні» рядки, а, ведучи підрахунок рядків,
знайти рядок з номером isk_nomer і вивести його на екран:
...
# Шукаємо рядок з номером sought_for_number в файлі stolitsi.txt
f2 = open ('stolitsi.txt', 'r')
nomer_stroki = 0
for line in f2: # Для кожного рядка файлу
nomer_stroki = nomer_stroki + 1 # визначаємо її номер
if nomer_stroki == isk_nomer:
# Зустрівся рядок з номером isk_nomer
# Виводимо його значення
print ('Столиця цієї держави:', line)
# Припиняємо роботу інструкції for
break
# Закриваємо файл stolitsi.txt
f2.close ()
Для читання всіх рядків файлу можна використовувати також такий дуже
короткий варіант:
for s in open(<имя файла>):
...
160
У ньому в змінній s будуть перебиратися значення всіх рядків. Звернемо увагу
на те, що:
1) відкривати файл для читання окремої інструкцією не потрібно;
2) в інструкції open () можна не вказувати режиму відкриття файлу для читання;
3) закривати файл за допомогою методу close () не потрібно, він закриється
автоматично після закінчення циклу for.
Іноді, читаючи рядки файлу по одному, необхідно визначити, коли дані
закінчилися. У таких випадках логіка дій повинна бути такою:
while не кінець файлу:
Читаємо черговий рядок
використовуємо його
if кінець файлу:
Припиняємо читання рядків
Для того щоб визначити, коли файл закінчився, можна використовувати
особливість методу readline (): коли файловий курсор (див. Вище) вказує на
кінець файлу, цей метод повертає порожній рядок, яка сприймається як
помилкове логічне значення (False).
Це дозволяє застосувати аналог циклу з постумовою:
while True:
s = f.readline()
print(s, end = '')
if not s:
break
У цьому прикладі при отриманні порожнього рядка цикл читання і виведення на
екран рядків файлу закінчується за допомогою інструкції break. Аналогічно
можна знайти кількість рядків у файлі:
f = open(..., 'r')
k=0
while True:
k=k+1
s = f.readline()
if not s:
break
f.close()
161
# Уточнюємо значення k
k=k-1
print(k)
Примітка. Уточнення k = k - 1 пов'язано з тим, що після прочитання порожнього
рядка лічильник числа рядків також буде збільшений. Можна також включити
це уточнення в інструкцію if.
Кількість рядків у файлі можна визначити також, використовуючи інструкцію
циклу for.
Зміна файлів
Запис в файл нового рядка
Для вирішення завдання треба відкрити файл на додавання до нього інформації:
f = open(..., 'a')
після чого записати в нього новий рядок:
f.write(new_str + '\n') і закрити файл:
f.close()
Звернемо увагу на необхідність використання під час запису керуючого символу.
Заміна рядка файлу
Припустимо, потрібно в існуючому файлі замінити рядок із заданим номером k
на деякий новий рядок nov_str. На перший погляд, здається, що можна вчинити
так:
1) відкрити файл на читання і запис:
f = open(..., 'r+')
2) прочитати, але не використовувати перші (k - 1) рядків файлу:
for i in range(1, k):
s = f.readline() # Пропускаємо перші (k - 1) рядків
3) записати в поточний рядок файлу нове значення:
f.write(nov_str + '\n')
Однак при цьому потрібний результат отриманий не буде (переконайтеся
в цьому).
Правильне рішення:
1) відкрити файл на читання:
f = open (..., 'r')
2) всі рядки файлу записати в список (див. рішення задачі 6):
162
sp = f.readlines ()
3) закрити файл:
f.close ()
4) змінити відповідне значення в списку:
sp [k - 1] = nov_str + '\ n' # Рядок з номером k записано в
# Елементі списку з індексом k - 1
5)
записати всі елементи нового списку в той же файл:
f = open(..., 'w')
for el in sp:
f.write(el)
f.close()
З використанням списку вирішуються також завдання:
 видалення рядка файлу; вставки у файл нового рядка;
 обміну місцями двох рядків файлу;
 перестановки всіх рядків файлу в зворотньому порядку;
 сортування рядків файлу.
Використання оператора with
В Python є акуратно вбудований інструмент, який може помітно спростити
читання і редагування файлів, званий менеджером контексту. Оператор with
створює диспетчер контексту в Python, який автоматично закриває файл, по
закінченню роботи в ньому. Як це працює:
with open("test.txt") as file_handler:
for line in file_handler:
print(line)
Можна виконувати всі стандартні операції введення|/ виводу в межах блоку коду,
в звичному порядку. Після виходу з блоку коду, файловий дескриптор закриє
його, і його вже не можна буде використовувати. Оператор закриває файл
автоматично.
Як дізнатися позицію вказівника у файлі в Python
163
Після того як викликаний метод read () на файловому об'єкті, якщо повторно
викликати read (), то буде порожній рядок. Це відбувається тому, що після
першого прочитання вказівник знаходиться в кінці файлу. Для того щоб
дізнатися позицію вказівника можна використовувати метод tell ().
Приклад:
my_file = open("some.txt")
my_file.read(10)
print ("Я на позиції:", my_file.tell())
my_file.close()
Говорячи простіше, метод tell () повідомляє у скількох байтах від початку файлу
ми зараз знаходимося. Щоб перейти на потрібну позицію, слід використовувати
інший метод - seek ().
Синтаксис методу seek ()
my_file.seek (offset, [from])
Метод seek (offset [, from]) змінює поточну позицію в файлі. Аргумент offset
вказує на скільки байт перейти. опціональний аргумент from означає позицію, з
якої починається рух. 0 - означає початок файлу, 1 нинішня позиція, 2 - кінець
файлу.
Приклад:
my_file = open ("some.txt", "r")
print (my_file.read (10))
print ("Ми знаходимося на позиції:", my_file.tell ())
# Повертаємося в початок
my_file.seek (0)
print (my_file.read (10))
my_file.close ()
Модуль OS і робота з файловою системою
Ряд можливостей по роботі з каталогами та файлами надає вбудований модуль
os. Хоча він містить багато функцій, розглянемо лише основні з них:

mkdir (): створює нову папку
164

rmdir (): видаляє папку

rename (): перейменовує файл

remove (): видаляє файл
Створення та видалення папки
Для створення папки застосовується функція mkdir (), в яку передається шлях до
створюваної папки:
import os
# Шлях щодо поточного скрипта
os.mkdir ("hello")
# Абсолютний шлях
os.mkdir ("c: // somedir")
os.mkdir ("c: // somedir / hello")
Для видалення папки використовується функція rmdir (), в яку передається шлях
до видаленої папки:
import os
# Шлях відносно поточного скрипта
os.rmdir("hello")
# абсолютний шлях
os.rmdir("c://somedir/hello")
Перейменування файлу
Для перейменування викликається функція rename (source, target), перший
параметр якої - шлях до вихідного файлу, а другий - нове ім'я файлу. В якості
шляхів можуть використовуватися як абсолютні, так і відносні. Наприклад,
нехай в папці C: // SomeDir / розташовується файл somefile.txt. Перейменуємо
його у файл "hello.txt":
import os
os.rename("C://SomeDir/somefile.txt", "C://SomeDir/hello.txt")
Видалення файлу
165
Для видалення викликається функція remove (), в яку передається шлях до файлу:
import os
os.remove("C://SomeDir/hello.txt")
Існування файлу
Якщо спробувати відкрити файл, який не існує, то Python видасть виняток
FileNotFoundError.
Для
відлову
виключення
можна
використовувати
конструкцію try ... except. Однак можна вже до відкриття файлу перевірити, чи
існує він чи ні за допомогою методу os.path.exists (path). У цей метод передається
шлях, який необхідно перевірити:
ilename = input ("Введіть шлях до файлу:")
if os.path.exists (filename):
print ("Зазначений файл існує")
else:
print ("Файл не існує")
Додаткові важливі функції роботи з os
Кожна програма має поточний каталог. Функція os.getcwd повертає поточний
каталог:
import os
cwd = os.getcwd()
print cwd
Перевірити наявність файлу в поточному каталозі:
os.path.exists('my_file')
Наступний приклад рекурсивно виводить список всіх файлів і підкаталогів для
даного каталогу:
import os
def walk(dir):
for name in os.listdir(dir):
path = os.path.join(dir, name)
if os.path.isfile(path):
166
print path
else:
walk(path)
walk(path)
У наступному прикладі виходить статистична інформація щодо поточного
каталогу: загальний розмір каталогу в байтах, число файлів, число підкаталогів.
Стандартна функція os.path.walk має три параметри: каталог, користувацька
функція, список для підрахунку:
import os, sys
def getlocaldata(sms,dr,flst):
for f in flst:
fullf = os.path.join(dr,f)
if os.path.islink(fullf): continue # don't count linked files
if os.path.isfile(fullf):
sms[0] += os.path.getsize(fullf)
sms[1] += 1
else:
sms[2] += 1
def dtstat(dtroot):
sums = [0,0,1] # 0 bytes, 0 files, 1 directory so far
os.path.walk(dtroot,getlocaldata,sums)
return sums
report = dtstat('.')
print report
У наступному прикладі зроблена інтерпретація системної утиліти grep. У
поточному каталозі будуть знайдені файли з пітоновськім розширенням, в яких
буде знайдений пошуковий рядок 'import os':
import os, sys, fnmatch
mask = '*.py'
pattern = 'import os'
def walk(arg,dir,files):
for file in files:
167
if fnmatch.fnmatch(file,mask):
name = os.path.join(dir,file)
try:
data = open(name,'rb').read()
if data.find (pattern)! = -1:
print name
except:
pass
os.path.walk ('.', walk, [])
Питання для самоперевірки
1.
Що таке «файлова змінна»?
2.
Які основні етапи роботи з файлами в програмі?
3.
Які можливі режими відкриття файлу?
4.
Як можна почати читання даних з файлу з самого початку?
5.
Що таке «послідовний доступ до даних»?
6.
Як можна прочитати всі рядки файлу, якщо їх кількість
невідома?
7.
Як можна рядки файлу записати в список?
8.
Як визначити, що дані в файлі закінчилися?
9.
Як прочитати построково файл?
10.
Функції модуля OS для роботи з файлом.
11.
Функції модуля OS для роботи з каталогом.
7.2 Узагальнене формулювання завдання до лабораторної роботи
1.
Створити текстовий файл в текстовому редакторі, якщо в
завданні не обумовлено інше.
2.
Організувати перегляд вмісту файлу і виконання дій
відповідно до умови індивідуального завдання.
168
3.
Забезпечити збереження всіх отриманих результатів в новий
4.
Файл повинен мати не менше 10-15 рядків тексту.
5.
Допускається обмежити максимальну довжину рядка в тексті
файл.
80 символами.
6.
Допускається (якщо в індивідуальному завданні не обумовлено
інше) вважати, що слова поділяються пробілами, а розділові знаки
розглядати як літери.
7.
Допускається створювати при виконанні програми тимчасові
файли, які, однак, не повинні зберігатися після закінчення програми.
Варіанти завдань до лабораторної роботи
1. Є файл, в кожному рядку якого записано слово.
Визначити:
 кількість символів в слові, більше якого тільки в самому довгому слові;
 кількість слів, що починаються на букву «м»;
 чи є в файлі задане слово.
Списки не використовувати.
2. Дано рядок символів. Записати кожен його символ, починаючи з останнього,
в окремому рядку текстового файлу.
3. Отримати і записати в файл 15 випадкових цілих чисел з інтервалу [50, 100].
Список не використовувати.
4. Є список з 20 чисел, серед яких є від'ємні. Записати кожне від'ємне число на
окремому рядку текстового файлу. Додатковий список не використовувати.
5. Є файл, в кожному рядку якого записано слово.
Визначити:
 середню «довжину» слова;
169
 кількість слів, в яких більше п'яти символів;
 кількість символів в самому короткому слові;
 номер рядка, в якій записано перше найдовше слово.
Списки не використовувати.
6. Є файл, в кожному рядку якого записано кілька слів, розділених одним
пробілом. В кінці деяких рядків записана точка.
Визначити:
 кількість рядків, що закінчуються точкою;
 максимальне число слів в окремому рядку;
 загальна кількість всіх слів у файлі.
Списки не використовувати.
7. Є файл, в кожному рядку якого записано ціле число.
Визначити:
 суму всіх чисел;
 середнє арифметичне всіх чисел;
 суму чисел, записаних на 2-й, 4-й, 6-й, ... рядках;
 кількість парних чисел.
Списки не використовувати.
8. Є файл, в кожному рядку якого записано ціле число.
Визначити:
 середнє арифметичне від'ємних чисел;
 максимальне число в файлі;
 номер рядка, в якому записано перше мінімальне число файлу;
 чи є в файлі задане число.
Списки не використовувати.
9. Записати в текстовий файл квадрати чисел від 1 до 10 (кожен на окремому
рядку).
170
Список не використовувати.
10.Дано 10 назв міст. Записати їх в текстовий файл (кожна назва на окремому
рядку). Здійснити пошук міста в файлі.
Список не використовувати.
11.Вивести на екран построково текстовий файл, вставляючи в початок
кожного рядка його порядковий номер (він повинен займати 4 позиції) і
пробіл.
12. Зчитати з вхідного файлу літери до першої точки і записати їх (без точки) в
текстовий файл t, формуючи в ньому рядки по 40 літер (в останньому рядку літер
може бути і менше).
13. Описати функцію less (f) від непорожнього файлу f типу reals, яка підраховує
кількість елементів файлу f, менших середнього арифметичного всіх елементів
цього файлу.
14. Дан символьний файл f. У файлі не менше двох компонент. Визначити, чи є
два перших символу файлу цифрами. Якщо так, то встановити, чи є число,
утворене цими цифрами парним.
15. Є текстовий файл. Додати в нього рядок з дванадцяти рисочок (------------),
розмістивши його:
 після п'ятого рядка;
 після останнього з рядків, в яких немає пробілу. Якщо таких рядків
немає, то новий рядок повинен бути доданий після всіх рядків
наявного файлу. В обох випадках результат записати в інший файл.
16. Є текстовий файл.
Надрукувати:
 його перший рядок;
 його п'ятий рядок;
 його перші 5 рядків;
171
 його рядки з s1-го по s2-ий;
 весь файл.
17. Є текстовий файл.
Надрукувати:
 перший символ першого рядка;
 п'ятий символ першого рядка;
 перші 10 символів першого рядка;
 символи з s1-го по s2-й в першому рядку;
 перший символ другого рядка;
 k-й символ n-го рядка.
18. Дан файл f, компоненти якого є цілими числами. Жодна з компонент файлу
не дорівнює нулю. Файл f містить стільки ж від'ємних чисел, скільки і додатних.
Використовуючи допоміжний файл h, переписати компоненти файлу f в файл g
так, щоб у файлі g числа йшли в наступному порядку: два додатних два
від'ємних, два додатних, два від'ємних і т.д. (Передбачається, що число
компонент в файлі f ділиться на 4).
19. Дан файл f, компоненти якого є цілими числами. Знайти кількість подвоєних
непарних чисел серед компонент.
20. Дан файл f, компоненти якого є цілими числами. Ніяка з компонент файлу не
дорівнює нулю. Файл f містить стільки ж від'ємних чисел, скільки і додатних.
Використовуючи допоміжний файл h, переписати компоненти файлу f в файл g
так, щоб у файлі g спочатку йшли непарні потім парні числа.
21. Дан файл f, компоненти якого є цілими числами. Ніяка з компонент файлу не
дорівнює нулю. Файл f містить стільки ж від'ємних чисел, скільки і додатних.
Використовуючи допоміжний файл h, переписати компоненти файлу f в файл g
так, щоб у файлі g не було двох сусідніх чисел з одним знаком.
172
22. З тексту програми, що складається з букв і чисел, вибрати все числа (цілі і
дійсні) і записати їх у файл g у вигляді: число 1 - номер рядка, число 2 - номер
рядка і так далі.
23. З текстового файлу видалити всі слова, що містять від трьох до п'яти
символів, але при цьому з кожного рядка має бути видалено тільки парна
кількість таких слів.
24. У файлі міститься текстовий рядок. Визначити частоту повторюваності
кожної букви в тексті і вивести їх.
25. У текстовий файл занесені пари чисел, розділених пробілом (кожна пара
чисел - в новому рядку). Розглядаючи кожну пару як координати точок на
площині, знайти найбільшу і найменшу відстань між цими точками.
26. Нехай текстовий файл t розбитий на непусті рядки. Описати функцію count
(t) для підрахунку числа рядків, які:
 починаються з літери d;
 закінчуються літерою z;
 починаються і закінчуються однією і тією ж літерою;
 складаються з однакових літер.
27. Починаючи пошук з числа 1000, знайти перші 10 простих чисел і записати
кожне з них на окремому рядку текстового файлу.
Список не використовувати.
28. Записати в текстовий файл квадрати чисел від 1 до 10 (кожен на окремому
рядку).
Список не використовувати.
173
ВИНЯТКИ В PYTHON. КОНСТРУКЦІЯ TRY - EXCEPT ДЛЯ ОБРОБКИ
ВИНЯТКІВ.
Винятки (exceptions) - ще один тип даних в Python. Винятки необхідні для
того, щоб повідомляти програмісту про помилки. Найпростіший приклад
винятку - поділ на нуль:
>>>100/0
Traceback (mostrecentcalllast):
File "", line 1, in
100/0
ZeroDivisionError: division by zero
У цьому прикладі інтерпретатор повідомляє про те, що він впіймав виняток
і надрукував інформацію (Traceback (mostrecentcalllast)).
Далі ім'я файлу (File ""). Ім'я пусте, тому що програма виконується в
інтерактивному режимі, рядок в файлі (line 1);
Вираз, в якому сталася помилка (100/0).
Назва винятку (ZeroDivisionError) і короткий опис винятку (divisionbyzero).
Зрозуміло, можливі й інші винятки:
>>>2+'1'
Traceback (most recent call last):
File "",line 1,in
2+'1'
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>>int('qwerty')
Traceback (most recent call last):
File "",line 1,in
int('qwerty')
ValueError: invalid literal for int() with base 10: 'qwerty'
У цих двох прикладах генеруються винятки TypeError і ValueError
відповідно. Підказки дають повну інформацію про те, де породжений виняток, і
з чим це пов'язано.
Представлена ієрархія вбудованих в Python винятків.
BaseException –базовий виняток, від якого беруть початок всі інші.
174
SystemExit –виняток, що породжується функцією sys.exit при виході з
програми.
KeyboardInterrupt –породжується при перериванні програми користувачем
(зазвичай сполучення клавіш Ctrl+C).
GeneratorExit –породжується при виклику методу close об'єкту generator.
Exception –а ось тут вже закінчуються повністю системні виключення (які
краще не чіпати) і починаються звичайні, з якими можна працювати.
StopIteration –породжується вбудованою функцією next, якщо в ітераторі
більше немає елементів.
ArithmeticError –арифметична помилка.
FloatingPointError –породжується при невдалому виконанні операції з
плаваючою комою. На практиці зустрічається нечасто.
OverflowError –виникає, коли результат арифметичної операції занадто
великий для представлення. Не з'являється при звичайній роботі з цілими
числами (так як Python підтримує довгі числа), але може виникати в деяких
інших.
ZeroDivisionError –ділення на нуль.
AssertionError –вираз у функції assert помилковий.
AttributeError –об'єкт не має даного атрибута (значення або методу).
BufferError –операція, пов'язана з буфером, не може бути виконана.
EOFError –функція натрапила на кінець файлу і не змогла прочитати те, що
хотіла.
ImportError –не вдалося імпортування модуля або його атрибута.
LookupError –некоректний індекс або ключ.
IndexError –індекс не входить в діапазон елементів.
KeyError –неіснуючий ключ (в словнику, множині або іншому об'єкті).
MemoryError –недостатньо пам'яті.
NameError –не знайдено змінної з таким ім'ям.
UnboundLocalError –зроблено посилання на локальну змінну у функції, але
змінна не визначена раніше.
175
OSError –помилка, пов'язана з системою.
BlockingIOError
ChildProcessError –невдача при операції з дочірнім процесом.
ConnectionError –базовий клас для винятків, пов'язаних з підключеннями.
BrokenPipeError
ConnectionAbortedError
ConnectionRefusedError
ConnectionResetError
FileExistsError –спроба створення файлу або директорії, яка вже існує.
FileNotFoundError –файл або директорія не існує.
InterruptedError –системний виклик перерваний вхідним сигналом.
IsADirectoryError –очікувався файл, але це директорія.
NotADirectoryError –очікувалася директорія, але це файл.
PermissionError –не вистачає прав доступу.
ProcessLookupError –вказаного процесу не існує.
TimeoutError –закінчився час очікування.
ReferenceError –спроба доступу до атрибуту зі слабким посиланням.
RuntimeError –виникає, коли виняток не попадає ні під одну з інших категорій.
NotImplementedError –виникає, коли абстрактні методи класу вимагають
перевизначення в дочірніх класах.
SyntaxError –синтаксична помилка.
IndentationError –неправильні відступи.
TabError –змішування у відступах табуляції і пробілів.
SystemError –внутрішня помилка.
TypeError –операція застосована до об'єкту невідповідного типу.
ValueError –функція отримує аргумент правильного типу, але некоректного
значення.
UnicodeError –помилка, пов'язана з кодуванням / розкодуванням unicode в
рядках.
UnicodeEncodeError –виняток, пов'язаний з кодуванням unicode.
176
UnicodeDecodeError – виняток, пов'язаний з декодуванням unicode.
UnicodeTranslateError –виняток, пов'язаний з перекладом unicode.
Warning – попередження.
Тепер, знаючи, коли і за яких обставин можуть виникнути виключення,
можна їх обробляти. Для обробки виключень використовується конструкція try except.
Перший приклад застосування цієї конструкції:
>>> try:
...
k=1/0
... except ZeroDivisionError:
...
k=0
...
>>> print(k)
0
У блоці try виконується інструкція, яка може породити виняток, а у блоці
except− перехоплюється. При цьому перехоплюються як саме виняток, так і його
нащадки. Наприклад, перехоплюючи ArithmeticError, також перехоплюються
FloatingPointError, OverflowError і ZeroDivisionError.
>>>
>>> try:
...
k=1/0
... except ArithmeticError:
...
k=0
...
>>> print(k)
0
Також можлива інструкція except без аргументів, яка перехоплює взагалі
все (і переривання з клавіатури, і системний вихід і т. д.). Тому у такій формі
інструкція except практично не використовується, а використовується except
Exception. Однак найчастіше перехоплюють виключення по одному, для
спрощення налагодження (раптом буде здійснена помилка, а except її
перехопить).
177
Ще дві інструкції − це finally і else. Finally виконує блок інструкцій у будьякому випадку, чи було виключення, чи ні (застосовні, коли потрібно неодмінно
щось зробити, наприклад, закрити файл). Інструкція else виконується у тому
випадку, якщо виключення не було.
>>> f = open('1.txt')
>>> ints = []
>>>try:
...
for line in f:
...
ints.append(int(line))
... except ValueError:
...
print.'Це не число. Виходимо ')
... except Exception:
...
print ('Цещощетаке?' )
... else:
...
print.'Все добре. ')
... finally:
...
f.close()
...
print('Язакривфайл.')
...
#Саме у такому порядку: try, група except, потім else, і тільки потім finally.
...Це не число. Виходимо.
Я закрив файл.
178
РЕКОМЕНДОВАНА ЛІТЕРАТУРА
1. Лутц М.Изучаем Python, 4-е издание. – Пер. с англ. – СПб.: Символ-Плюс,
2011. – 1280 с., ил.ISBN 978-5-93286-159-2
2. Любанович Б. Простой Python. Современный стиль программирования:
/Любанович Б.  СПб.: Питер, 2016.  480 с.
3. Саммерфилд М. Программирование на Python 3. Подробное руководство. –
Пер. с англ. – СПб.: Символ_Плюс, 2009. – 608 с., ил.
4. Федоров Д.Ю. Основы программирования на примере языка Python: учебное
пособие/ Д.Ю.Федоров.  СПб., 2016.  176 с.
5. Хахаев И.А. Практикум по алгоритмизации и программированию на Python: /
И.А. Хахаев  М. : Альт Линукс, 2010.  126 с.: ил.  (Библиотека ALT Linux).
6. http://pep8.ru/doc/tutorial-3.1/ Учебник по языку Python 3.1
7. http://pythonz.net/references/named/standartnaya-biblioteka/
179
Додаток 1. Глосарій
Основні поняття і визначення
Надалі часто доведеться використовувати терміни, пов'язані з процесом
розробки та функціонування програм, тому тут наведено короткий словничок,
щоб уже не повертатися до проблеми визначень. Для складання цього словника
використані у основному матеріали сайту «Глоссарий.ру» (http://glossary.ru).
Алгоритм
Алгоритм − точний припис виконавцю здійснити певну послідовність дій для
досягнення поставленої мети за кінцеве число кроків.
Дані
Дані − відомості:
отримані шляхом вимірювання, спостереження, логічних або арифметичних
операцій;представлені у формі, придатній для постійного зберігання, передачі та
автоматизованої) обробки.
Тип даних
Тип даних − характеристика набору даних, яка визначає:
− діапазон можливих значень даних з набору;
− допустимі операції, які можна виконувати над цими значеннями;
− спосіб зберігання цих значень у пам'яті.
розрізняють:
− прості типи даних: цілі, дійсні числа, символи, рядки, логічні величини;
− складові типи даних: масиви, файли та ін.
Програма
Програма − дані, призначені для управління конкретними компонентами
системи обробки інформації з метою реалізації певного алгоритму.
Алгоритмічна мова (мова програмування)
Мова програмування − штучна (формальна) мова, призначена для запису
алгоритмів. Мова програмування задається своїм описом і реалізується у вигляді
спеціальної програми: компілятора або інтерпретатора.
Транслятор мови програмування
180
Транслятор − у широкому сенсі − програма, яка перетворює текст, написаний на
одній мові, у текст на іншій мові.
Транслятор − у вузькому сенсі − програма, яка перетворює програму,
написану на одному (вхідній) мові у програму, представлену на іншому
(вихідній) мові.
Транслятор мови програмування − програма, яка перетворює початковий
текст програми на мові програмування у машинну мову обчислювальної
системи, на якій ця програма повинна виконуватися.
Інтерпретатор
Інтерпретатор − транслятор, здатний паралельно переводити і виконувати
програму, написану на алгоритмічній мові високого рівня.
Компілятор
Компілятор − програма, яка перетворює текст, написаний на алгоритмічній мові,
у програму, що складається з машинних команд. Компілятор створює закінчений
варіант програми на машинній мові.
Константа
Константа − у програмуванні − елемент даних, який займає місце у пам'яті, має
ім'я і певний тип, причому його значення ніколи не змінюється.
Змінна
Змінна − у мовах програмування − іменована частина пам'яті, у яку можуть
поміщатися різні значення. Причому у кожен момент часу змінна має єдине
значення (або єдиний набір значень). У процесі виконання програми значення
змінної може змінюватися.Тип змінних визначається типом даних, які вони
представляють.
Підпрограма
Підпрограма − самостійна частина програми, яка розробляється незалежно від
інших частин і потім викликається по імені.
Функція
Підпрограма, яка на основі деяких даних (аргументів функції) обчислює
значення деякої змінної («функція повертає значення»).
181
Об'єкт
Поняття об'єктно−орієнтованого програмування, програмний модуль, який
об'єднує у єдине ціле дані і програми, що маніпулюють даними. Об'єкт
характеризується властивостями, які є параметрами об'єкта і методами, які
дозволяють впливати на об'єкт і його властивості.
Метод
Дія у вигляді процедури, яка виконується об'єктом (іноді говорять виконується
над об'єктом).
Ідентифікатор
Ідентифікатор − символьне ім'я змінної або підпрограми, яке однозначно
ідентифікує їх у програмі.
Вираз
Вираз − конструкція на мові програмування, призначена для виконання
обчислень. Вираз складається з операндів, об'єднаних знаками операцій.
Розрізняють арифметичні, логічні і символьні вирази.
Операнд
Операнд − константа, змінна, функція, вираз і інший об'єкт мови програмування,
над яким проводяться операції.
Арифметична операція
Арифметична операція − обчислювальна операція над числами.У багатьох мовах
програмування визначені двомісні арифметичні операції: додавання, віднімання,
множення, ділення, ділення без остачі, обчислення залишку від ділення.
Логічна операція
Логічна операція − операція над логічними («булевського») операндами,
приймають значення «істина» або «хибність». Найбільш поширеними є такі
операції:
– багатомісне роз'єднання;
– багатомісне логічне множення;
– одномісне логічне заперечення.
182
(«Багатомісна» операція означає, що у ній може два і більше операндів, а у
«одномісній» або «унарній» операції бере участь лише один операнд).
Операція відношення
Операція відношення здійснює порівняння двох величин. Результат операції
відношення є «булева» змінна, що приймає значення «істина» (true або логічна
1) або «хибність» (false або логічний 0).
Масив (масив даних)
Сукупність, як правило, однотипних даних, кожне з яких ідентифікується з ім'ям
масиву та індексом (індексами).Залежно від кількості індексів масиви бувають
одномірні (лінійні), двомірні і т.д.
Індекс
Номер (або номера, якщо масив даних багатовимірний), що додається до імені
масиву, щоб ідентифікувати кожен елемент даного масиву.Наприклад, а [1, 3]
означає, що визначений елемент двовимірного масиву а з індексом 1,3 (рядок −
1, стовпець − 3).
Присвоєння
Операція запису значення у змінну. У багатьох мовах програмування визначено
оператор присвоювання. Якщо у змінну записується нове значення, старе
стирається.
Цикл
Цикл (циклічні обчислення) означають багаторазове виконання одних і тих же
операцій. Залежно від завдання розрізняються цикли зі змінною (з лічильником,
з відомою кількістю повторень) і цикли з умовою (цикл повторюється, поки не
виконається умова завершення циклу).
Зациклення
Для циклів з умовою − ситуація, при якій умова завершення циклу ніколи не
виконується.
183
Додаток 2. Вбудовані функції
Вбудовані функції, які виконують перетворення типів
bool (x)− перетворення до типу bool, що використовує стандартну процедуру
перевірки істинності. Якщо х є помилковим або пропущено, то повертається
значення false, у іншому випадку вона повертає true.
bytearray ([джерело [, кодування [помилки]]]) − перетворення до bytearray.
Bytearray− змінна послідовність цілих чисел у діапазоні 0≤X <256. Викликана
без аргументів, повертає порожній масив байт.
bytes ([джерело [, кодування [помилки]]]) − повертає об'єкт типу bytes, який є
незмінною послідовністю цілих чисел у діапазоні 0≤X <256. Аргументи
конструктора інтерпретуються як для bytearray ().
complex ([real [, imag]]) − перетворення до комплексного числа.
dict ([object]) − перетворення до словника.
float ([x]) − перетворення до числа з плаваючою крапкою. Якщо аргумент не
вказано, повертається 0.0.
frozenset ([послідовність]) − повертає незмінну множину.
int ([object], [основа системи числення]) − перетворення до цілого числа.
list ([object]) − створює список.
memoryview ([object]) − створює об'єкт memoryview.
object ()− повертає невиразний об'єкт, який є базовим для всіх об'єктів.
range ([start = 0], stop, [step = 1]) − арифметична прогресія від start до stop з кроком
step.
set ([object]) − створює множина.
slice ([start = 0], stop, [step = 1]) − об'єкт зрізу від start до stop з кроком step.
str ([object], [кодування], [помилки]) − строкове представлення об'єкту.
Використовує метод __str__.
tuple (obj) − перетворення до кортежу.
Інші вбудовані функції
abs (x) − повертає абсолютну величину (модуль числа).
184
all (послідовність) − повертає true, якщо всі елементи істинні або послідовність
порожня.
any (послідовність) − повертає true, якщо хоча б один елемент − істина. Для
порожньої послідовності повертає false.
ascii (object) − Як repr (), повертає рядок, що містить представлення об'єкту, але
замінюючи не-ASCII символи на екрановані послідовності.
bin (x) − перетворення цілого числа у двійковий рядок.
callable (x) − повертає true для об'єкту, що підтримує виклик (як функції).
chr (x) − повертає Односимвольний рядок, код символу якого дорівнює x.
classmethod (x) − представляє зазначену функцію методом класу.
compile (source, filename, mode, flags = 0, dont_inherit = false) −компіляція у
програмний код, який згодом може виконатися функцією eval або exec. Рядок не
повинен містити символів повернення каретки або нульові байти.
delattr (object, name) − видаляє атрибут з ім'ям 'name'.
dir ([object]) − список імен об'єкту, а якщо об'єкт не вказано, список імен у
поточній локальній області видимості.
divmod (a, b) − повертає частку і залишок від ділення a на b.
enumerate (iterable, start = 0) − застосовується для ітеріруемих колекцій (рядки,
списки, словники та ін.) і створює об'єкт, який генерує кортежі, що складаються
з двох елементів − індексу елемента і самого елемента.
eval (expression, globals = None, locals = None) − виконує рядок програмного коду.
exec (object [, globals [, locals]]) − виконує програмний код на Python.
filter (function, iterable) − повертає ітератор з тих елементів, для яких function
повертає істину.
format (value [, format_spec]) − форматування (зазвичай форматування рядка).
getattr (object, name, [default]) − отримує атрибут об'єкту або default.
globals () − словник глобальних імен.
hasattr (object, name) − чи має об'єкт атрибут з ім'ям 'name'.
hash (x) − повертає хеш вказаного об'єкту.
help ([object]) − виклик вбудованої довідкової системи.
185
hex (х) − перетворення цілого числа у шістнадцятковий рядок.
id (object) − повертає "адресу" об'єкту. Це ціле число, яке гарантовано буде
унікальним і постійним для даного об'єкту протягом терміну його існування.
input ([prompt]) − повертає введений користувачем рядок. prompt− підказка
користувачеві.
isinstance (object, ClassInfo) −істина, якщо об'єкт є екземпляром ClassInfo або
його підкласом. Якщо об'єкт не є об'єктом даного типу, функція завжди повертає
хибність.
issubclass (клас, ClassInfo) − істина, якщо клас є підкласом ClassInfo. Клас
вважається подклассом себе.
iter (x) − повертає об'єкт ітератора.
len (x) − повертає число елементів у зазначеному об'єкті.
locals () − словник локальних імен.
map (function, iterator) − итератор, отриманий після застосування до кожного
елементу послідовності функції function.
max (iter, [args ...] * [, key]) − максимальний елемент послідовності.
min (iter, [args ...] * [, key]) − мінімальний елемент послідовності.
next (x) − повертає наступний елемент ітератора.
oct (х) − перетворення цілого числа у вісімковий рядок.
open (file, mode = 'r', buffering = None, encoding = None, errors = None, newline =
None, closefd = True) − відкриває файл і повертає відповідний потік.
ord (с) − код символу.
pow (x, y [, r]) − (x ** y)% r.
reversed (object) − итератор з розгорнутого об'єкту.
repr (obj) − представлення об'єкту.
print ([object, ...], *, sep = "", end = '\ n', file = sys.stdout) − друк.
property (fget = None, fset = None, fdel = None, doc = None)
round (x [, n]) − округлення до n знаків після коми.
setattr (об'єкт, ім'я, значення) − встановлює атрибут об'єкту.
sorted (iterable [, key] [, reverse]) − відсортований список.
186
staticmethod (function) −статичний метод для функції.
sum (iter, start = 0) −сума членів послідовності.
super ([тип [, об'єкт або тип]]) −доступ до батьківського класу.
type (object) −повертає тип об'єкту.
type (name, bases, dict) −повертає новий екземпляр класу name.
vars ([object]) −словник з атрибутів об'єкту. За замовчуванням − словник
локальних імен.
zip (* iters) −итератор, який повертає кортежі, що складаються з відповідних
елементів аргументів-послідовностей.
187
Додаток 3. Ключові слова
false− хибність.
true− правда.
None− "порожній" об'єкт.
and− логічне І.
with / as− менеджер контексту.
assert умова − збуджує виключення, якщо умова помилкова.
break− вихід з циклу.
class − призначений для користувача тип, що складається з методів і атрибутів.
continue− перехід на наступну ітерацію циклу.
def− визначення функції.
del− видалення об'єкту.
elif−інакше, якщо.
else−див. for / elseабоif / else.
except−перехопитивиключення.
finally−вкупізінструкцієюtry,
виконуєінструкціїнезалежновідтого,
чибуловиключеннячині.
for−циклfor.
from− імпорт декількох функцій з модуля.
global− дозволяє зробити значення змінної, присвоєне їй всередині функції,
доступним і за межами цієї функції.
if− якщо.
import− імпорт модуля.
in− перевірка на входження.
is− чи посилаються 2 об'єкти на одне і те ж місце у пам'яті.
lambda− визначення анонімної функції.
nonlocal− дозволяє зробити значення змінної, присвоєне їй всередині функції,
доступним у охоплюючою інструкції.
not− логічне НЕ.
or− логічне АБО.
188
pass− нічого не робляча конструкція.
raise− збудити виключення.
return− повернути результат.
try− виконати інструкції, перехоплюючи виключення.
while− цикл while.
yield− визначення функції-генератора.
189
Додаток 4. Операції в мові програмування Python
У мові програмування Python існують такі типи операцій:
– Арифметичні операції
– Операції порівняння (реляційні)
– Операції присвоювання
– Побітові операції
– Логічні операції
– Операції членства (Membership operators)
– Операції тотожності (Identity operators)
Арифметичні операції у Python:
Операція
Опис
+
Додавання - Підсумовує значення
ліворуч і праворуч від оператора
-
*
/
%
**
//
Приклади
15 + 5 в результаті буде 20
13.4 + 7 в результаті буде 20.4
Віднімання - Віднімає правий операнд 15 – 5в результаті буде 10
із лівого
13.4 - 7 в результаті буде 6.4
Множення - Перемножує операнди
5 * 5 в результаті буде 25
7 * 3.2 в результаті буде 22.4
Ділення - Ділить лівий операнд на
правий
15 / 5 в результаті буде 3
5 / 2 в результаті буде 2
5.0 / 2 в результаті буде 2.5 (Для
"правильного" результату хоча б
один операнд повинен бути float)
6 % 2 в результаті буде 0
Ділення по модулю - Ділить лівий
7 % 2 в результаті буде 1
операнд на правий і повертає залишок.
13.2 % 5 в результатібуде 3.2
Піднесення до степеня - підносить
лівий операнд у степінь правого
5 ** 2 в результаті буде 25
2 ** 3 в результаті буде 8
-3 ** 2 в результаті буде -9
Цілочисельне ділення - Ділення у
12 // 5 в результаті буде 2
якому повертається тільки ціла частина
4 // 3 в результаті буде 1
результату. Частина після коми
25 // 6 в результаті буде 4
відкидається.
190
Операції порівняння у Python:
Операція
Опис
Приклади
==
Перевіряє рівність операндів. Якщо
так, то умова стає істинною.
5 == 5 в результаті буде true
True == False в результаті будеfalse
"hello" == "hello" в результаті буде true
!=
Перевіряє рівність операндів. Якщо
ні, то умова стає істинною.
12 != 5 в результаті буде true
False != False в результаті буде false
"hi" != "Hi" в результаті буде true
<>
Перевіряє рівність операндів. Якщо
ні, то умова стає істинною.
12 <> 5 в результаті буде true.Схоже на
оператор!=
>
Перевіряє,чи більше значення лівого 5 > 2 в результаті буде true.
операнда, ніж значення правого. Якщо True > False в результаті буде true.
так, то умова стає істинною.
"A" > "B" в результаті буде false.
<
Перевіряє,чи менше значення лівого 3 < 5 в результаті буде true.
операнда, ніж значення правого. Якщо True < False в результаті буде false.
так, то умова стає істинною.
"A" < "B" в результаті буде true.
>=
Перевіряє, більше або дорівнює
1 >= 1 в результаті буде true.
значення лівого операнда, ніж
23 >= 3.2 в результаті буде true.
значення правого. Якщо так, то умова
"C" >= "D" в результаті буде false.
стає істинною.
<=
Перевіряє, менше або дорівнює
4 <= 5 в результаті буде true.
значення лівого операнда, ніж
0 <= 0.0 в результаті буде true.
значення правого. Якщо так, то умова
-0.001 <= -36 в результаті буде false.
стає істинною.
191
Операції присвоювання у Python:
Операція
Опис
Приклади
=
Присвоює значення правого операнда
лівому.
+=
с=5
Додасть значення правого операнда до
а=2
лівого і присвоїть цю суму лівому
с += арівносильно: с = с + а. с
операнду.
дорівнює7
-=
с=5
Віднімає значення правого операнда
а=2
від лівого і присвоює результат лівому
с -= а рівносильно: с = с - а. с дорівнює
операнду.
3
c = 23 присвоюєзмінній с значення 23
*=
Помножує правий операнд на лівий і
присвоює результат лівому операнду.
с=5
а=2
с *= а рівносильно: с = с * а. c
дорівнює10
/=
Ділить лівий операнд на правий і
присвоює результат лівому операнду.
с = 10
а=2
с /= а рівносильно: с = с / а. c дорівнює5
%=
Ділить по модулю операнди і
присвоює результат лівому.
с=5
а=2
с %= а рівносильно: с = с % а. c
дорівнює1
**=
Підносить лівий операнд у ступінь
правого і присвоює результат лівому
операнду.
с=3
а=2
с **= а рівносильно: с = с ** а. c
дорівнює9
//=
Виконує цілочисельне ділення лівого
операнда на правий і присвоює
результат лівому операнду.
с = 11
а=2
с //= а рівносильно: с = с // а. c
дорівнює5
192
Побітові операції у Python:
Побітові операції призначені для роботи з даними у бітовому (двійковому)
форматі. Припустимо, що у нас є два числа a = 60; і b = 13. У двійковому форматі
вони будуть мати наступний вигляд:
a = 0011 1100
b = 0000 1101
Операція
Опис
Приклади
&
Бінарний "І" оператор, копіює біт у
(a & b) результат 12, у двійковому
результат тільки, якщо біт присутній у
форматі 0000 1100
обох операндах.
|
Бінарний "АБО" оператор копіює біт,
якщо той присутній, хоча б у одному
операнді.
^
Бінарний "Виключне АБО" оператор
копіює біт тільки, якщо біт присутній у (a ^ b) результат 49, у двійковому
одному з операндів, але не у обох
форматі0011 0001
відразу.
~
Бінарний компліментарний оператор. Є
унарним (тобто йому потрібен тільки
(~a ) результат -61,у двійковому
один операнд) змінює біти на зворотні,
форматі 1100 0011.
там де була одиниця стає нуль і
навпаки.
<<
Побітовий зсув вліво. Значення лівого
операнда "зсувається" вліво на
кількість бітів, зазначених у правому
операнді.
>>
Побітовий зсув вправо. Значення
лівого операнда "зсувається" вправо на a >> 2 результат 15, у двійковому
кількість бітів, зазначених у правому
форматі0000 1111
операнді.
(a | b) результат 61, у двійковому
форматі0011 1101
a << 2 результат 240, у двійковому
форматі1111 0000
193
Логічні операції у Python:
Операція
and
Опис
Логічний оператор "І". Умова буде істинною,
якщо обидва операнда істинні.
Приклади
true and true дорівнює true.
true and false дорівнює false.
false and true дорівнює false.
false and falseдорівнює false.
or
true or true дорівнює true.
Логічний оператор "АБО". Якщо хоча б один із
true or false дорівнює true.
операндів істинний, то і весь вираз буде істинним. false or true дорівнює true.
false or falseдорівнює false.
not
Логічний оператор "НЕ". Змінює логічне значення not true дорівнює false.
операнда на протилежне.
not false дорівнює true.
Операції членства у Python:
В додаток до перерахованих операторів, у Python присутні, так звані,
операції членства, призначені для перевірки на наявність елемента у складених
типах даних, таких, як рядки, списки, кортежі або словники:
Оператор
in
not in
Опис
Приклади
Повертає істину, якщо елемент присутній у
послідовності, інакше повертає хибність.
"cad" in "cadillac"
повернеtrue.
1 in [2,3,1,6] поверне true.
"hi" in {"hi":2,"bye":1}
поверне true.
2 in {"hi":2,"bye":1} поверне
false (у словниках
перевіряється наявність у
ключах, а не у значеннях).
Повертає істину якщо елемента немає у
послідовності.
Результати протилежні
результатам оператора in.
194
Операції тотожності у Python:
Операції тотожності порівнюють розміщення двох об'єктів у пам'яті
комп'ютера.
Операція
is
is not
Опис
Повертає істину, якщо обидва операнда вказують на один об'єкт.
Приклади
x is y
поверне
истину,
якщо id(x)
дорівнює
id(y).
x is not y,
поверне
истину,якщо
Повертає хибність, якщо обидва операнда вказують на один об'єкт.
id(x) не
дорівнює
id(y).
195
Додаток 5. Функції і методи рядків.
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])
S.rfind(str,
[start],[end])
Пошук підрядка у рядку. Повертає номер першого
входження або -1
Пошук підрядка у рядку. Повертає номер останнього
входження або -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()
Перевірка, чи складається рядок із символів у нижньому
регістрі
Перевірка,чи складається рядок із символів у верхньому
регістрі
196
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(символ)
Повертає код символу.
chr(число)
S.capitalize()
S.center(width, [fill])
S.count(str,
[start],[end])
S.expandtabs([tabsize]
)
S.lstrip([chars])
Повертає односимвольний рядок, код символу якого
дорівнює числу.
Переводить перший символ рядку у верхній регістр, а всі
інші у нижній
Повертає відцентрований рядок, по краях якого стоїть
символ fill (пробіл за замовчуванням)
Повертаєкількістьнепересічнихвходженьпідрядкаудіапазоні
[початок, кінець] (0 ідовжинарядкузазамовчуванням)
Повертає копію рядку, у якого всі символи табуляції замінюються
одним або декількома пробілами, у залежності від поточного
стовпця. Якщо TabSize не вказано, розмір табуляції вважається
рівним 8 пробілам.
Видалення символів пробілів на початку рядку
S.rstrip([chars])
Видалення символів пробілів у кінці рядку
S.strip([chars])
Видалення символів пробілів на початку і у кінці рядку
S.partition(шаблон)
Повертає кортеж, що містить частину перед першим
шаблоном, сам шаблон, і частину після шаблону. Якщо шаблон не
знайдений, повертається кортеж, що містить сам рядок, а потім два
порожніх рядки.
S.rpartition(sep)
Повертає кортеж, що містить частину перед останнім
шаблоном, сам шаблон, і частину після шаблону. Якщо шаблон не
знайдений, повертається кортеж, що містить дві порожні рядки, а
потім сам рядок.
Переводить символи нижнього регістра у верхній, а
верхнього - у нижній
Першу букву кожного слова переводить у верхній регістр, а
всі інші у нижній
S.swapcase()
S.title()
197
S.ljust(width,
fillchar=" ")
Робить довжину рядка не меншою width, в разі потреби,
заповнюючи перші символи нулями
Робить довжину рядка не меншою width, в разі потреби,
заповнюючи останні символи символом fillchar
S.rjust(width,
fillchar=" ")
Робить довжину рядка не меншою width, в разі потреби
заповнюючи перші символи символом fillchar
S.zfill(width)
198
Додаток 6. Титульна сторінка лабораторної роботи
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ
«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
ІМЕНІ ІГОРЯ СІКОРСЬКОГО»
Факультет прикладної математики
Кафедра прикладної математики
Звіт
із лабораторної роботи №Х
із дисципліни «Основи програмування»
на тему
Тема лабораторної роботи
Виконав:
Керівник:
студент групи КМ-ХХ
асистент Громова В. В.
Іваненко І. І.
Київ — 20__
Download