You are on page 1of 35

Мета

Курс з інформатики "Основи програмування на Python" являє собою вступний курс з


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

Цілі і завдання курсу


Основною метою курсу "Основи програмування на Python" є формування базових понять
структурного програмування, розвиток логіки.

Програма курсу
Поверхневе уявлення про мови програмування та їх історичний розвиток, способи трансляції
програмного коду. Типи даних (цілі числа, числа з плаваючою крапкою, рядки) та структури
даних (рядки, списки, словники), змінні, вирази, розгалуження (if, if-else, if-elif-else) і цикли
(while, for). Введення і виведення даних. Поняття про функції, локальних і глобальних
змінних.

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

Урок 1. Історія мов програмування. Компіляція та


інтерпретація

Програма. Мова програмування


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

Основні етапи розвитку мов програмування


Перші програми писалися на машинній мові, тому що для ЕОМ того часу ще не існувало
розвиненого програмного забезпечення, а машинна мова - це єдиний спосіб взаємодії з
апаратним забезпеченням комп'ютера. Кожну команду машинної мови безпосередньо виконує
тей чи інший електронний пристрій. Дані і команди програмісти записували в цифровому
вигляді (наприклад, в шістнадцятковій або двійковій системах числення). Зрозуміти програму
на такій мові дуже складно, крім того, навіть невелика програма складалась з безлічі рядків
коду. Ситуація ускладнювалася ще й тим, що кожна обчислювальна машина розуміє лише
свою машинну мову.
Людям, на відміну від машин, більш зрозумілі слова, ніж набори цифр. Прагнення людини
оперувати словами а не цифрами призвело до появи асемблерів. Це мови, у яких замість
чисельного позначення команд і областей пам'яті використовуються словесно-буквені.
При цьому з'являється проблема: машина не в змозі зрозуміти набори букв. Необхідний
якийсь перекладач на її рідній машинній мові. Тому, починаючи з часів асемблерів, під кожну
мову програмування створюються транслятори - спеціальні програми, що перетворюють
програмний код з мови програмування на машинний код. Асемблери на сьогоднішній день
продовжують використовуватися (в системному програмуванні - низькорівневі інтерфейси
операційних систем, частини драйверів та ін.)
Після асемблерів почались розвиватись мови так званого високого рівня. Для цих мов
знадобилося розробляти більш складні транслятори, тому що мови високого рівня набагато
більш зручні для людини, але відповідно менш зрозумілі для обчислювальної машини. На
відміну від асемблерів, які залишаються прив'язаними до своїх типів машин, мови високо
рівня володіють переносимістю. Тобто, написавши один раз програму, програміст міг
виконати її на будь-якій машині.
Наступним значущим кроком була поява об'єктно-орієнтованих мов програмування. За
допомогою таких мов програміст як би оперує віртуальними об'єктами. На сьогоднішній
день, реалізація великих і складних проектів здійснюється в основному за допомогою
об'єктно-орієнтованого програмування.

Розмаїття мов програмування


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

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

Урок 2. Знайомство з Python і середовищами


програмування

Історія
Мова програмування Python була створена приблизно в 1991 році голандцем Гвідо ван
Россум.
Своє ім'я - Пайтон (або Пітон) - отримав від назви телесеріалу (“Monty Python”), а не
плазуна.
Після того, як Россум розробив мову, він виклав її в Інтернет, де вже ціле співтовариство
програмістів приєдналося до її поліпшення.
Python активно вдосконалюється і в даний час. Часто виходять його нові версії. Офіційний
сайт http://python.org.
З появою версії 3.0 розвиток Python як би пішов в двох напрямках: одночасно розвиваються і
2-га і 3-я версії Python.
Примітка: В даному підручнику ми будемо вивчати 3-ю версію Python. Хоча для тих
хто хоче вчити 2-гу версію, цей підручник буде однаково корисним: на даному етапі
вивчення мови різниця між версіями практично не відчутна (окрім правил написання
команд print() та input(), про що буде повідомлено нижче).

Особливості
Python - інтерпретована мова програмування: вихідний код частинами перетворюється в
машинний в процесі виконання спеціальною програмою - інтерпретатором.
Python характеризується ясним синтаксисом. Читати код на цій мові програмування досить
легко, тому що в ньому мало допоміжних елементів, а правила мови змушують програмістів
робити відступи. Зрозуміло, що добре оформлений текст з малою кількістю відволікаючих
елементів читати і розуміти легше.
Python - це повноцінна, можна сказати універсальна, мова програмування. Він підтримує
об'єктно-орієнтоване програмування (насправді він і розроблявся як об'єктно-орієнтована
мова).
Також Python поширюється вільно на підставі ліцензії GNU General Public License.

Дзен Пітона
Якщо інтерпретатору Пітона дати команду import this (імпортувати "сам об'єкт"), то
виведеться так званий "Дзен Пітона", який ілюструє ідеологію і особливості даної мови.
Глибоке розуміння цього дзену приходить тим, хто зможе освоїти мову Python в повній мірі і
отримає досвід практичного програмування.
Фраза Переклад
1. Beautiful is better than ugly. Красиве краще за потворне.

2. Explicit is better than implicit. Просте краще за складне.

4. Complex is better than complicated. Складне краще за ускладнене.

5. Flat is better than nested. Плоске краще ніж вкладене.

6. Sparse is better than dense. Розріджене краще ніж щільне.

7. Readability counts. Читабельність важлива.

8. Special cases aren't special enough to break Виняткові випадки не настільки важливі, щоб
the rules. порушувати правила.

9. Although practicality beats purity. Однак практичність важливіша за чистоту.

10. Errors should never pass silently. Помилки ніколи не повинні замовчуватися.

11. Unless explicitly silenced. За винятком замовчування, яке задано


спеціально.

12. In the face of ambiguity, refuse the У випадку неоднозначності не піддавайтеся


temptation to guess. спокусі вгадати.

13. There should be one - and preferably only Повинен існувати один - і, бажано, тільки
one - obvious way to do it. один - очевидний спосіб зробити це.

14. Although that way may not be obvious at Хоча він може бути з першого погляду не
first unless you're Dutch. очевидний, якщо ти не голландець.

15. Now is better than never. Зараз краще, ніж ніколи.

16. Although never is often better than * Right * Проте, ніколи частіше краще, ніж прямо
now. зараз.

17. If the implementation is hard to explain, it's Якщо реалізацію складно пояснити - це
a bad idea. погана ідея.

18. If the implementation is easy to explain, it Якщо реалізацію легко пояснити — це може
may be a good idea. бути хороша ідея.

19. Namespaces are one honking great idea - Простори назв - прекрасна ідея, давайте
Let's do more of those! робити їх більше!

