20
1 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування Обчислювальна техніка та програмування – 2 Об'єктно-орієнтоване програмування ЛЕКЦІЯ 1 Мова програмування Python входить в п'ятірку по популярності в світі, тому знайти по ньому літературу не складе труднощів. На охочих стати програмістами обрушиться гора довідників і «кращих рекомендацій» по розробці додатків будь-якого рівня складності, але серед всіх цих книг новачкові буває складно розібратися, а перше знайомство з товстими довідниками по внутрішньому устрою Python може назавжди відлякати від заняття програмуванням. Ми вважаємо, що не слід звалювати на голови студентів відразу всю довідкову інформацію і безліч правил, які існують в мовах програмування - «не слід множити суще без необхідності». Деякі теми в лекціях спеціально довелося спростити, щоб у вступному курсі не вдаватися в зайві деталі, але у вік Інтернету пошук довідкової інформації не повинен скласти праці. 1.1. ОСНОВИ ОСНОВ Для того щоб навчитися плавати необхідно увійти в воду і почати пробувати гребти руками, допомагаючи собі ногами, потім поборів страх, відірватися від дна і поплисти. Є в цьому схожість з написанням програм. Можна прочитати товстий підручник, здати залік / іспит у вузі, але при цьому не навчитися написанню навіть простих програм. Скільки часу витрачати на навчання? Музиканти кажуть, що для досягнення майстерності володіння інструментом необхідно репетирувати по чотири години на день. Інструментом програміста є комп'ютер, тому коротко розглянемо його пристрій. Всі обчислення в комп'ютері виробляються центральним процесором. Файли з програмами зберігаються в постійній пам'яті (на жорсткому диску), а в момент виконання завантажуються в тимчасову (оперативну) пам'ять. Введення інформації в комп'ютер здійснюється за допомогою клавіатури (пристрої введення), а висновок - за допомогою монітора (пристрої виведення).

Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

1 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

Обчислювальна техніка

та програмування – 2 Об'єктно-орієнтоване програмування

ЛЕКЦІЯ 1

Мова програмування Python входить в п'ятірку по популярності в світі, тому знайти по

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

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

1.1. ОСНОВИ ОСНОВ

Для того щоб навчитися плавати необхідно увійти в воду і почати пробувати гребти руками, допомагаючи собі ногами, потім поборів страх, відірватися від дна і поплисти. Є в цьому схожість з написанням програм. Можна прочитати товстий підручник, здати залік / іспит у вузі, але при цьому не навчитися написанню навіть простих програм.

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

Інструментом програміста є комп'ютер, тому коротко розглянемо його пристрій. Всі обчислення в комп'ютері виробляються центральним процесором. Файли з програмами зберігаються в постійній пам'яті (на жорсткому диску), а в момент виконання завантажуються в тимчасову (оперативну) пам'ять. Введення інформації в комп'ютер здійснюється за допомогою клавіатури (пристрої введення), а висновок - за допомогою монітора (пристрої виведення).

Page 2: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

2 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

Комп'ютер здатний працювати тільки з двома видами сигналів: 1 або 0 (машинним кодом). Писати програми виду 1010101010010101010 для людини складно, мислення його влаштовано інакше, тому з'явилися програми-транслятори з мови програмування, зрозумілого людині, на машинну мову, зрозумілу комп'ютеру.

Мови програмування, які наближені до машинного рівня, називають мовами

