ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і...

20
1 Обчислювальна техніка та програмування 2. Об’єктно-орієнтоване програмування ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для обробки текстів: пошуку в тексті, заміни окремих частин тексту і т.д. Для роботи з текстом в Python передбачений спеціальний рядковий тип даних str. Python створює рядкові об'єкти, якщо текст помістити в одинарні або подвійні лапки: >>> 'hello' 'hello' >>> "Hello" 'Hello' >>> Без лапок Python розцінить текст як змінну і спробує вивести на екран її вміст (якщо така змінна була створена): >>> hello Traceback (most recent call last): File "<pyshell # 2>", line 1, in <module> hello NameError: name 'hello' is not defined >>> Можна створити порожній рядок: >>> '' '' >>> Для роботи з рядками в Python передбачена велика кількість вбудованих функцій, наприклад, len. Ця функція визначає довжину рядка, яка передається їй як аргумент. >>> help(len) Help on built-in function len in module builtins: len (obj, /) Return the number of items in a container. >>> len('Привіт!') 7 >>> Наприклад, якщо ми хочемо об'єднати кілька рядків в одну, Python дозволяє це зробити за допомогою операції конкатенації (звичайний символ + для рядків): >>> 'Привіт,' + 'земляни!' 'Привіт, земляни!' >>> Тут беруть свій початок дивовижні речі! Пам'ятайте, ми говорили, що операції

Upload: others

Post on 26-Jun-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

ЛЕКЦІЯ 2 2.1 Рядки і операції над ними

Python часто використовують для обробки текстів: пошуку в тексті, заміни окремих частин тексту і т.д. Для роботи з текстом в Python передбачений спеціальний рядковий тип даних str.

Python створює рядкові об'єкти, якщо текст помістити в одинарні або подвійні лапки: >>> 'hello'

'hello'

>>> "Hello"

'Hello'

>>>

Без лапок Python розцінить текст як змінну і спробує вивести на екран її вміст (якщо така змінна була створена): >>> hello

Traceback (most recent call last):

File "<pyshell # 2>", line 1, in

<module> hello

NameError: name 'hello' is not defined

>>>

Можна створити порожній рядок: >>> ''

''

>>>

Для роботи з рядками в Python передбачена велика кількість вбудованих функцій, наприклад, len. Ця функція визначає довжину рядка, яка передається їй як аргумент. >>> help(len)

Help on built-in function len in module builtins:

len (obj, /)

Return the number of items in a container.

>>> len('Привіт!')

7

>>>

Наприклад, якщо ми хочемо об'єднати кілька рядків в одну, Python дозволяє це зробити за допомогою операції конкатенації (звичайний символ + для рядків): >>> 'Привіт,' + 'земляни!'

'Привіт, земляни!'

>>>

Тут беруть свій початок дивовижні речі! Пам'ятайте, ми говорили, що операції

Page 2: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

залежать від типу даних? Над об'єктами певного типу можна робити тільки певні операції: числа - складати, множити і т.д. Так ось, для рядків символ + об'єднуватиме рядки, а для чисел - складати їх. А, що якщо скласти число і рядок? >>> 'Марс' + 5

Traceback (most recent call last):

File "<pyshell # 8>", line 1, in

<module> 'Марс' + 5

TypeError: Can not convert 'int' object to str implicitly

>>>

Python заплутався, тому що не зрозумів, що ми від нього хочемо: скласти числа або об'єднати рядки. Наприклад, ми хочемо об'єднати рядки. Для цього за допомогою функції str перетворимо число 5 в рядок '5' і виконаємо об'єднання: >>> 'Марс' + str(5)

'Марс5'

>>>

Чи можна виконати зворотне перетворення типів? Можна, можливо! >>> int("-5")

-5

>>>

Попросимо Python повторити наш рядок задане число раз: >>> "СПАМ" * 10

'СПАМСПАМСПАМСПАМСПАМСПАМСПАМСПАМСПАМСПАМ'