Як писати програми
Програмне забезпечення.
• Сам інтерпретатор з інтерактивною оболонкою IDLE. Його можна взяти тут (
http://python.org/download/). Існують версії для Linux, Windows, MacOS.
• Середовище розробки. Воно для початку необов'язкове, та й те що йде в дистрибутиві
підійде новачкові, але для серйозних проектів потрібно щось серйозніше. Для
Windows, наприклад, можна використовувати чудовий легкий PyScripter, для Linux -
Komodo IDE.

Інтерактивний режим
Для початку попрацюємо в інтерактивні оболочці IDLE. Просто запустіть дистрибутив
(перед цим, звичайно, його треба закачати та інсталювати). Запрошення введення не змусить
себе довго чекати, воно виглядає так:
>>>

В основному інтерпретатор виконує команди порядково: пишеш рядок, натискаєш Enter,


інтерпретатор виконує її, спостерігаєш результат.
Це дуже зручно, коли людина тільки вивчає програмування або тестує якусь невелику
частину коду. Адже якщо працювати на компільованій мові, то довелося б спочатку написати
код на вихідній мові програмування, потім скомпілювати і вже потім запустити виконуваний
файл на виконання.
Примітка: Працювати в інтерактивному режимі в ОС Linux можна не лише в
оболочці IDLE але й безпосередньо в консолі. Для цього слід виконати команду python.
Запуститься інтерпретатор, де спочатку виведеться інформація про
інтерпретатор. Далі, послідує запрошення до вводу (>>>). Хоча працювати в
інтерактивній оболочці IDLE зручніше, так як там є підсвічування синтаксису
(залежно від значення синтаксичної одиниці вона виділяється певним кольором) і
спливаючі підказки.
Оскільки ніяких команд ми поки не знаємо, то будемо використовувати Python як калькулятор
(можливості мови це дозволяють). Пишемо вираз, натискаємо Enter і отримуємо результат:
>>>2+5
7
>>>3*(5­8)
­9
>>>2.4+3.0/2
3.9

Прокручувати список раніше введених команд можна за допомогою комбінацій Alt + N, Alt +
P.
Створення скриптів
Незважаючи на зручності інтерактивного режиму роботи при написанні програм на Python,
зазвичай потрібно зберігати вихідний програмний код для подальшого використання. У
такому випадку підготовлюються файли, які передаються потім інтерпретатору на виконання.
По відношенню до інтерпретованих мов програмування часто вихідний код називають
скриптом. Файли з кодом на Python зазвичай мають розширення py.
Підготувати скрипти можна в тому ж середовищі IDLE. Для цього, після запуску програми в
меню слід вибрати команду File → New Window (Crtl + N), відкриється нове вікно. Потім
бажано відразу зберегти файл (не забуваємо про розширення py). Після того як код буде
підготовлений, знову збережіть файл (щоб оновити збереження). Ну і нарешті, можна
запустити скрипт, виконавши команду меню Run → Run Module (F5). Після цього в першому
вікні з'явиться результат виконання коду. (Примітка: якщо набирати код, не зберігши
спочатку файл, то підсвічування синтаксису буде відсутнє.)
Підготуйте скрипт (з прикладами). Запустіть його на виконання.
Насправді скрипти можна готувати в будь-якому текстовому редакторі (бажано, щоб він
підтримував підсвічування синтаксису мови Python). Крім того, існують спеціальні програми
для розробки.
Запускати підготовлені файли можна не тільки в IDLE, але і в консолі (для Linux) за
допомогою команди
python адреса/ім'я_файлу

У консолі передайте інтерпретатору Пітона на виконання підготовлений файл.


Крім того, існує можливість налаштувати виконання скриптів за допомогою подвійного кліка
по файлу (в Windows дана можливість присутня від початку).

Урок 3. Типи даних в програмуванні. Визначення змінної

Дані та їх типи
Можна помітити, що все, що ми робимо, ми робимо над чимось - якимись предметами або
об'єктами. Ми міняємо властивості об'єктів та їх можливості. Програми для комп'ютерів
також маніпулюють якимись об'єктами (назвемо їх поки даними).
Очевидно, дані бувають різними. Дуже часто комп'ютерній програмі доводиться працювати з
числами і рядками. Наприклад, на минулому уроці ми "маніпулювали" числами, виконуючи
над ними арифметичні операції. Можна сказати, що операція додавання виконувала зміну
першого числа на величину другого, або множення збільшувало одне число в кількість разів,
що відповідає другому числу.
Числа у свою чергу також бувають різними: цілими, дробовими, можуть мати величезне
значення або дуже довгу дробову частину. При знайомстві з мовою програмування Python ми
точно зіткнемося з трьома типами даних:
- Цілі числа (integer) - позитивні і негативні цілі числа, а також 0 (наприклад, 4, 687, -45, 0).
- Числа з плаваючою крапкою (float point) - дробові числа (наприклад, 1.45, -3.789654,
0.00453). Примітка: роздільником цілої і дробової частини служить крапка, а не кома.
- Рядки (string) - набір символів, укладених в лапки (наприклад, "ball", "What is your name?",
'DkfjUUv', '6589 '). Примітка: лапки в Python можуть бути одинарними або подвійними.

Операції
Можна сказати, що операція - це виконання якихось дій над даними (операндами). Для
виконання конкретних дій потрібні спеціальні інструменти — оператори.

Наприклад, символ "+" по відношенню до чисел виконує операцію додавання, а по