низького рівня (наприклад, мова асемблера). Інший вид мов - мови високого рівня (наприклад, Python, Java, C #), ще більше наближені до мислення людини.

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

Раніше згадувалося, що початком спілкування з комп'ютером послужив машинний код. Потім в 50-ті роки двадцятого століття з'явився низькорівневу мову асемблера, найбільш наближений до машинного рівня. Він прив'язаний до процесора, тому його вивчення рівносильно вивченню архітектури процесора. На мові асемблера пишуть програми і сьогодні, він незамінний у випадку невеликих пристроїв (мікроконтролерів), що володіють дуже обмеженими ресурсами пам'яті.

Наступний етап - поява мови Фортран, що призначався для математичних обчислень. Згодом росла потреба в нових кадрах і необхідність в навчанні програмуванню.

Навчання на мовах асемблера або Фортране вимагало багато сил, тому в 60-70-ті роки з'являється плеяда мов для навчання: Basic, Pascal. Мова Pascal досі використовується в школах в якості основного мови навчання програмуванню.

В цей же час ведуться дослідження в області розробки операційних систем, що призводить до появи системи UNIX. Спочатку ця операційна система була написана на мові асемблера, що ускладнювало її модифікацію і вивчення, тоді Д. Рітчі розробив мову С для системного програмування і спільно з Б. Керніганом переписав систему UNIX на цій мові. Згодом операційна система UNIX набула широкого поширення (в наші дні більше відомі її клони GNU / Linux), а разом з нею - з'явилося безліч програмістів, для яких мова С став рідним. Написання програм на цій мові вимагає хорошої кваліфікації від програміста, тому що непомічена помилка здатна привести до серйозних наслідків в роботі програми. До сих пір мова С лідирує в якості мови для системного програмування.Следующий этап (80-ые годы) характеризуется появлением объектно- ориентированного программирования (ООП), которое должно было упростить создание крупных промышленных программ. Появляется ученый – Б. Страуструп, которому недостаточно было возможностей языка С, поэтому он

Page 3: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

3 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

расширяет этот язык путем добавления ООП. Новый язык получил название С++. У 90-ті роки з'являються персональні комп'ютери і мережу Інтернет, тому потрібні

нові технології і мови програмування. У цей момент набирає популярність мову Java, який дозволяє в найкоротші терміни почати писати великі додатки без побоювань що-небудь серйозно зіпсувати в системі. Мова Java створювався з оглядкою на С ++ і з перспективною розвитку мережі Інтернет. Дана мова характеризується перенесенням своїх програм, тобто написавши Java-програму на персональному комп'ютері, можна запустити її на кавомашині, якщо там присутній віртуальна машина Java.

Приблизно в один час з Java з'являється Python. Розробник мови - математик Гвідо ван Россум займався довгий час розробкою мови ABC, призначеного для навчання програмуванню. В одному з інтерв'ю він так відповів на питання про тип програмістів, для яких Python був би цікавий: «Я уявляв собі професійних програмістів в UNIX або UNIX-подібному середовищі. Керівництва для ранніх версій Python сповіщали щось на кшталт «Python закриває розрив між Сі і програмуванням оболонки», тому що саме це цікавило мене і моїх найближчих колег. Мені і в голову не приходило, що Python може стати гарною мовою для вбудовування в додатки, поки мене не стали питати про це. Те, що він виявився корисним для навчання засадам програмування в школі або коледжі, - щаслива випадковість, зумовлена багатьма характеристиками ABC, які я зберіг: ABC був спеціально призначений для навчання програмування непрограмістів». До Python ми ще повернемося, а поки продовжимо наш історичний екскурс.

З ростом мережі Інтернет було потрібно створювати динамічні сайти - з'явився серверний мова програмування PHP, який на сьогоднішній день є лідером при розробці веб-сайтів.

У 2000-ті роки спостерігається тенденція об'єднання технологій навколо великих корпорацій. У цей час отримує розвиток мову С # на платформі .NET.

Так що ж таке програма і які кроки потрібно виконати для її написання?

Page 4: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

4 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

На першому кроці у програміста є набір «сирих» даних. Це, наприклад, можуть бути розрізнені бухгалтерські звіти, статистика та ін. Ці відомості необхідно структурувати і помістити в комп'ютер. Порівняємо написання програми з приготуванням салату: є «сирі» овочі, які потрібно помити і порізати, тобто структурувати.

Потім, якщо завдання можна розбити на окремі невеликі підзадачі, то краще так і зробити. Вирішити невеликі завдання, переконатися, що вони працюють і об'єднати їх назад. Науковою мовою це називається аналізом і синтезом. З досвідом приходить вміння бачити і виділяти підзадачі.

Далі, програмістом реалізується алгоритм, тобто набір дій для обробки структурованих даних, виходячи з поставленого завдання. Зазначу, що правильний вибір структури даних впливає на створення (вибір) алгоритму. Міць мови програмування почасти криється в структурах даних, яке він надає для роботи.

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

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

1.2. ЗНАЙОМСТВО ІЗ МОВОЮ ПРОГРАМУВАННЯ PYTHON

Але Python це не іграшкова мова програмування, на якій тільки навчаються основам програмування, а потім про неї забувають! Її області застосування дуже розгалуджені:

1. Системне програмування. 2. Розробка програм з графічним інтерфейсом. 3. Розробка динамічних веб-сайтів. 4. Інтеграція компонентів. 5. Розробка програм для роботи з базами даних. 6. Швидке створення прототипів.

Page 5: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

5 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

7. Розробка програм для наукових обчислень. 8. Розробка ігор.

Що нам буде потрібно для виконання програм на мові Python? Перш, ніж відповісти на

це питання, розглянемо, як запускаються програми на комп'ютері. Виконання програм здійснюється операційною системою (Windows, Linux та ін.). До завдань операційної системи входить розподіл ресурсів (оперативної пам'яті та ін.) Для програми, заборона або дозвіл на доступ до пристроїв введення / виводу і. т.д.