>>>

Операція множення для рядків придбала інший сенс. Рядки можна привласнювати змінним і далі працювати зі змінними:

>>> s = "Я вивчаю програмування"

>>> s

'Я вивчаю програмування'

>>> s * 4

'Я вивчаю програмуванняЯ вивчаю програмуванняЯ вивчаю

програмуванняЯ вивчаю програмування'

>>> s + "на мові Python"

'Я вивчаю програмування на мові Python'

>>>

Якщо хочемо помістити різні види лапок в рядок, то зробити це можна кількома способами: >>> "Hello's"

"Hello's"

>>> 'Hello \' s '

Page 3: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

"Hello's"

>>>

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

записуються, як два символи, але Python бачить їх як один: >>> len("\'")

1

>>>

Корисно знати про ці символах, тому що вони часто використовуються при роботі з рядками:

\ n - перехід на новий рядок

\ t - символ табуляції

\\ - похила риса вліво

\ '-символ одиночної лапки

\ "-символ подвійної лапки

При спробі перенести довгий рядок на новий: >>>'Це довгий

SyntaxError: EOL while scanning string literal

>>> рядок

Traceback (most recent call last):

File "<pyshell # 20>", line 1, in

<module> рядок

NameError: name 'рядок' is not defined

>>>

Створимо багаторядковий рядок (необхідно укласти її в три одинарні лапки): >>> '''Це довгий

рядок'''

'Це довгий \ nрядок'

>>>

При виведенні на екран перенесення рядка відобразився у вигляді спеціального символа '\n'.

Раніше ми говорили про функції print, яка відображає на екрані об'єкти різних типів даних, переданих їй в якості вхідних аргументів. Тепер знову до неї повернемося. Передамо на вхід функції print рядок зі спеціальним символом: >>> print('Це довгий \nрядок')

Це довгий

рядок

>>>

Функція print спеціальний символ змогла розпізнати і зробити новий рядок.

Page 4: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

Розглянемо ще кілька прикладів: >>> print(1, 3, 5)

1 3 5

>>> print(1, '2', 'зновурядок',56)

1 2 знову рядок 56

>>>

Переконалися, що print дозволяє виводити об'єкти різних типів. Насправді, у цій функції є кілька «прихованих» аргументів, які задаються за

умовчанням в момент виклику:

І знову кілька прикладів:

>>> print(1, 6, 7, 8, 9) 1 6 7 8 9 >>> print(1, 6, 7, 8, 9, sep =':')

1:6:7:8:9 >>>

За замовчуванням print використовує як роздільник пробіл, ми можемо змінити

роздільник, змінивши для цього примусово значення параметра sep =':'. Звідси висновок: корисно читати документацію. Додамо в наші програми інтерактивності, тобто будемо просити у користувача

ввести значення з клавіатури. В Python для цього є спеціальна функція input:

Page 5: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

>>> s = input()

Земляни, ми прилетіли із миром!

>>> s

'Земляни, ми прилетіли із миром!'

>>> type(s)

<class 'str'>

>>>

У прикладі ми викликали функцію input і результат її роботи привласнили змінною

s. Далі користувач ввів значення з клавіатури і натиснув Enter, тобто закінчив введення. Вміст змінної вивели на екран. Викликали функцію type, яка дозволяє визначити тип

об'єкта. Побачили, що це рядок.

І тут УВАГА: не забувайте, що функція input повертає

рядковий об'єкт!

Ось, чим це може обернутися: >>> s = input("Введіть число: ")

Введіть число: 555

>>> s + 5

Traceback (most recent call last):

File "<pyshell # 33>", line 1, in

<module> s + 5

TypeError: Can not convert 'int' object to str implicitly

>>>

У цьому прикладі використовується вхідний аргумент функції input, який виведе рядок-запрошення перед призначеним для користувача введенням: "Введіть число: ".