відношенню до рядків - конкатенацію (з'єднання). Парний знак ** зводить перше число в
ступінь другого.
Вираз Значення
34.907 + 320.65 355.55699999999996
"Hi, " + "world :)" 'Hi, world :)'
"Hi, " * 10 'Hi, Hi, Hi, Hi, Hi, Hi, Hi, Hi, Hi, Hi, '

Зміна типу даних


Що буде, якщо ми спробуємо виконати в одному виразі операцію над різними типами
даними? Наприклад, скласти ціле і дробове число, число і рядок. Однозначну відповідь дати
не можна: так, при складанні цілого числа і числа з плаваючою крапкою, виходить число з
плаваючою крапкою, а якщо спробувати скласти будь-яке число і рядок, то інтерпретатор
Python видасть помилку.
Вираз Результат виконання
1 + 0.65 1.65
"Hi," + 15 Помилка

Однак, бувають випадки, коли програма отримує дані у вигляді рядків, а оперувати повинна
числами (або навпаки). У такому випадку використовуються спеціальні функції (особливі
оператори), що дозволяють перетворити один тип даних в іншій. Так функція int ()
перетворює переданий їй рядок (або число з плаваючою крапкою) в ціле число, функція str ()
перетворює переданий їй аргумент в рядок, float () - в дробове число.
Вираз Результат виконання
int ("56") 56
int (4.03) 4
int ("comp 486") Помилка

str (56) '56 '

str (4.03) '4 .03 '

float (56) 56.0

float ("56") 56.0

Змінні
Дані зберігаються в комірках пам'яті комп'ютера. Коли ми вводимо число, воно поміщається в
пам'ять. Але як дізнатися, куди саме? Як надалі звертатися до цих даних? Раніше, при
написанні програм на машинній мові, звернення до комірок пам'яті здійснювали за
допомогою вказівки регістрів. Але вже з появою асемблерів, при зверненні до даних стали
використовувати так звані змінні. Механізм зв'язку між змінними та даними може
розрізнятися в залежності від мови програмування і типу даних. Поки досить запам'ятати, що
дані зв'язуються з яких-небудь ім'ям і надалі звернення до них можливо з цього імені.
У програмі на мові Python зв'язок між даними і змінними встановлюється за допомогою
знака =. Така операція називається присвоєнням. Наприклад, вираз sq = 4 означає, що на
об'єкт (дані) у певній області пам'яті посилається ім'я sq і звертатися до них тепер слід за цим
іменем.
Імена змінних можуть бути будь-якими. Однак є кілька загальних правил їх написання:
1. Бажано давати змінним осмислені імена, що говорять про призначення даних, на які
вони посилаються.
2. Ім'я змінної не повинно збігатися з командами мови (зарезервованими ключовими
словами).
3. Ім'я змінної має починатися з букви або символу підкреслення (_).
Щоб дізнатися значення, на яке посилається змінна, перебуваючи в режимі інтерпретатора,
достатньо її викликати (написати ім'я і натиснути Enter).
Приклад роботи зі змінними в інтерактивному режимі:
>>> apples = 100
>>> eat_day = 5
>>> day = 7
>>> apples = apples ­ eat_day * day
>>> apples
65

Практична робота
1. Змінній var_int надайте значення 10, var_float - значення 8.4, var_str - "No".
2. Змініть значення, збережене у змінній var_int, збільшивши його в 3.5 рази, результат
зв'яжіть зі змінною big_int.
3. Змініть значення, збережене у змінній var_float, зменшивши його на одиницю,
результат зв'яжіть з тією ж змінною.
4. Розділіть var_int на var_float, а потім big_int на var_float. Результат даних
виразів не прив'язуйте ні до яких змінних.
5. Змініть значення змінної var_str на "NoNoYesYesYes". При формуванні нового
значення використовуйте операції конкатенації (+) і повторення рядка (*).
6. Виведіть значення всіх змінних.

Результат виконання практичної роботи

>>> var_int = 10 
>>> var_float = 8.4 
>>> var_str = "No" 
>>> big_int = var_int * 3.5 
>>> var_float = var_float ­ 1 
>>> var_int / var_float 
1.3513513513513513 
>>> big_int / var_float 
4.72972972972973 
>>> var_str = var_str * 2 + "Yes" * 3 
>>> var_int 
10 
>>> var_float 
7.4 
>>> big_int 
35.0 
>>> var_str 
'NoNoYesYesYes' 
>>>

Запитання
1. Які типи даних ви знаєте? Опишіть їх.
2. Чи можна перетворити дробове число на ціле? ціле на дробове? У яких випадках
можна рядок перетворити на число?
3. Наведіть приклади операцій. Для чого призначена операція присвоєння?
4. Які існують правила і рекомендації для іменування змінних?

Урок 4. Логічні вирази

Логічні вирази і логічний тип даних


Часто в реальному житті ми погоджуємося або заперечуємо те чи інше твердження, подію,
факт. Наприклад, "Сума чисел 3 та 5 більша за 7" є правдивим твердженням, а "Сума чисел 3
та 5 менша за 7" - хибним. Можна помітити, що з точки зору логіки подібні фрази
припускають тільки два результати: "Так" (правда) і "Ні" (неправда). Подібне
використовується в програмуванні: якщо результатом обчислення виразу може бути лише
"Так" або "Ні", то такий вираз називається логічним.

На минулому уроці були описані три типи даних: цілі, дробові числа, а також рядки. Також
виділяють логічний тип даних. У цього типу всього два можливих значення: True (правда) - 1
і False (неправда) - 0. Тільки ці значення можуть бути результатом логічних виразів.

Логічні оператори
Говорячи природною мовою (наприклад, українською) ми позначаємо порівняння словами
"дорівнює", "більше", "менше". У мовах програмування використовуються спеціальні знаки,
подібні тим, які використовуються в математичних виразах: > (більше), < (менше), >=
(більше або дорівнює), <= (менше або дорівнює).

Новими для вас можуть виявитися позначення рівності: == (два знаки “дорівнює”); а також
нерівності != (знак оклику і знак “дорівнює”). Тут слід звернути увагу на наступне: не
плутайте операцію присвоювання, що позначається у мові Python одиночним знаком
"дорівнює", і операцію порівняння (два знаки "дорівнює"). Присвоєння і порівняння - зовсім
різні операції.

Приклади роботи з логічними виразами на мові програмування Python (зауважте, що після


символа # написані коментарі, їх можна вставляти в код, інтерпретатор їх ігнорує):
x = 12­5 # це не логічна операція, 
# а операція присвоювання змінній x результату виразу 12­5
x == 4 # x дорівнює 4 
x == 7 # x дорівнює 7
x != 7 # x не дорівнює 7
x != 4 # x не дорівнює4
x > 5 # x більше5
x < 5 # x менше 5 
x >= 6 # x більше або дорівнює 6
x <= 6 # x менше або дорівнює 6 

Визначте усно результати виконання операцій, наведених у прикладі вище. Перевірте


правильність ваших припущень, виконавши дані вирази за допомогою інтерпретатора мови
Python.

Складні логічні вирази


Логічні вирази типу x >= 1023 є простими. Однак, на практиці нерідко використовуються
більш складні. Може знадобитися отримати відповіді "Так" або "Ні" залежно від результату
виконання двох простих виразів. Наприклад, "на вулиці йде сніг або дощ", "змінна new
більша 12 і менша 20" і т.п.

У таких випадках використовуються спеціальні оператори, що об'єднують два і більше


простих логічних вирази. Широко використовуються два способи об'єднання: через, так
звані, логічні І (and) та АБО (or).

Щоб отримати істину (True) при використанні оператора and, необхідно, щоб результати
обох простих виразів, які пов'язує даний оператор, були істинними. Якщо хоча б в одному
випадку результатом буде False (неправда), то і весь складний вираз буде хибним.

Щоб отримати істину (True) при використанні оператора or, необхідно, щоб результат хоча б
одного простого виразу, що входить до складу складного, був істинним. У разі оператора or
складний вираз стає помилковим (False) лише тоді, коли помилкові всі прості вирази, що
його утворюють.

Приклади роботи зі складними логічними виразами на мові програмування Python (ще раз
зауважуємо, що після символу # написані коментарі):

x = 8
y = 13 
x == 8 and y < 15 # x дорівнює 8 та y менше 15
x > 8 and y < 15 # x більше 8 та y менше 15 
x != 0 or y > 15 # x не дорівнює 0 або y менше 15
x < 0 or y > 15 # x менше 0 або y менше 15

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


Перевірте правильність ваших припущень, виконавши дані вирази за допомогою
інтерпретатора мови Python.

Практична робота
1. Присвойте двом змінним будь-які числові значення.
2. Складіть чотири складних логічних вирази за допомогою оператора and, два з яких
повинні давати True, а два інших - False.
3. Аналогічно виконайте п. 2, але вже використовуючи оператор or.
4. Спробуйте використовувати у складних логічних виразах роботу зі змінними
рядкового типу.

Приблизний результат виконання практичної роботи


>>>num1 = 34 
>>>num2 = 8.5 
>>>num1 > 12 and num2 != 12 
True 
>>> num1 == 34 and num2 >= 8
True 
>>> num1 != 34 and num2 != 12
False 
>>> num1 <= 12 and num1 == 0
False 
>>> num1 != 34 or num2 != 12
True 
>>> num1 < 1 or num2 > 9.6 
False 
>>> str1 = "a" 
>>> str2 = "b" 
>>> str1 < "c" and str2 != "a"
True 
>>>

Урок 5. Умовний оператор. Інструкція if

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

Схожа нелінійність дій може бути передбачена і в комп'ютерній програмі. Наприклад,


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

Приклад її реалізації на мові програмування Python:


if numbig < 100:
     c = a ** b

Розшифруємо цей вираз: якщо змінна numbig менша за 100 то виконується дія c=a**b
Перший рядок конструкції if - це заголовок, в якому перевіряється умова виконання рядків
коду після двокрапки (тіла конструкції). У вищевказаному прикладі тіло містить всього лише
один вислів, однак частіше їх буває набагато більше.

Про Python говорять, що це мова програмування з досить ясним і легко читаним кодом. Це
пов'язано з тим, що в ньому зведені до мінімуму допоміжні елементи (дужки, крапки з
комою), а для поділу синтаксичних конструкцій використовуються відступи від початку
рядка. Враховуючи це, в конструкції if код, який виконується при дотриманні умови, повинен
обов'язково мати відступ вправо. Решта коду (основна програма) повинна мати той же
відступ, що й слово if. Зазвичай відступ робиться за допомогою клавіші Tab.
Можна зобразити блок-схему програми, яка містить інструкцію if, в такому вигляді:

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

Приклад коду з гілкою else на мові програмування Python:

tovar1 = 50
tovar2 = 32 
if tovar1 + tovar2 > 99: 
     print("Сума не достатня") 
else:
     print("Чек сплачено" )

Примітка: команда print() виводить текстову інформацію на екран. У попередніх


версіях Python написання даної команди було дещо іншим: print text (тобто текст
для виведення не розміщувався в дужках а писався через пробіл).
Практична робота
1. Напишіть програмний код, в якому у випадку, якщо значення якоїсь змінної більше 0,
виводилося б спеціальне повідомлення (використовуйте функцію print). Один раз
виконайте програму при значенні змінної більше 0, другий раз - менше 0.
2. Вдоскональте попередній код за допомогою гілки else так, щоб залежно від значення
змінної, виводилося або 1, або -1.
3. Самостійно придумайте програму, в якій би використовувалася інструкція if (бажано з
гілкою else). Вкладений код повинен містити не менше трьох виразів.

Урок 6. Множинне розгалуження

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

Як організувати таке множинне розгалуження? Напевно, можна використовувати декілька


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

Зазвичай таку проблему можна вирішити за допомогою вкладених конструкцій if-else. Однак
при цьому часто з'являється проблема правильного трактування коду: незрозуміло, до якого if
відноситься else (хоча в Python така плутанина не можлива через обов'язкові відступи).

З іншого боку, в ряді мов програмування, в тому числі і Python, передбачено спеціальне
розширення інструкції if, що дозволяє направити потік виконання програми з одній гілок.
Дана розширена інструкція, крім необов'язкової частини else, містить ряд гілок elif
(скорочення від "else if" - "ще якщо") і виглядає приблизно так, як показано на блок-схемі.
Частин elif може бути як завгодно багато (в межах розумного, звичайно).
На відміну від використання безлічі одиночних інструкцій if, інструкція if-elif-else припиняє
перегляд наступних гілок, як тільки логічне вираз в поточній гілці буде True. Наприклад,
якщо вираз при if (перша гілка) буде True, то після виконання вкладеного блоку виразів,
програма повернеться до основної гілки.
Приклади скриптів з використанням інструкції if-elif-else на мові програмування Python:
x = ­10 
 if x > 0:
     print(1) 
elif x < 0:
     print(­1)
else:
     print(0) 

Або такий приклад:


result = "no result"
num1 = 3 
if num1 == 0:
     result = 0 
elif num1 == 1:
     result = 1 
elif num1 == 2:
     result = 2 
elif num1 == 3:
     result = 3 
elif num1 == 4:
     result = 4 
elif num1 == 5:
     result = 45
else:
     print("Error")
print(result )

У який момент припинитися виконання інструкції if-elif-else у вищевказаному прикладі? При


якому значенні змінної могла спрацювати гілка else?

Практична робота
1.Напишіть програму за наступним описом:
a) двом змінним присвоюються числові значення;
b) якщо значення першої змінної більше другої, то знайти різницю значень змінних
(відняти від першої другу), результат присвоїти третій змінній;
c) якщо перша змінна має менше значення, ніж друга, то третю змінну пов'язати з
результатом суми значень двох перших змінних;
d) у всіх інших випадках, присвоїти третій змінній значення первої змінної;
e) вивести значення третьої змінної на екран.
2.Придумайте програму, в якій би використовувалася інструкція if-elif-else. Кількість гілок
повинна бути як мінімум чотири.