Page 6: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

6 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

Для запуску програм на мові Python необхідна програма-інтерпретатор (віртуальна машина) Python. Дана програма приховує від Python-програміста всі особливості операційної системи, тому, написавши програму на Python в системі Windows, її можна запустити, наприклад, в GNU / Linux і отримати такий же результат.

Завантажити і встановити інтерпретатор Python можна абсолютно безкоштовно з офіційного сайту: http://python.org. Для роботи нам знадобиться інтерпретатор Python версії 3 або вище. Для навчання в ОС Linux знадобиться встановити редактор IDLE: sudo apt-get install idle3

Після установки програми запустіть інтерактивну графічну середу IDLE і дочекайтеся

появи запрошення для введення команд: Type "copyright", "credits" or "license()" for more information.

>>>

На самому початку навчання Python можна уявити, як звичайний інтерактивний калькулятор. В інтерактивному режимі IDLE знайдемо значення наступних математичних вираженій4. Після завершення набору вираження натисніть клавішу Enter для завершення введення і виведення результату на екран. >>> 3.0 + 6

9.0 >>> 4 + 9

13 >>> 1 - 5

-4 >>> _ + 6

2 >>>

Page 7: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

7 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

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

Якщо з якої-небудь причини зробити помилку при введенні команди, то Python повідомить про це: >>> a

Traceback (most recent call last):

File "<pyshell#0>", line 1, in <module>

a

NameError: name 'a' is not defined

>>>

Не бійтеся робити помилки! Python поправить і підкаже, на що слід звернути увагу. У математичних виразах як операнди можна використовувати цілі числа (1, 4, -5) або