Після введення значення з клавіатури ми намагаємося його скласти з числом 5,а замість очікуваного результату отримуємо повідомлення про помилку. Використання операції + для рядкового і числового об'єктів призвело Python в ступор. Як вирішити проблему? Перетворенням типів: >>> s = int(input("Введіть число:"))

Введіть число: 555

>>> s + 5

560

>>>

Тепер все вийшло! Будьте уважні!

Вправа 2.1 Попросіть користувача ввести своє ім'я і після цього відобразіть на екрані рядок виду: Привіт, <ім'я>! Замість <ім'я> має зазначатися те, що користувач ввів з клавіатури. Як тебе звати?

Вася

Привіт, Вася!

Page 6: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

З рядками познайомилися, навчилися їх створювати. Тепер розглянемо операції над ними.

Кожен символ рядка має свій порядковий номер (індекс). Нумерація символів

починається з нуля. Тепер ми можемо звернутися до заданого символу рядка наступним чином: >>> s = 'Я люблю писати програми!'

>>> s [0]

'Я'

>>> s [-1]

'!'

>>>

У квадратних дужках вказується індекс символу. Нульовий індекс - перша буква рядки. А -1 індекс? Можна здогадатися, що останній. Якщо побачите негативний індекс, то визначити його позитивний аналог можна як довжина рядка + відємний індекс. Наприклад, для -1 це буде: len(s)-1, тобто 24. >>> len(s) -1

23

>>> s [24]

'!'

>>>

Яка ситуація зі зміною рядків в Python? >>> s = 'Я люблю писати програми!'

>>> s [0] ='J'

Traceback (most recent call last):

File "<pyshell # 41>", line 1, in

<module> s [0] = 'J'

TypeError: 'str' object does not support item assignment

>>>

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

Робота із рядковими об'єктами для Python не відрізняється від роботи з числовими об'єктами:

Змінюємо значення змінної s. Створюється новий рядковий об'єкт (а не змінюється

попередній) за адресою id2 і ця адреса записується в змінну s.

Page 7: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

Перш ніж ми зрозуміємо, як рядки можна змінювати, познайомимося зі зрізами:

>>> s = 'Пітони водяться в Африці'

>>> s[1:3]

'іт'

>>>

s[1:3] - зріз рядка s, починаючи з індексу 1,закінчуючи індексом 3 (НЕ включно). Це легко запам'ятати, якщо індекси представити у вигляді зсувів:

З зрізами можна виробляти різні маніпуляції:

>>> s[:3] # з 0 індексу по 3-ий НЕ включно

'Піт'

>>> s[:] # весь рядок

'Пітони водяться в Африці'

>>> s[::2] # третій аргумент задає крок (за замовчуванням один)

'Птн ояьявАрц'

>>> s[::-1] # «зворотний» крок

'іцирфА в ясьтядов инотіП'

>>> s[:-1] # згадаємо, як ми знаходили негативний індекс

'Пітони водяться в Африц' >>> s[-1:] # знову негативний індекс

'і'

>>>

Сподіваюся, що зрізи стануть вашими вірними помічниками при роботі з рядками. Тепер повернемося до питання, як змінити перший символ в рядку? Із зрізами це «елементарно, Ватсон»!

Page 8: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

>>> s = 'Я люблю писати програми!'

>>> 'J' + s [1:]

'J люблю писати програми!'

>>>

Вправа 2.2 Напишіть програму, яка визначить суму і добуток трьох чисел (типу int, float), введених з клавіатури. Приклад роботи програми:

Введіть перше число: 1

Введіть друге число: 4

Введіть третє число: 7

Сума введених чисел: 12

Добуток введених чисел: 28

2.2 Оператори відношення

Числа можна порівнювати. В Python для цього є наступні операції порівняння:

В інтерактивному режимі порівняємо два числа:

>>> 6> 5

True

>>> 7 <1

False