Урок 7. Цикл while

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

Універсальним організатором циклу в мові програмування Python (як і в багатьох інших


мовах) є конструкція while. Слово "while" з англійської мови перекладається як "доки" ("доки
логічний вираз має значення True, доти будуть виконуватись певні операції"). Конструкцію
while мовою Python можна описати наступною схемою:
Ця схема приблизна, тому що логічний вираз в заголовку циклу while може бути більш
складним, а змінюватися може змінна (або вираз) b.

Може виникнути питання: "Навіщо змінювати a або b?". Коли виконання програмного коду
доходить до циклу while, виконується логічний вираз в заголовку, і, якщо було отримано
True, виконуються вкладені вирази. Після потік виконання програми знову повертається в
заголовок циклу while, і знову перевіряється умова. Якщо умова ніколи не буде змінюватись,
то не буде причин зупинки циклу і програма зациклиться. Щоб цього не сталося, необхідно
передбачити можливість виходу з циклу. Таким чином, змінюючи значення змінної в тілі
циклу, можна довести логічний вираз до False і цикл завершиться.

Цю змінювану змінну, яка використовується в заголовку циклу while, зазвичай називають


лічильником. Як і всякій змінній їй можна давати довільні імена, однак дуже часто
використовують букви i та j. Найпростіший цикл на мові програмування Python може
виглядати так:
str1 = "+"
i = 0 
while i < 10:
     print(str1)
     i = i + 1 

В останньому рядку коду відбувається збільшення значення змінної i на одиницю, тому з


кожним колом циклу її значення збільшується. Коли буде досягнуте число 10, логічний вираз
i < 10 дасть False, виконання тіла циклу буде припинено, а потік виконання програми
перейде на наступні команди, що слідують після циклу. Результатом виконання
вищевказаного скрипту є виведення на екран десяти знаків “+” в стовпчик. Якщо
збільшувати лічильник в тілі циклу не на одиницю, а на 2, то буде виведено тільки п'ять
знаків, так як цикл зробить лише п'ять обертів.
Більш складний приклад з використанням циклу:
fib1 = 0
fib2 = 1
print (fib1)
print (fib2)
n = 10 
i = 0 
while i < n: 
     fib_sum = fib1 + fib2
     print(fib_sum) 
     fib1 = fib2
     fib2 = fib_sum
     i = i + 1 

Цей приклад виводить числа Фібоначчі - ряд чисел, в якому кожне наступне число дорівнює
сумі двох попередніх: 0, 1, 1, 2, 3, 5, 8, 13 і т.д. Скрипт виводить дванадцять членів ряду: два
(0 і 1) виводяться поза циклом і десять виводяться в результаті виконання циклу.

Як це відбувається? Вводяться дві змінні (fib1 та fib2), яким присвоюються початкові


значення. Присвоюються значення змінній n та лічильнику i, між якими ті чи інші
математичні відносини формують бажане число витків циклу. Всередині циклу створюється
змінна fib_sum, якій присвоюється сума двох попередніх членів ряду, і її ж значення
виводиться на екран. Далі змінюються значення fib1 та fib2 (першому присвоюється друге,
а другому - сума), а також збільшується значення лічильника.

Практична робота
1. Напишіть скрипт на мові програмування Python, що виводить ряд чисел Фібоначчі
(див. приклад вище). Запустіть його на виконання. Потім змініть код так, щоб
виводився ряд чисел Фібоначчі, починаючи з п'ятого члена ряду і закінчуючи
двадцятим.
2. Напишіть цикл, що виводить ряд парних чисел від 0 до 20. Потім, кожне третє число в
ряді від -1 до -21.
3. Самостійно придумайте програму на Python, в якій би використовувався цикл while.

Урок 8. Введення даних з клавіатури

Комп'ютерні програми обробляють дані, здійснюючи над ними операції, які задав програміст,
і які були обумовлені поставленими завданнями. Дані в програму можна "закласти" в процесі
її розробки. Однак така програма завжди буде обробляти одні й ті ж дані і повертати один і
той же результат. Найчастіше потрібно зовсім інше - програма повинна обробляти різні
(відносно, в певному діапазоні) дані, що надходять до неї з зовнішніх джерел. В якості
останніх можуть виступати файли або клавіатура.
Коли інформація вводиться з клавіатури, а результати виводяться на екран монітора, то
можна говорити про інтерактивний режим роботи програми. Вона обмінюється інформацією
із зовнішнім для неї середовищем: може виводити і отримувати дані в процесі виконання, і не
є замкнутою сама на собі. З виведенням даних ми вже почасти знайомі: виведенням на екран
(і не тільки) в мові програмування Python займається функція print().

Введення даних з клавіатури в програму (починаючи з версії Python 3.0) здійснюється за


допомогою функції input (). Коли дана функція виконується, то потік виконання програми
зупиняється в очікуванні даних, які користувач повинен ввести за допомогою клавіатури.
Після введення даних і натискання Enter, функція input () завершує своє виконання і повертає
результат, який представляє собою рядок символів, введених користувачем.
>>>input() 
1234 
'1234' 
>>>input()
Hello World!
'Hello World!' 

Коли виконувана програма пропонує користувачеві що-небудь ввести, то користувач може не


зрозуміти, що від нього хочуть. Треба якось повідомити, введення яких даних очікує
програма. З цією метою функція input () може приймати необов'язковий
аргумент-запрошення рядкового типу; при виконанні функції повідомлення буде з'являтися
на екрані та інформувати людину про запитувані дані.
>>> input ("Введіть номер карти: ")
Введіть номер картки: 98765
'98765 ' 
>>> input('Input your name: ')
Input your name: Sasha
'Sasha' 

З прикладів видно, що дані повертаються у вигляді рядка, навіть якщо було введено число. У
більш ранніх версіях Python були дві вбудовані функції, що дозволяли отримувати дані з
клавіатури: raw_input (), яка повертала в програму рядок та input (), яка повертала число.
Починаючи з версії Python 3.0, якщо потрібно отримати число, то результат виконання
функції input () змінюють за допомогою функцій int () або float ().
>>> input ('Введіть число: ')
Введіть число: 10
'10 ' 
>>> int(input ('Введіть число: '))
Введіть число: 10
10 
>>> float(input ('Введіть число: '))
Введіть число: 10
10.0 

Результат, що повертається функцією input (), зазвичай присвоюють певній змінній для
подальшого використання в програмі.
>>> userName = input ('What is your name?  ')
What is your name? Masha 
>>> exp = input ('3*34=')
3*34=102 
>>> exp = int(exp) + 21 
>>> userName
'Masha' 
>>>exp
123 

Практична робота
1. Створіть скрипт (файл data.py), який би запитував у користувача
• Його ім'я: "What is your name?"
• Вік: "How old are you?"
• Місце проживання: "Where are you live?"
А потім має вивести три рядки
• "This is ім'я"
• "It is вік"
• "He live in місце проживання"
(замість слів ім'я, вік, місце проживання повинні бути відповідні дані, що введені
користувачем).

2. Напишіть програму (файл example.py), яка пропонувала б користувачеві вирішити приклад


4*100-54. Якщо користувач напише правильну відповідь, то отримає привітання від
програми, інакше - програма повідомить йому про помилку. (При вирішенні задачі
використовуйте конструкцію if-else.)

3. Перепишіть попередню програму так, щоб користувачеві пропонувалося вирішувати


приклад до тих пір, поки він не напише правильну відповідь. (При вирішенні задачі
використовуйте цикл while.)

Урок 9. Рядки як послідовності символів

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

Існує спеціальна функція len (), яка дозволяє виміряти довжину рядка. Результатом виконання
даної функції є число, що показує кількість символів в рядку.
Також для рядків існують операції конкатенації (+) і дублювання (*).
>>> len ('It is a long string')
19 
>>> '!!!' + ' Hello World ' + '!!!' 
'!!! Hello World !!!' 
>>> '­' * 20
'­­­­­­­­­­­­­­­­­­­­' 

У послідовностях важливий порядок символів, у кожного символу в рядку є унікальний


порядковий номер - індекс. Можна звертатися до конкретного символу в рядку і отримувати
його з допомогою оператора індексування, який представляє собою квадратні дужки з
номером символу в них.
>>> 'morning, afternoon, night'[1]
'o' 
>>> tday = 'morning, afternoon, night' 
>>> tday[4]
'i' 

У прикладі, вираз 'morning, afternoon, night'[1] призвів до витягнення другого символу.


Справа в тому, що індексація починається не з одиниці, а з нуля. Тому, коли потрібно
витягти перший символ, то оператор індексування повинен виглядати так: [0]. Також
дозволено витягувати символи, починаючи відлік з кінця.
У цьому випадку відлік починається з -1 (останній символ).
>>> tday = 'ранок, день, ніч' 
>>> tday[0]
'р' 
>>> tday[­1]
'ч' 
>>> tday[­3]
'н' 

Очевидно, що зручніше працювати не з самими рядками, а зі змінними, які на них


посилаються. Результат виконання виразу індексування можна присвоїти іншій змінній.
>>> a = "very big string" 
>>> a[6]
'i' 
>>> b = a[0] 
>>> b
'v' 

Можна витягати з рядка не один символ, а декілька, тобто отримувати зріз (підрядок).
Оператор витягнення зрізу з рядка виглядає так: [X: Y]. X - це індекс початку зрізу, а Y - його
закінчення; причому символ з номером Y в зріз вже не входить. Якщо відсутній перший
індекс, то зріз береться від початку до другого індексу; за відсутності другого індексу, зріз
береться від першого індексу до кінця рядка.
>>> tday = 'morning, afternoon, night' 
>>> tday[0:7]
'morning' 
>>> tday[9:­7]
'afternoon' 
>>> tday[­5:]
'night'
>>> tday[:3]
'mor'

Крім того, можна витягати символи не підряд, а через певну кількість символів. У такому
випадку оператор індексування виглядає так: [X: Y: Z); Z - це крок, через який здійснюється
вибір елементів.
>>> str4 = "Full Ball Fill Pack Ring" 
>>> str4[::5]
'FBFPR' 
>>> str4[0:15:2]
'Fl alFl ' 

Практична робота
1. Присвойте змінній з будь-який рядок, що складається не менше ніж з 8 символів. Вийміть з
рядка перший символ, потім останній, третій з початку і третій з кінця. Виміряйте довжину
вашого рядка.
2. Присвойте змінній довільний рядок довжиною 10-15 символів та отримайте з неї наступні
зрізи:
• перші вісім символів;
• чотири символи з центру рядка;
• символи з індексами кратними трьом.
Урок 10. Списки - змінювані послідовності

Списки (List) в мові програмування Python, як і рядки, є впорядкованими послідовностями.


Однак, на відміну від рядків, списки складаються не з символів, а з різних об'єктів (значень,
даних), і вкладаються не в лапки, а в квадратні дужки [ ]. Об'єкти відокремлюються один від
одного за допомогою коми.
Списки можуть складатися з різних об'єктів: чисел, рядків і навіть інших списків. В
останньому випадку, списки називають вкладеними.
[23, 656, ­20, 67, ­45] # список з цілих чисел 
[4.15, 5.93, 6.45, 9.3, 10.0, 11.6] #список з дробових чисел 
["Katy", "Sergiy", "Oleg", "Dasha"] #список з рядків 
["Київ", "Відень", 12, 148] #змішаний список
[[0, 0, 0], [0, 0, 1], [0, 1, 0]] # список, що складається зі списків 