дійсні («вещественные», «reals» (в програмуванні їх ще називають числами з плаваючою точкою): 4.111, -9.3. Математичні оператори, доступні над числами в Python:

Додавання +

Віднімання -

Ділення (в результаті

дійсне число)

/

Множення *

Ділення з округленням вниз //

Зведення в ступінь **

Остача від ділення %

>>> 5/3

1.6666666666666667

>>> 5//3

1

>>> 5%3

2

>>> 5**67

67762635780344027125465800054371356964111328125

>>>

Якщо один з операндів є дійсним числом, то в результаті вийде дійсне число. В якості вправи знайдіть значення виразу 2 + 56 * 5.0-45.5 + 55. При обчисленні математичних виразів Python дотримується пріоритету операцій:

>>> -2 ** 4

-16

>>> -(2 ** 4)

-16

>>> (-2) ** 4

16

Page 8: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

8 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

>>>

У Вас виникли сумніви щодо порядку обчислень буде не зайвим позначити пріоритет у вигляді круглих дужок.

Висловлюючись у термінах програмування, тільки що ми познайомилися з числовим типом данних (цілим типом int і речовим типом float), тобто безліччю числових значень і безліччю математичних операцій, які можна виконувати над даними значенням. Мова Python надає великий вибір вбудованих типів даних.

Розглянемо вираз y = x + 3 * 6, де y та x є змінними, які можуть містити значення числового типу. Мовою Python обчислити значення y при x дорівнює 1 можна наступним чином: >>> x = 1

>>> y = x + 3 * 6

>>> y

19

>>>

У виразі можна використовувати змінну, якщо раніше їй не було присвоєно значення - для Python такі змінні не визначені.

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

найменуванням. В якості імен змінних неможна використовувати ключові слова, які для Python мають певний сенс (ці слова підсвічуються в IDLE помаранчевим кольором):

False брехня from імпорт декількох функцій з модуля

True правда global дозволяє зробити значення змінної, присвоєне їй всередині функції, доступним і за межами цієї функції

None "порожній" об'єкт if якщо and логічне І import імпорт модуля with / as менеджер контексту in перевірка на входження assert збуджує виключення,

якщо умова помилкова is чи посилаються 2 об'єкти

на одне і те ж місце в пам'яті

break вихід з циклу lambda визначення анонімної функції

class призначений для користувача тип, що складається з методів і атрибутів

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

continue перехід на наступну ітерацію циклу

not логічне НЕ

def визначення функції. or логічне АБО del видалення об'єкта pass нічого не робить

конструкція elif в іншому випадку, якщо raise порушити виняток else см. for / else або if / else return повернути результат

Page 9: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

9 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

except перехопити виняток try виконати інструкції, перехоплюючи виключення

finally укупі з інструкцією try, виконує інструкції незалежно від того, чи було виключення чи ні

while цикл while

for цикл for yield визначення функції генератора

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

Цельсієм в шкалу градусів за Фаренгейтом і назад. Формула перекладу з градусів за Цельсієм (TC) в градуси за Фаренгейтом (TF) має вигляд:

TF = 9/5 * TC + 32

Знайдемо значення TF при TC рівному 26. Створимо змінну з ім'ям cel, що містить значення цілочисельного типу 26. >>> cel = 26

>>> cel

26

>>> 9/5 * cel + 32

78.80000000000001

>>>

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

Раніше ми сказали, що Python - об'єктно-орієнтована мова програмування. В чому це виражається? У момент виконання присвоювання cel = 26 в пам'яті комп'ютера створюється об'єкт,

розташований за певною адресою (умовно позначимо його як id1), що має значення 26 цілочиельного типу int. Потім створюється змінна з ім'ям cel, якій присвоюється адреса об'єкта id1. Змінні в Python містять адреси об'єктів або можна сказати, що змінні посилаються на об'єкти. Постійно зберігаючи в голові цю модель, для спрощення будемо говорити, що змінна містить значення.

Обчислення наступного виразу в результаті призведе до привласнення змінної cel значення 72, тобто спочатку обчислюється права частина, потім результат присвоюється лівій частині. >>> cel = 26 + 46

>>> cel

72

>>>

Розглянемо трохи складніший приклад. Замість змінної diff підставить цілочисельне значення 20: >>> diff = 20

>>> double = 2 * diff

>>> double

Page 10: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

10 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

40

>>>

Після закінчення обчислень пам'ять для Python матиме такий вигляд:

Продовжимо обчислення. Дамо змінної diff значення 5 і подивимося вміст змінних

double і diff. >>> diff = 5

>>> double

40

>>> diff

5

>>>

У момент присвоювання змінної diff значення 5 в пам'яті створиться об'єкт за адресою id3, що містить цілочисельне значення 5. Після цього зміниться вміст змінної diff, замість адреси id1 туди запишеться адреса id3. Також Python побачить, що на об'єкт за адресою id1 більше ніхто не посилається і тому видалить його з пам'яті (виконає автоматичну збірку сміття).

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

У початківців програмістів часто виникає подив при вигляді наступних обчислень: >>> num = 20

>>> num = num * 3 # або скорочено: num *= 3

>>> num

60

>>>

Якщо згадати, що спочатку обчислюється права частина, то все легко пояснюється.

Page 11: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

11 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

Функція в Python є основою при написанні програм. З чим можна порівняти функцію?

Напрошується аналогія з «Чорним ящиком», коли ми знаємо, що надходить на вхід і що при цьому виходить на виході, а нутрощі «чорного ящика» часто бувають від нас приховані. Прикладом є банкомат.

На вхід банкомату надходить пластикова картка (пін-код, грошова сума), на виході ми очікуємо отримати запитувану суму. Нас не дуже сильно цікавить принцип роботи банкомату доти, поки він працює без збоїв.

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

Приклад виклику функції abs з аргументом -5 має вигляд:

>>> abs(-5)

9

>>> d = 1

>>> n = 3

>>> abs(d - n)

2

>>> abs(-9) + abs(5.6)

14.6

>>>

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

Розглянемо кілька популярних математичних функцій мови Python. pow (x, y) повертає значення x в ступені y. Еквівалентно записи x ** y.

>>> pow(4,5)

1024

>>>

round (number) повертає число з плаваючою точкою, округлене до 0 цифр після коми (за замовчуванням). Може бути викликана з двома аргументами:

round (number [, ndigits]), де ndigits - число знаків після коми. >>> round(4.56666)

5

>>> round(4.56666, 3)

4.567

Page 12: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

12 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

>>>

Крім складання складних математичних виразів Python дозволяє передавати результати виконання функцій в якості аргументів інших функцій без використання додаткових змінних:

На малюнку представлений приклад виклику і порядок обчислення виразів. У цьому прикладі на місці числових об'єктів (-2, 4.3) можуть перебувати виклики функцій або їх комбінації, тому вони теж обчислюються.

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

int повертає цілочисельний об'єкт, побудований з числа або строки, або 0, якщо

аргументи не передані. float повертає число з плаваючою точкою, побудоване з числа або рядки.

Розглянемо приклади: >>> int(5.6)

5

>>> int()

0

>>> float(5)

5.0

>>> float()

0.0

>>>

В якості вправи знайдіть значення наступних виразів: pow(abs(-5) + abs(-3), round(5.8))

int(round(pow(round(5.777, 2), abs(-2)), 1))

Звідки брати опис роботи функцій? Програмісти для цього використовують документацію. В Python документація для функції може бути викликана за допомогою функції help, на вхід якої передається ім'я функції: >>> help(abs)

Help on built-in function abs in module builtins:

abs(x, /)

Return the absolute value of the argument.

>>>

Page 13: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

13 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

Повернемося до формули переведення градусів за шкалою Фаренгейта (ТF) в градуси за шкалою Цельсія (TC):

TC = 5/9 * (TF - 32)

Зробимо кілька обчислень з використанням Python, де змінна deg_f буде містити значення в градусах за Фаренгейтом: >>> deg_f = 80

>>> deg_f

80

>>> 5/9 * (deg_f - 32)

26.666

>>> deg_f = 70

>>> 5/9 * (deg_f - 32)

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

В першу чергу, необхідно придумати ім'я функції, наприклад, назвемо функцію convert_co_cels. Постарайтеся, щоб ім'я було осмисленим (lena123 - поганий приклад для імені функції) і відображало сенс функції, згадайте про правила найменування змінних. Крім цього, не бажано, щоб ім'я вашої функції збігалося з іменами вбудованих функцій Python (вбудовані функції в IDLE підсвічуються фіолетовим кольором).

Уявімо, що функція з ім'ям convert_co_cels створена, тоді її виклик для значення 80 буде мати вигляд: convert_co_cels (80).

Page 14: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

14 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

Перейдемо безпосередньо до створення функції. Ключове слово def для Python означає, що далі йде опис функції. Після def вказується ім'я функції convert_co_cels, потім в дужках вказується параметр, якому буде присвоюватися значення при виконанні функції. Параметри функції - звичайні змінні, якими функція користується для внутрішніх обчислень. Змінні, оголошені всередині функції, називаються локальними і не видно поза функцією. Після символу «:» починається тіло функції. В інтерактивному режимі Python самостійно поставить отступ12 від краю екрану, тим самим позначивши, де починається тіло функції. Вираз, що стоїть після ключового слова return буде повертатися в якості результату виклику функції.

В інтерактивному режимі створення функції має такий вигляд (для завершення

введення функції необхідно два рази натиснути клавішу <Enter>, дочекавшись запрошення для введення команд): >>> def convert_co_cels(fahren):

return (fahren-32) * 5 / 9

>>> convert_co_cels(451)

232.77777777777777

>>> convert_co_cels(300)

148.88888888888889

>>>

Після того як функція створена, можна її викликати, передаючи в дужках різні аргументи.

Для закріплення створіть власні функції для обчислення наступних виразів:

x4 + 4x

y4 + 4x

Уважний читач помітив, що в інтерактивному режимі можна внести зміни в вираз, яке вже раніше було виконано. Доводиться повторно набирати вираз і його запускати. У разі великих програм зручно використовувати окремі файли з розширенням .py.

В меню IDLE виберете File > New File. З'явиться вікно текстового редактора, в якому можна набирати команди на мові Python.

Наберемо наступний код:

Page 15: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

15 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

a=5

print(a)

print(a+5)

В меню редактора виберемо Save As і збережемо файл в довільну директорію, вказавши ім'я myprog1.py. У старих версіях IDLE доводиться вручну прописувати розширення у файлу.

Щоб виконати програму в меню редактора виберемо Run -> Run Module (або натиснемо

<F5>). Результат роботи програми відобразиться в інтерактивному режимі (у мене вийшло так): >>>

============ RESTART: C:/Python35-32/myprog1.py ===========

5

10

>>>

Тут нам слід познайомитися з функцією print, яка відображає вміст змінних, переданих їй як аргументи. Згадайте, що в інтерактивному режимі ми просто набирали ім'я змінної, що призводило до висновку на екран її вмісту. Справа в тому, що Python в інтерактивному режимі самостійно підставляє виклик функції print, а в файлі нам доведеться робити це вручну.

Розберемося тепер, як створювати функції в окремому файлі і викликати їх. Створимо файл myprog.py, що містить наступний код (тіло функції повинно

відділятися чотирма пробілами): def f(x):

x = 2 * x

return x

Запустимо програму за допомогою F5. Побачимо, що в інтерактивному режимі програма виконалася, але нічого не вивела на екран. Правильно, адже ми не викликали функцію! =========== RESTART: C:/Python35-32/myprog.py ============

>>>

Після запуску програми в інтерактивному режимі викличемо функцію f з різними аргументами: >>> f(4)

8

>>> f(56)

112

>>>

Все працює! Тепер викличемо функцію f в файлі, але не забуваємо про print. Оновлена версія файлу myprog.py матиме вигляд: def f(x):

Page 16: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

16 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

x = 2 * x

return x

print(f(4)) # коментарі ігноруються Python

print(f(56))

Запустимо програму за допомогою F5 і побачимо, що в інтерактивному режимі відобразився результат! ======== RESTART: C:/Python35-32/myprog.py ==========

8

112

>>>

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

Розглянемо приклад. В окремий файл з ім'ям myprog.py помістимо наступний код:

a = 3 # глобальна змінна

print('глобальная переменная a = ', a)

y = 8 # глобальна змінна

print('глобальная переменная y = ', y)

def func():

print('func: глобальная переменная a = ', a)

y = 5 # локальна змінна

print('func: локальная переменная y = ', y)

func() # викликаємо функцію func

print('??? y = ', y) # буде виведена глобальна змінна

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

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

>>>

======= RESTART: C:/Python35-32/myprog.py =========

глобальная переменная a = 3

глобальная переменная y = 8

func: глобальная переменная a = 3

func: локальная переменная y = 5

??? y = 8

>>>

Усередині функції ми змогли звернутися до глобальної змінної a і вивести її значення на екран. Далі всередині функції створюється локальна змінна y, причому її ім'я збігається з ім'ям глобальної змінної - в цьому випадку при зверненні до y виводиться вміст локальної змінної, а глобальна залишається незмінною.

Як бути, якщо ми хочемо змінити вміст глобальної змінної всередині функції? Нижче

Page 17: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

17 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

показаний приклад такої зміни з використанням ключового слова global: x = 50 # глобальна змінна

def func():

global x # вказуємо, що x-глобальна змінна

print('x равно', x)

x = 2 # змінюємо глобальну змінну

print('Заменяем глобальное значение x на', x)

func()

print('Значение x составляет', x)

Часто функції використовуються для скорочення коду програми, наприклад, оголосивши функцію виду: def func(x):

с = 7

return x + 8 + с

Наступний код може бути замінений на три виклики функції з різними аргументами:

і У файлі не забуваємо викликати функцію print. Бувають випадки, коли наша функція нічого не приймає на вхід і нічого не

возвращает16 (не використовується ключове слово return). Приклад подібної функції: def print_hello():

print('Привет')

print('Hello')

print('Hi')

Бачимо, що всередині функції відбувається виклик print, тому в момент виклику функції print_hello ще раз викликати print не потрібно. Наступний приклад демонструє, що безліч викликів print можна замінити трьома викликами функції print_hello:

Насправді, якщо не вказати return, то Python поверне об'єкт None: >>> def f(x):

print(x**2 + 1)

Page 18: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

18 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

>>> f(2)

5

>>> 3*f(2)+1 # f(2) вернет объект None типа NoneType

5

Traceback (most recent call last):

File "<pyshell#14>", line 1, in <module>

3*f(2)+1

TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'

>>>

Для самостійної роботи. Функції Python

Розглянемо кілька корисних особливостей при роботі з функціями в Python. Імена функцій в Python є змінними, що містять адресу об'екта17 типу функція18, тому

цю адресу можна привласнити іншої змінної і викликати функцію з іншим ім'ям.

def summa(x, y):

return x + y

f = summa

v = f(10, 3) # викликаємо функцію з іншим ім'ям

Параметри функції можуть приймати значення за замовчуванням: def summa(x, y=2):

return x + y

a = summa(3) # замість y підставляється значення за замовчуванням

b = summa(10, 40) # тепер значення другого параметра дорівнює 40

Раніше ми сказали, що ім'я функції - звичайна змінна, тому можемо передати її в якості аргументу при виконанні функції: def summa(x, y):

return x + y

def func(f, a, b):

return f(a, b)

v = func(summa, 10, 3) # передаємо summa як аргумент

Цей приклад демонструє, як з функції func можна викликати функцію summa. Крім цього, в момент виклику функції можна присвоювати значення конкретних

параметрів (використовувати ключові аргументи):

Page 19: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

19 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

def func(a, b=5, c=10):

print('a равно', a, ', b равно', b, ', а c равно', c)

func(3, 7) # a=3, b=7, c=10

func(25, c=24) # a=25, b=5, c=24

func(c=50, a=100) # a=100, b=5, c=50

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

Page 20: Обчислювальна техніка та програмування – 2 · допомогою клавіатури (пристрої введення), а висновок

20 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування

Вправа 1.1 Створіть в окремому файлі функцію, що переводять градуси за шкалою Цельсія в

градуси за шкалою Фаренгейта за формулою: TF = 9/5 * TC + 32

Вправа 1.2 Створіть в окремому файлі функції, що обчислюють площу і периметр квадрата. Вправа 1.3 Напишіть функцію в окремому файлі, яка обчислює середнє арифметичне трьох

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

чисел. Задайте значення за замовчуванням, в момент виклику використовуйте ключові аргументи.