>>> 7 == 7 # не плутайте == та =

True

>>> 7! = 7

False

>>>

Python повертає True (Істина == 1), коли порівняння вірне і False (Брехня == 0) - в іншому випадку. True і False відносяться до логічного (булевого) типу даних bool. Важливо писати слова із великої літери. True інтерпретується Python як число 1, а False як число 0. >>> type(True)

<class 'bool'>

Page 9: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

>>>

Окремої розмови заслуговує порівняння дійсних чисел, тому що воно може привести до несподіваних, на перший погляд, результатами (див. стандарт IEEE 754): >>> 0.1 + 0.1 == 0.2

True

>>> 0.1 + 0.1 + 0.1 == 0.3

False

>>>

З цілими числами все більш- менш просто і зрозуміло. Розглянемо тепер більш складні логічні вирази.

Логічним висловлюванням (предикатом) будемо називати будь-яке розповідне

речення, щодо якого можна однозначно сказати, істинно воно або помилкове. Наприклад, вислів: «6 - парне число». Істинно або хибно? Очевидно, що істинно.

А вислів: «6 більше 19»? Висловлення помилкове. Ніякого підступу в цьому немає. Чи є висловлюванням фраза: «у нього блакитні очі»? Хочеться запитати, у кого?

Однозначності в цій фразі немає, тому вона не є висловлюванням. Далі висловлювання можна комбінувати. Висловлювання «Петров - лікар»,

«Петров - шахіст» можна об'єднувати за допомогою зв'язку І, АБО.

«Петров - лікар І шахіст». Це висловлювання істинно, якщо ОБИДВА висловлювання «Петров - лікар» І «Петров - шахіст» є істинними.

«Петров - лікар АБО шахіст». Це висловлювання істинно, якщо істинним є ОДНЕ

З висловлювань «Петров - лікар» АБО «Петров - шахіст». Як це використовується в Python? Розглянемо приклад комбінацій з

висловлювань: >>> 2> 4

False

>>> 45> 3

True

>>> 2> 4 and 45> 3# комбінація False and (І) True поверне False

False

>>> 2> 4 or 45> 3 # комбінація False or (АБО) True поверне True

True

>>>

Все, що ми сказали про комбінацію логічних висловлювань, можна об'єднати і представити у вигляді таблиці (Її називають таблицею істинності.) де 0 - False,а 1 - True.

Page 10: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

Для Python істинним або хибним може бути не тільки логічне висловлювання, а й

об'єкт. Так, що ж таке істина в Python?

В Python будь-яке число, не рівне нулю, або непорожній об'єкт

інтерпретується як істина. Числа, рівні нулю, порожні об'єкти і спеціальний об'єкт None (Він має тип

NoneType) інтерпретуються як брехня.

Розглянемо приклад: >>> '' and 2 # False and True

''

>>> '' or 2 # False or True

2

>>>

Ми виконали логічну операцію and (І) для двох об'єктів: порожнього рядкового об'єкта (він буде хибним) і ненульового числового об'єкта (він буде істинним). В результаті Python повернув нам порожній рядковий об'єкт. У чому тут справа?

Потім ми виконали аналогічно операцію or (АБО). В результаті отримали числовий об'єкт. Будемо розбиратися.

У Python є три логічних оператора and, or, not. not з них найпростіший:

>>> y = 6> 8

>>> y

False

>>> not y

True

>>> not None

True

>>> not 2

False

>>>

Результатом застосування логічного оператора not (НЕ) відбудеться заперечення операнда, тобто якщо операнд істинний, то not поверне - брехня, якщо помилковий, то -

Page 11: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

істину. Логічний оператор and (І) поверне True (істину) або False (брехня)24,якщо його

операндами є логічні висловлювання. >>> 2> 4 and 45> 3# комбінація False and True поверне False

False

>>>

Якщо операндами оператора and є об'єкти, то в результаті Python поверне об'єкт: >>> '' and 2 # False and True