Як і над рядками, над списками можна виконувати операції з'єднання і повторення:


>>> [45, ­12, 'april'] + [21, 48.5, 33]
[45, ­12, 'april', 21, 48.5, 33] 
>>> [[0,0], [0,1], [1,1]] * 2
[[0, 0], [0, 1], [1, 1], [0, 0], [ 0, 1], [1, 1]] 

За аналогією з символами рядків, можна отримувати доступ до об'єктів списку за їх


індексами, витягувати зрізи, вимірювати довжину списку:
>>> li = ['a','b','c','d','e','f'] 
>>> len(li)

>>> li[0]
'a' 
>>> li[4]
'e' 
>>> li[0:3]
['a', 'b', 'c'] 
>>> li[3:]
['d', 'e', 'f'] 

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

Символ у рядку змінити не можна, а елемент списку - можна:


>>> mystr = 'abrakadabra' 
>>> mylist = ['ab','ra','ka','da','bra'] 
>>> mystr[3] = '0' 
Traceback (most recent call last): 
File "<pyshell#11>", line 1, in <module> mystr[3] = '0' 
TypeError: 'str' object does not support itemassignment
>>> mylist[1] = 'ro' 
>>> mylist 
['ab', 'ro', 'ka', 'da', 'bra'] 

Як бачимо, при спробі змінити один елемент рядка, з'являється повідомлення про помилку
(виділено червоним).
У списку можна замінити цілий зріз:
>>> mylist[0:2] = [10,20] 
>>> mylist 
[10, 20, 'ka', 'da', 'bra'] 

Складніша ситуація:
>>> alist = mylist[0:2] + [100,'it is ',200] + mylist[2:] # новий список 
>>> a2list = mylist # створюється друге посилання­змінна на перший список 
>>> alist 
[10, 20, 100, 'it is ', 200, 'ka', 'da', 'bra'] 
>>> a2list 
[10, 20, 'ka', 'da', 'bra'] 
>>> a2list[0] = '!!!' # змінюємо список 
>>> a2list 
['!!!', 20, 'ka', 'da', 'bra'] 
>>> mylist # обидві змінні пов'язані з одним списком 
['!!!', 20, 'ka', 'da', 'bra'] 

Практична робота
1. Створіть два будь-яких списки і зв'яжіть їх із змінними.
2. Вийміть з першого списку другий елемент.
3. Змініть в другому списку останній об'єкт. Виведіть список на екран.
4. З'єднайте обидва списки в один, присвоївши результат новій змінній. Виведіть
отриманий список на екран.
5. "Зніміть" зріз з об'єднаного списку так, щоб туди потрапили деякі частини обох
перших списків. Зріз зв'яжіть з якоюсь новою змінною. Виведіть значення цієї змінної.
6. Додайте до цього списку-зріза два нові елементи і знову виведіть його.

Приклад виконання практичної роботи

Урок 11. Введення в словники

Одним із складних типів даних (поряд з рядками і списками) у мові програмування Python є
словники.
Словник (Dictionary) - це змінюваний (як і список) невпорядкований (на відміну від рядків і
списків) набір пар "ключ: значення".

Щоб уявлення про словник стало більш зрозумілим, можна провести аналогію зі звичайним
словником, наприклад, англо-українським. На кожне англійське слово в такому словникові є
українське слово-переклад: cat - кішка, dog - собака, table - стіл і т.д. Якщо англо-український
словник описувати за допомогою Python, то англійські слова будуть ключами, а українські -
їхніми значеннями:
{'cat': 'кішка', 'dog': 'собака', 'bird': 'птах', 'mouse': 'миша'} 

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


словника на Пітоні можна описати такою схемою:

Якщо створити словник в інтерпретаторі Python, то після натискання Enter можна


спостерігати, що послідовність виведення пар "ключ: значення" може не збігається з тим, як
було введено:
>>> {'cat': 'кішка', 'dog': 'собака', 'bird': 'птах', 'mouse': 'миша'}
{'bird': 'птах', 'mouse': ' миша ',' dog ':' собака ',' cat ':' кішка '} 

Справа в тім, що в словнику абсолютно не важливий порядок пар, і інтерпретатор виводить


їх у випадковому порядку. Тоді як же отримати доступ до певного елемента, якщо індексація
не можлива в принципі? Відповідь: в словнику доступ до значень здійснюється за ключами,
які беруться у квадратні дужки (за аналогією з індексами рядків і списків).
>>> dic = {'cat': 'кішка', 'dog': 'собака', 'bird': 'птах', 'mouse': 'миша'} 
>>> dic ['cat']
'кішка' 
>>> dic ['bird']
'птах' 

Словники, як і списки, є змінним типом даних: можна змінювати, додавати та видаляти


елементи (пари "ключ: значення"). Спочатку словник можна створити порожнім (наприклад,
d = {}) і лише потім заповнити його елементами. Додавання і зміна має однаковий
синтаксис: словник[ключ] = значення. Ключ може бути як вже існуючим (тоді відбувається
зміна значення), так і новим (відбувається додавання елемента словника). Видалення
елемента словника здійснюється за допомогою функції del().
>>> dic = {'cat': 'кішка', 'dog': 'собака', 'bird': 'птах', 'mouse': 'миша'} 
>>> dic ['elephant'] = 'бегемот' 
>>> dic ['fox'] = 'лисиця' 
>>> dic 
{'fox': 'лисиця', 'dog': 'собака', 'cat': 'кішка', 'elephant': 'бегемот', 
'mouse': 'миша', 'bird': 'птах'} 
>>> dic ['elephant'] = 'слон' 
>>> del(dic['bird']) 
>>> dic 
{'fox': 'лисиця', 'dog': 'собака', 'cat': 'кішка', 'elephant': 'слон', 'mouse':
'миша'} 

Типи даних ключів і значень словників не обов'язково повинні бути рядками. Значення
словників можуть бути більш складними (містити структури даних, наприклад, інші
словники або списки).
>>> d = {1:'one',2:'two',3:'three'} 
>>> d 
{1: 'one', 2: 'two', 3: 'three'} 
>>> d = {10:[3,2,8], 100:[1,10,5], 1000:[23,1,5]} 
>>> d 
{1000: [23, 1, 5], 10: [3, 2, 8], 100: [1, 10, 5]} 
>>> d = {1.1:2, 1.2:0, 1.3:8} 
>>> d 
{1.3: 8, 1.2: 0, 1.1: 2} 
>>> d = {1.1:2, 10:'apple', 'box':100} 
>>> d 
{'box': 100, 10: 'apple', 1.1: 2} 

Словники - це широко використовуваний тип даних мови Python. Для роботи з ними існує
ряд вбудованих функцій.

Практична робота
1. Створіть словник, зв'язавши його з змінною school, і наповніть його даними, які б
відображали кількість учнів у десяти різних класах (наприклад, 1а, 1б, 2б, 6а, 7в і т.д.).

2. Дізнайтеся скільки людей в якомусь класі.

3. Уявіть, що в школі відбулися зміни, внесіть їх до словника:


• в трьох класах змінилася кількість учнів;
• у школі з'явилося два нових класи;
• у школі розформували один з класів.

4. Виведіть вміст словника на екран.

Урок 12. Цикл for у мові програмування Python

У сьомому уроці було розглянуто цикл while. Однак це не єдиний спосіб організації у мові
Python повторення групи виразів. У програмах, написаних на Python, широко застосовується
цикл for, який являє собою цикл обходу заданої множини елементів (символів рядка, об'єктів
списку або словника) та виконання в своєму тілі різних операцій над ними. Наприклад, якщо
є список чисел, і необхідно збільшити значення кожного елемента на дві одиниці, то можна
перебрати список за допомогою циклу for, виконавши над кожним його елементом
відповідну дію.
>>> spysok = [0,10,20,30,40,50,60,70,80,90] 
>>> i = 0 
>>> for element in spysok: 
      spysok[i] = element+2
      i = i + 1 
>>> spysok 
[2, 12, 22, 32, 42, 52, 62, 72, 82, 92] 
У прикладі змінна i потрібна для того, щоб записати змінене значення елемента в список. У
ній зберігається значення індексу чергового елемента списку. У той час, як змінна element
пов'язується зі значенням чергового елемента даних. У заголовку циклу for відбувається
звернення до чергового елементу списку. У тілі циклу елементу з індексом i присвоюється
сума значення поточного (оброблюваного) елемента і двійки. Далі індекс збільшується на
одиницю, а потік виконання програми переходить знову в заголовок циклу for, де
відбувається звернення до іншого елементу списку. Коли всі елементи оброблені цикл for
припиняє свою роботу. Відсутність чергового елемента є умовою завершення роботи циклу
for (для порівняння: в циклі while умовою завершення служить результат False логічного
виразу в заголовку).

З таким само успіхом перебирати можна й рядки, якщо не намагатися їх при цьому
змінювати:
>>> radok = "привіт" 
>>> for bukva in radok:
     print (bukva, end = '*') 
п * р * и * в * і * т * 

Примітка: у вищевказаному прикладі функція print() має також аргумент end — він
вказує, яким символом має закінчуватись поточне виведення на екран. Якщо в функції
print() не вказаний даний аргумент то виведення закінчується символом переходу на
нову стрічку (\n). Спробуйте змінити вищевказаний приклад, написавши, наприклад,
print(bukva, '*'), або print(bukva+' *') і ви побачите, як зміниться результат.

Цикл for використовується і для роботи зі словниками:


>>> d = {1:'one',2:'two',3:'three',4:'four'} 
>>> for key in d: 
      d[key] = d[key] + '!' 
>>> d 
{1: 'one!', 2: 'two!', 3: 'three!', 4: 'four!'} 

Цикл for широко використовується в мові програмування Python, тому що є важливим


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

Практична робота
1. Створіть список, що складається з чотирьох рядків. Потім, за допомогою циклу for,
виведіть рядки по черзі на екран.
2. Змініть попередню програму так, щоб в кінці кожної букви рядка додавалося тире.
(Підказка: цикл for може бути вкладений в інший цикл.)
3. Створіть список, що містить елементи цілочисельного типу, потім за допомогою
циклу перебору змініть тип даних елементів на числа з плаваючою крапкою.
(Підказка: використовуйте вбудовану функцію float ().)
Приклад виконання практичної роботи
>>> # Завдання 1 
>>> list1 = ['hi','hello','good morning','how do you do'] 
>>> for i in list1:
     print(i) 