''

>> >

Для обчислення оператора and Python обчислює операнди зліва направо і повертає перший об'єкт, який має помилкове значення.

Подивимося на стовпець and таблиці істинності. Яка закономірність? Якщо серед операндів (X, Y) є помилковий, то отримаємо помилкове значення, але замість помилкового значення для операндів-об'єктів Python повертає перший помилковий операнд, що зустрівся в вираженні, і далі обчислення НЕ виробляє. Це називається обчисленням по короткій схемі. >>> 0 and 3 # поверне перший помилковий об'єкт-операнд

0

>>> 5 and 4 # поверне крайній правий об'єкт-операнд

4

>>>

Якщо Python не вдається знайти помилковий об'єкт-операнд, то він повертає крайній правий операнд.

Логічний оператор or діє схожим чином, але для об'єктів-операндов Python

повертає перший об'єкт, який має справжнє значення. Python припинить подальші обчислення, як тільки буде знайдений перший об'єкт, який має справжнє значення. >>> 2 or 3 # поверне перший справжній об'єкт-операнд

2

>>> None or 5 # поверне другий об'єкт-операнд, тому що перший завжди

помилковий

5

>>> None or 0 # поверне об'єкт-операнд, що залишився

0

Таким чином, кінцевий результат стає відомий ще до обчислення решти виразу. Логічні вирази можна комбінувати:

>>> 1 + 3> 7 # пріоритет + вище, ніж>

False

>>> (1 + 3)> 7 # дужки сприяють наочності

Page 12: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

False

>>> 1 + (3> 7) # подумайте, що поверне вираз і чому 1

>>>

В Python можна перевіряти приналежність інтервалу: >>> x = 0

>>> -5 <x <10 # еквівалентно: x> -5 and x <10

True

>>>

Тепер ви без зусиль зможете розібратися в роботі наступного коду: >>> x = 5 <10 # True

>>> y = 2> 3 # False

>>> x or y

True

>>> (x or y) + 6

7

>>>

Вирішимо невелике завдання . Як обчислити 1/x, щоб не виникало помилки ділення на нуль. Для цього достатньо скористатися логічним оператором.

Прямий шлях приводить до помилки:

>>> x = 0

>>> 1 / x

Traceback (most recent call last):

File "<pyshell # 88>", line 1, in

<module> 1 / x

ZeroDivisionError: division by zero

>>>

Відповіддю буде наступний код:

>>> x = 1

>>> x and 1 / x

1.0

>>> x = 0

>>> x and 1 / x

0

Як вправа подумайте, чому так можна зробити. Рядки в Python теж можна порівнювати по аналогії з числами. Почнемо здалеку.

Символи, як і все інше, представлено в комп'ютері у вигляді чисел. Є спеціальна таблиця, яка ставить у відповідність кожному символу деяке число.

Визначити, яке число відповідає символу можна за допомогою функції ord: >>> ord('L')

76

Page 13: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

>>> ord('Ф')

1060

>>> ord('A')

65

>>>

Тепер порівняння символів зводиться до порівняно чисел, які їм відповідають: >>> 'A'> 'L'

False

>>>

Для порівняння рядків Python їх порівнює посимвольний: >>> 'Aa'> 'Ll'

False

>>>

Наступний корисний оператор, з яким ми познайомимося - in. Він перевіряє наявність підрядка в рядку: >>> 'a' in 'abc'

True

>>> 'A' in 'abc' # великої літери А немає

False

>>> "" in 'abc' # порожній рядок є в будь-якому рядку

True

>>> '' in ''

True

>>>

Освоївши логічні операції, перейдемо до їх використання.

2.3 Умовна інструкція if

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

Page 14: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

Блок виразів виконується тільки в тому випадку, якщо вираз, яке знаходиться в

умові, є істинним. Для прикладу звернемося до таблиці з водневими показниками з Вікіпедії для