hi
hello 
good morning
how do you do 
>>> # Завдання 2 
>>> for i in list1:
     for j in i: 
         print(j,end='.')
     print()
h.i. 
h.e.l.l.o. 
g.o.o.d. .m.o.r.n.i.n.g.
h.o.w. .d.o. .y.o.u. .d.o. 
>>> # Завдання 3 
>>> list2 = [56,78,45,23] 
>>> i = 0 
>>> for a in list2:
     list2[i] = float(a) 
     i = i + 1 
>>> list2 
[56.0, 78.0, 45.0, 23.0] 

Урок 13. Функції в програмуванні

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


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

Уявімо собі таку ситуацію. Потрібно написати скрипт, який при виконанні повинен три рази
запитувати у користувача різні дані, але виконувати з ними одні й ті ж дії.
a = int(input('Введіть перше число: '))
b = int(input('Введіть друге число: '))
if a > b: 
      print(a­b)
else: 
     print(b­a) 
c = int(input('Введіть перше число: '))
d = int(input('Введіть друге число: '))
if c > d: 
     print(c­d)
else: 
     print(d­c) 
e = int(input(Введіть перше число: '))
f = int(input('Введіть друге число: '))
if e > f: 
     print(e­f)
else: 
     print(f­e) 

Дана програма знаходить модуль різниці двох чисел. Очевидно, що такий запис вихідного
коду не раціональний: виходять три майже однакових блоки коду. Здавалося б, чому б не
використати цикл while для організації повторення?
i = 0 
while i < 3: 
     a = int(input('Введіть перше число: '))
     b = int(input('Введіть друге число: '))
     if a > b: 
         print(a­b)
     else: 
         print(b­a)
     i = i + 1 

Проте, в цьому випадку є один нюанс. Введені користувачем дані завжди зв'язуються з
змінними a і b. При кожному витку циклу колишні дані втрачаються. Що ж робити, якщо всі
шість чисел, введених користувачем треба зберегти для подальшого використання в
програмі? Розглянемо рішення цієї задачі з використанням функції.
def diff(): 
     m = int(input('Введіть перше число: '))
     n = int(input('Введіть друге число: '))
     if m > n: 
         print(m­n)
     else: 
         print(n­m)
     return m,n 
a,b = diff()
c,d = diff()
e,f = diff() 

def - це інструкція (команда) мови програмування Python, що дозволяє створювати функцію.


diff - це ім'я функції, яке (так само як і імена змінних) може бути майже будь-яким, але
бажано осмисленим. Після в дужках перераховуються параметри функції. Якщо їх немає, то
дужки залишаються порожніми. Далі йде двокрапка, що позначає закінчення заголовка
функції (аналогічно з умовами та циклами). Після заголовка з нового рядка і з відступом
слідують вирази тіла функції. У кінці тіла функції присутня інструкція return (її може й не
бути), яка повертає результат, або результати (як у вищевказаному прикладі) в основну гілку
програми. У даному випадку, якби у функції не було інструкції return, то в основну програму
нічого б не поверталося, і змінним a і b (c і d, а також e і f) числові значення не
присвоювалися б.

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

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

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

Урок 14. Параметри і аргументи функцій. Локальні та


глобальні змінні

Параметри і аргументи функцій


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

Локальні та глобальні змінні


Якщо записати в IDLE наведену нижче функцію, і потім спробувати вивести значення
змінних, то виявиться, що деякі з них чомусь не існують:
>>>def mathem(a,b):
     a = a/2 
     b = b+10
     print(a+b) 
>>>num1 = 100 
>>>num2 = 12 
>>>mathem(num1,num2) 
72.0 
>>>num1 
100 
>>> num2
12 
 >>> a 
Traceback (most recent call last): 
File "<pyshell#10>", line 1, in <module> a 
NameError: name 'a' is not defined 
>>> b 
Traceback (most recent call last): 
File "<pyshell#11>", line 1, in <module> b 
NameError: name 'b' is not defined 

Змінні num1 і num2 не змінили своїх початкових значень. Справа в тому, що у функцію
передаються копії значень. Колишні значення з основної гілки програми залишилися по
колишньому пов'язані з їх змінними.

А ось змінних a і b виявляється немає і в помині (помилка "name 'b' is not defined"


перекладається як "змінна b не визначена"). Ці змінні існують лише в момент виконання
функції і називаються локальними. На противагу їм, змінні num1 і num2 видно не тільки в
зовнішній гілці, а й усередині функції:
>>> def mathem2():
     print(num1+num2) 
>>> mathem2()
112 

Змінні, що визначені в основний гілці програми, є глобальними.


Практична робота
1. Створіть функцію:
def func1(num): 
     n = num * 5 
     print (n) 

Викличте її, передавши в якості аргумента значення глобальної змінної, потім будь-яке число
і, нарешті, будь-який рядок.

2. Виконайте за допомогою інтерпретатора Python скрипт, попередньо виправивши код


функції так, щоб вона повертала значення змінної n:
>>> def func(n):
     if n < 3: 
         n = n*10 
>>> a = 2 
>>> b = func(a) 
>>> a

>>> b  # Чому з змінною не пов'язано жодного значення? 

Урок 15. Перевірочна робота з основ програмування на


Python

Завдання 1
Напишіть код за наступним словесним алгоритмом:
1. Запросити користувача ввести число від 1 до 9. Отримані дані присвоїти змінній x.

2. Якщо користувач ввів число від 1 до 3 включно, то ...


• попросити ввести рядок. Отримані дані присвоїти змінній s;
• попросити користувача ввести число повторів рядка. Отримані дані присвоїти змінній
n, попередньо перетворивши їх у цілочисельний тип;
• виконати цикл повторення рядка n разів;
• 2.4 вивести результат роботи циклу.

3. Якщо користувач ввів число від 4 до 6 включно, то ...


• попросити користувача ввести ступінь, до якої слід звести число. Отримані дані
присвоїти змінній m;
• реалізувати зведення числа x до степеня m;
• вивести отриманий результат.

4. Якщо користувач ввів число від 7 до 9 включно, то виконувати збільшення числа x на


одиницю в циклі 10 разів, при цьому на екран виводити всі 10 чисел.

5. У всіх інших випадках виводити напис "Помилка введення".

Завдання 2
Напишіть програму, яка б виконувала такі завдання:

1. Виводила назву програми "Суспільство на початку XXI століття";


2. Запитувала у користувача його вік;
3. Якщо користувач вводить числа від 0 до 7, то програма виводила напис "Вам до
дитячого садочка";
4. Від 7 до 18 - "Вам до школи";
5. Від 18 до 25 - "Вам у професійний навчальний заклад";
6. Від 25 до 60 - "Вам на роботу";
7. Від 60 до 120 - "Вам надається вибір";
8. Менше 0 або більше 120 - п'ятикратне виведення напису "Помилка! Це програма для
людей! "

У програмі бажано використовувати всі "атрибути" структурного програмування: функцію,


розгалуження і цикл.

You might also like