різних речовин.

Зробимо перевірку: >>> pH = 5.0

>>> if pH == 5.0:

print(pH, "Кава")

5.0 Кава

>>>

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

Можна проводити кілька перевірок поспіль, і вони виконаються по черзі: >>> pH = 5.0

>>> if pH == 5.0:

print(pH, "Кава")

5.0 Кава

>>> if pH == 8.0:

print(pH, "Вода")

>>>

Page 15: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

Часто зустрічаються завдання, де виконувати всі перевірки не має сенсу. Наступну програму наберіть і виконайте в окремому файлі (не забувайте про відступи для блоку виразів if, їх повинно бути чотири): pH = 3.0

if pH == 8.0:

print(pH, "Вода")

elif 7.36 <pH <7.44:

print( pH, "Кров")

У цій програмі використовується ключове слово elif (скорочення від else if), яке перевіряє умова 7.36 <pH<7.44,якщо pH == 8.0 виявилося неправдивим. Графічно це представлено на блок-схемі алгоритму, розташованої праворуч від програми.

Умовний вираз може включати безліч перевірок. Загальний синтаксис у нього

наступний:

Блок виразів, що відноситься до else, виконується, коли всі вищі умови повернули

False. Розглянемо першу велику програму (наберіть її і виконайте в окремому файлі):

pH = float(input("Введіть pH:")) # рядок перетворили до матеріального типу

if pH == 7.0:

print(pH , "Вода")

elif 7.36 <pH <7.44:

print(pH, "Кров")

else:

print("Що це?!")

Далі ще більше «складний» приклад (також запустите його в окремому файлі і стежте за відступами - в Python це надзвичайно важливо): value = input("Введіть pH:")

if len(value)> 0: # перевіряємо, що користувач хоч що-небудь ввів

pH = float(value) # переводимо в дійсне число введення користувача

if pH == 7.0: # в оженився if

print(pH, "Вода")

elif 7.36 <pH <7.44:

print(pH, "Кров")

else:

print("Що це?!")

else:

Page 16: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

print("Введіть значення pH!")

Щоб навчитися програмувати - необхідно експериментувати: змінювати код, дописувати його і дивитися, що при цьому станеться. 2.4 Рядки документації

Згадайте, коли ми викликали функцію help(len), отримали довідкову інформацію для len. Звідки Python її бере? Відповідь - з самої функції.

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

В окремому файлі наберіть і виконайте: def my_function():

""" Ми не робимо нічого, але документуємо.

Ні, правда, ця функція нічого не робить."""

Pass

help(my_function)

Результат запуску програми: ====== ======= RESTART: C: /Python35-32/1.py ==============

Help on function my_function in module main :

My_function ()

Ми не робимо нічого, але документуємо.

Ні, правда, ця функція нічого не робить.

>>>

В """ потрійні подвійні лапки в тілі функції поміщається інформація, яку виводить на екран функція help. Тепер ви можете додавати опис до власних функцій.

2.5 Модулі у Python

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

>>> import math

>>>

Ми завантажили в пам'ять стандартний модуль math (містить набір математичних функцій), тепер можна звертатися до функцій всередині цього модуля. Сила Python у величезній кількості стандартних і корисних модулів.

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

>>> math.sqrt(9)

3.0

Page 17: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

>>>

Ми вказуємо ім'я модуля, точку і ім'я функції з аргументами. Дізнатися про функції, які містить модуль, можна через довідку: >>> help(math)

Help on built-in module math:

NAME

math

DESCRIPTION

This module is always available. It provides access to the

mathematical functions defined by the C standard.

FUNCTIONS

acos(...)

acos(x)

Return the arc cosine (measured in radians) of x.

>>>

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

окремо для неї: >>> help(math.sqrt)

Help on built-in function sqrt in module math:

sqrt(...)

sqrt(x)

Return the square root of x.

>>>

У момент імпортування модуля math створюється змінна з ім'ям math:

>>> type(math)

<class 'module'>

>>>

Функція type показала, що тип даних змінної math - модуль. Змінна math містить посилання (адресу) модульного об'єкта. В цьому об'єкті містяться

посилання на функції (функціональні об'єкти):

Page 18: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

У момент виклику функції sqrt Python знаходить змінну math (модуль повинен бути попередньо імпортовано), переглядає модульний об'єкт, знаходить функцію sqrt всередині цього модуля і потім виконує її.

В Python можна імпортувати окрему функцію з модуля:

>>> from math import sqrt

>>> sqrt(9)

3.0

>>>

Таким чином, Python не створюватиме змінну math, а завантажить в пам'ять тільки функцію sqrt. Тепер виклик функції можна робити, не звертаючись до імені модуля math. Тут треба бути вкрай уважним. Наведу приклад, чому: >>> def sqrt(x):

return x * x

>>> sqrt(5)

25

>>> from math import sqrt

>>> sqrt(9)

3.0

>>>

Ми створили власну функцію з ім'ям sqrt, потім викликали її і переконалися, що вона працює. Після цього імпортували функцію sqrt з модуля math. Знову викликали sqrt і бачимо, що це не наша функція! Її підмінили! Тепер інший приклад: >>> def sqrt(x):

return x * x

>>> sqrt(6)

36

>>> import math

>>> math.sqrt(9)

Page 19: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

3.0

>>> sqrt(7)

49

>>>

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

На самому початку занять ми викликали функції для роботи з числами, наприклад, abs для знаходження модуля числа. Насправді, ця функція теж знаходиться в модулі, який Python завантажує в пам'ять в момент початку роботи. Цей модуль називається __builtins__ (два нижніх підкреслення до і після імені модуля).

Якщо викликати довідку для даного модуля, то побачите, що там величезна кількість функцій і змінних: >>> help(_ builtins _)

Help on built-in module builtins:

NAME

builtins - Built-in functions, exceptions, and other

objects.

DESCRIPTION

Noteworthy: None is the `nil' object; Ellipsis represents

`...' in slices.

>>>

В Python є корисна функція dir, яка повертає перелік імен всіх функцій і змінних, що містяться в модулі: >>> dir( _builtins_ )

>>>

Частину з цих функцій ви вже знаєте, з іншими - ми познайомимося трохи пізніше.

Page 20: ЛЕКЦІЯ 2 2.1 Рядки і операції над ... · ЛЕКЦІЯ 2 2.1 Рядки і операції над ними Python часто використовують для

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

2.6 Вправи до лекції 2

Вправа 2.1

Попросіть користувача ввести своє ім'я і після цього відобразіть на екрані рядок виду: Привіт, <ім'я>! Замість <ім'я> має зазначатися те, що користувач ввів з клавіатури. Як тебе звати?

Вася

Привіт, Вася! Вправа 2.2

Напишіть програму, яка визначить суму і добуток трьох чисел (типу int, float), введених з клавіатури.

Приклад роботи програми:

Введіть перше число: 1

Введіть друге число: 4

Введіть третє число: 7

Сума введених чисел: 12

Добуток введених чисел: 28

Вправа 2.3 Напишіть програму для визначення індексу маси тіла (BMI).

Вправа 2.4 Напишіть власну програму, яка визначить максимальне з двох введених чисел.

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

Вправа 2.5 Напишіть програму, яка перевіряє ціле число на парність. Реалізувати у вигляді виклику

власної функції.

Вправа 2.6 Напишіть програму, яка обчислює значення функції (на вхід подається дійсне число):

2 якщо 2,4 5,74 в іншому випадкуx xf

− =

Вправа 2.7

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

Київ - код 44, 1,5 грн/хв; Харків - код 57, 1,8 грн/хв; Львів - код 32, 1,3 грн/хв; Дніпро - код 56, 1,1 грн/хв.