Professional Documents
Culture Documents
f0e95683-b6dd-4259-8f9b-2161b7a4402d
f0e95683-b6dd-4259-8f9b-2161b7a4402d
Програма курсу
Поверхневе уявлення про мови програмування та їх історичний розвиток, способи трансляції
програмного коду. Типи даних (цілі числа, числа з плаваючою крапкою, рядки) та структури
даних (рядки, списки, словники), змінні, вирази, розгалуження (if, if-else, if-elif-else) і цикли
(while, for). Введення і виведення даних. Поняття про функції, локальних і глобальних
змінних.
Авторські права
Матеріали, складові даний посібник, поширюються на умови ліцензії GNU FDL. Підручник
не містить незмінних розділів. Автор посібника вказано на першій сторінці обкладинки.
Назви, що зустрічаються в книзі можуть бути торговими марками відповідних власників.
Трансляція
Раніше було сказано, що для перекладу коду з однієї мови програмування (наприклад, мови
високого рівня) на іншу (наприклад, машинну мову ) потрібна спеціальна програма -
транслятор.
Механізм цього перекладу вельми складний, при цьому виділяють два основних способи
трансляції - компіляція програми або її інтерпретація.
При компіляції весь вихідний програмний код (той, який пише програміст) відразу
переводиться в машинний. Створюється так званий окремий виконуваний файл, який ніяк не
пов'язаний з вихідним кодом. Виконання виконуваного файлу забезпечується операційною
системою.
При інтерпретації виконання коду відбувається послідовно (можна сказати, рядок за рядком).
Операційна система взаємодіє з інтерпретатором, а не вихідним кодом.
Виконання скомпільованої програми відбувається швидше, тому що вона являє собою
готовий машинний код. Однак на сучасних комп'ютерах зниження швидкості виконання при
інтерпретації зазвичай не помітне.
Історія
Мова програмування 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. Красиве краще за потворне.
8. Special cases aren't special enough to break Виняткові випадки не настільки важливі, щоб
the rules. порушувати правила.
10. Errors should never pass silently. Помилки ніколи не повинні замовчуватися.
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. очевидний, якщо ти не голландець.
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. Просто запустіть дистрибутив
(перед цим, звичайно, його треба закачати та інсталювати). Запрошення введення не змусить
себе довго чекати, воно виглядає так:
>>>
Прокручувати список раніше введених команд можна за допомогою комбінацій Alt + N, Alt +
P.
Створення скриптів
Незважаючи на зручності інтерактивного режиму роботи при написанні програм на Python,
зазвичай потрібно зберігати вихідний програмний код для подальшого використання. У
такому випадку підготовлюються файли, які передаються потім інтерпретатору на виконання.
По відношенню до інтерпретованих мов програмування часто вихідний код називають
скриптом. Файли з кодом на Python зазвичай мають розширення py.
Підготувати скрипти можна в тому ж середовищі IDLE. Для цього, після запуску програми в
меню слід вибрати команду File → New Window (Crtl + N), відкриється нове вікно. Потім
бажано відразу зберегти файл (не забуваємо про розширення py). Після того як код буде
підготовлений, знову збережіть файл (щоб оновити збереження). Ну і нарешті, можна
запустити скрипт, виконавши команду меню Run → Run Module (F5). Після цього в першому
вікні з'явиться результат виконання коду. (Примітка: якщо набирати код, не зберігши
спочатку файл, то підсвічування синтаксису буде відсутнє.)
Підготуйте скрипт (з прикладами). Запустіть його на виконання.
Насправді скрипти можна готувати в будь-якому текстовому редакторі (бажано, щоб він
підтримував підсвічування синтаксису мови Python). Крім того, існують спеціальні програми
для розробки.
Запускати підготовлені файли можна не тільки в IDLE, але і в консолі (для Linux) за
допомогою команди
python адреса/ім'я_файлу
Дані та їх типи
Можна помітити, що все, що ми робимо, ми робимо над чимось - якимись предметами або
об'єктами. Ми міняємо властивості об'єктів та їх можливості. Програми для комп'ютерів
також маніпулюють якимись об'єктами (назвемо їх поки даними).
Очевидно, дані бувають різними. Дуже часто комп'ютерній програмі доводиться працювати з
числами і рядками. Наприклад, на минулому уроці ми "маніпулювали" числами, виконуючи
над ними арифметичні операції. Можна сказати, що операція додавання виконувала зміну
першого числа на величину другого, або множення збільшувало одне число в кількість разів,
що відповідає другому числу.
Числа у свою чергу також бувають різними: цілими, дробовими, можуть мати величезне
значення або дуже довгу дробову частину. При знайомстві з мовою програмування Python ми
точно зіткнемося з трьома типами даних:
- Цілі числа (integer) - позитивні і негативні цілі числа, а також 0 (наприклад, 4, 687, -45, 0).
- Числа з плаваючою крапкою (float point) - дробові числа (наприклад, 1.45, -3.789654,
0.00453). Примітка: роздільником цілої і дробової частини служить крапка, а не кома.
- Рядки (string) - набір символів, укладених в лапки (наприклад, "ball", "What is your name?",
'DkfjUUv', '6589 '). Примітка: лапки в Python можуть бути одинарними або подвійними.
Операції
Можна сказати, що операція - це виконання якихось дій над даними (операндами). Для
виконання конкретних дій потрібні спеціальні інструменти — оператори.
Однак, бувають випадки, коли програма отримує дані у вигляді рядків, а оперувати повинна
числами (або навпаки). У такому випадку використовуються спеціальні функції (особливі
оператори), що дозволяють перетворити один тип даних в іншій. Так функція int ()
перетворює переданий їй рядок (або число з плаваючою крапкою) в ціле число, функція str ()
перетворює переданий їй аргумент в рядок, float () - в дробове число.
Вираз Результат виконання
int ("56") 56
int (4.03) 4
int ("comp 486") Помилка
Змінні
Дані зберігаються в комірках пам'яті комп'ютера. Коли ми вводимо число, воно поміщається в
пам'ять. Але як дізнатися, куди саме? Як надалі звертатися до цих даних? Раніше, при
написанні програм на машинній мові, звернення до комірок пам'яті здійснювали за
допомогою вказівки регістрів. Але вже з появою асемблерів, при зверненні до даних стали
використовувати так звані змінні. Механізм зв'язку між змінними та даними може
розрізнятися в залежності від мови програмування і типу даних. Поки досить запам'ятати, що
дані зв'язуються з яких-небудь ім'ям і надалі звернення до них можливо з цього імені.
У програмі на мові 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. Які існують правила і рекомендації для іменування змінних?
На минулому уроці були описані три типи даних: цілі, дробові числа, а також рядки. Також
виділяють логічний тип даних. У цього типу всього два можливих значення: True (правда) - 1
і False (неправда) - 0. Тільки ці значення можуть бути результатом логічних виразів.
Логічні оператори
Говорячи природною мовою (наприклад, українською) ми позначаємо порівняння словами
"дорівнює", "більше", "менше". У мовах програмування використовуються спеціальні знаки,
подібні тим, які використовуються в математичних виразах: > (більше), < (менше), >=
(більше або дорівнює), <= (менше або дорівнює).
Новими для вас можуть виявитися позначення рівності: == (два знаки “дорівнює”); а також
нерівності != (знак оклику і знак “дорівнює”). Тут слід звернути увагу на наступне: не
плутайте операцію присвоювання, що позначається у мові Python одиночним знаком
"дорівнює", і операцію порівняння (два знаки "дорівнює"). Присвоєння і порівняння - зовсім
різні операції.
Щоб отримати істину (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
Практична робота
1. Присвойте двом змінним будь-які числові значення.
2. Складіть чотири складних логічних вирази за допомогою оператора and, два з яких
повинні давати True, а два інших - False.
3. Аналогічно виконайте п. 2, але вже використовуючи оператор or.
4. Спробуйте використовувати у складних логічних виразах роботу зі змінними
рядкового типу.
Хід виконання програми може бути лінійним, тобто таким, коли вирази виконуються,
починаючи з першого і закінчуючи останнім рядком, по порядку, не пропускаючи жодного
рядка коду. Але частіше буває зовсім не так. При виконанні програмного коду деякі його
ділянки можуть бути пропущені.
Щоб краще зрозуміти чому, проведемо аналогію з реальним життям. Припустимо, людина
живе за розкладом (можна сказати, розклад - це своєрідний "програмний код", який слід
виконати). У її розкладі о 18.00 запланований похід до басейну. Проте людині надходить
інформація, що воду злили, і басейн не працює. Цілком логічно скасувати своє заняття з
плавання. Тобто однією з умов відвідування басейну має бути його функціонування, інакше
повинні виконуватися інші дії.
Розшифруємо цей вираз: якщо змінна numbig менша за 100 то виконується дія c=a**b
Перший рядок конструкції if - це заголовок, в якому перевіряється умова виконання рядків
коду після двокрапки (тіла конструкції). У вищевказаному прикладі тіло містить всього лише
один вислів, однак частіше їх буває набагато більше.
Про Python говорять, що це мова програмування з досить ясним і легко читаним кодом. Це
пов'язано з тим, що в ньому зведені до мінімуму допоміжні елементи (дужки, крапки з
комою), а для поділу синтаксичних конструкцій використовуються відступи від початку
рядка. Враховуючи це, в конструкції if код, який виконується при дотриманні умови, повинен
обов'язково мати відступ вправо. Решта коду (основна програма) повинна мати той же
відступ, що й слово if. Зазвичай відступ робиться за допомогою клавіші Tab.
Можна зобразити блок-схему програми, яка містить інструкцію if, в такому вигляді:
Зустрічається і більш складна форма розгалуження: if-else. Якщо умова при інструкції if
виявляється хибною, то виконується блок коду при інструкції else.
tovar1 = 50
tovar2 = 32
if tovar1 + tovar2 > 99:
print("Сума не достатня")
else:
print("Чек сплачено" )
Логіка виконуваної програми може бути складніша, ніж вибір однієї з двох гілок. Наприклад,
залежно від значення тієї чи іншої змінної, може виконуватися одна з трьох (або більше)
гілок програми.
Зазвичай таку проблему можна вирішити за допомогою вкладених конструкцій 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)
Практична робота
1.Напишіть програму за наступним описом:
a) двом змінним присвоюються числові значення;
b) якщо значення першої змінної більше другої, то знайти різницю значень змінних
(відняти від першої другу), результат присвоїти третій змінній;
c) якщо перша змінна має менше значення, ніж друга, то третю змінну пов'язати з
результатом суми значень двох перших змінних;
d) у всіх інших випадках, присвоїти третій змінній значення первої змінної;
e) вивести значення третьої змінної на екран.
2.Придумайте програму, в якій би використовувалася інструкція if-elif-else. Кількість гілок
повинна бути як мінімум чотири.
Цикли - це інструкції, що виконують одну і ту ж саму послідовність дій, поки діє задана
умова.
У реальному житті ми досить часто стикаємося з циклами. Наприклад, ходьба людини -
цілком циклічне явище: крок лівою, крок правою, знову лівою-правою і т.д., поки не буде
досягнута певна мета (наприклад, школа чи магазин). У комп'ютерних програмах поряд з
інструкціями розгалуження (тобто вибором шляху дії) також існують інструкції циклів
(повторення дії). Якби інструкцій циклу не існувало, довелося б багато разів вставляти в
програму один і той же код підряд стільки разів, скільки потрібно виконати однакову
послідовність дій.
Може виникнути питання: "Навіщо змінювати a або b?". Коли виконання програмного коду
доходить до циклу while, виконується логічний вираз в заголовку, і, якщо було отримано
True, виконуються вкладені вирази. Після потік виконання програми знову повертається в
заголовок циклу while, і знову перевіряється умова. Якщо умова ніколи не буде змінюватись,
то не буде причин зупинки циклу і програма зациклиться. Щоб цього не сталося, необхідно
передбачити можливість виходу з циклу. Таким чином, змінюючи значення змінної в тілі
циклу, можна довести логічний вираз до False і цикл завершиться.
Цей приклад виводить числа Фібоначчі - ряд чисел, в якому кожне наступне число дорівнює
сумі двох попередніх: 0, 1, 1, 2, 3, 5, 8, 13 і т.д. Скрипт виводить дванадцять членів ряду: два
(0 і 1) виводяться поза циклом і десять виводяться в результаті виконання циклу.
Практична робота
1. Напишіть скрипт на мові програмування Python, що виводить ряд чисел Фібоначчі
(див. приклад вище). Запустіть його на виконання. Потім змініть код так, щоб
виводився ряд чисел Фібоначчі, починаючи з п'ятого члена ряду і закінчуючи
двадцятим.
2. Напишіть цикл, що виводить ряд парних чисел від 0 до 20. Потім, кожне третє число в
ряді від -1 до -21.
3. Самостійно придумайте програму на Python, в якій би використовувався цикл while.
Комп'ютерні програми обробляють дані, здійснюючи над ними операції, які задав програміст,
і які були обумовлені поставленими завданнями. Дані в програму можна "закласти" в процесі
її розробки. Однак така програма завжди буде обробляти одні й ті ж дані і повертати один і
той же результат. Найчастіше потрібно зовсім інше - програма повинна обробляти різні
(відносно, в певному діапазоні) дані, що надходять до неї з зовнішніх джерел. В якості
останніх можуть виступати файли або клавіатура.
Коли інформація вводиться з клавіатури, а результати виводяться на екран монітора, то
можна говорити про інтерактивний режим роботи програми. Вона обмінюється інформацією
із зовнішнім для неї середовищем: може виводити і отримувати дані в процесі виконання, і не
є замкнутою сама на собі. З виведенням даних ми вже почасти знайомі: виведенням на екран
(і не тільки) в мові програмування Python займається функція print().
З прикладів видно, що дані повертаються у вигляді рядка, навіть якщо було введено число. У
більш ранніх версіях 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 місце проживання"
(замість слів ім'я, вік, місце проживання повинні бути відповідні дані, що введені
користувачем).
Рядки вже згадувалися в уроці про типи даних; розглянемо їх більш докладно.
Рядок (String) - це складний тип даних, що представляє собою послідовність символів.
Рядки в мові програмування Python можуть укладатися як в одиночні, так і подвійні лапки.
Однак, початок і кінець рядка повинні обрамлятися однаковим типом лапок.
Існує спеціальна функція len (), яка дозволяє виміряти довжину рядка. Результатом виконання
даної функції є число, що показує кількість символів в рядку.
Також для рядків існують операції конкатенації (+) і дублювання (*).
>>> len ('It is a long string')
19
>>> '!!!' + ' Hello World ' + '!!!'
'!!! Hello World !!!'
>>> '' * 20
''
Можна витягати з рядка не один символ, а декілька, тобто отримувати зріз (підрядок).
Оператор витягнення зрізу з рядка виглядає так: [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. Списки - змінювані послідовності
На відміну від рядків, списки - це змінювані послідовності. Якщо уявити рядок як об'єкт в
пам'яті, то коли над ним виконуються операції конкатенації і повторення, то це рядок не
змінюється, а в результаті операції створюється інший рядок в іншому місці пам'яті. У рядок
не можна додати новий символ або видалити існуючий, не створивши при цьому нового
рядка. Зі списком справа йде інакше. При виконанні операцій інші списки можуть не
створювати, а змінюватися безпосередньо оригінал. Зі списків можна видаляти елементи,
додавати нові. При цьому слід пам'ятати, багато залежить від того, як ви розпоряджаєтеся
змінними. Бувають ситуації, коли списки таки копіюються. Наприклад, результат операції
присвоюється іншій змінній.
Як бачимо, при спробі змінити один елемент рядка, з'являється повідомлення про помилку
(виділено червоним).
У списку можна замінити цілий зріз:
>>> 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. Додайте до цього списку-зріза два нові елементи і знову виведіть його.
Одним із складних типів даних (поряд з рядками і списками) у мові програмування Python є
словники.
Словник (Dictionary) - це змінюваний (як і список) невпорядкований (на відміну від рядків і
списків) набір пар "ключ: значення".
Щоб уявлення про словник стало більш зрозумілим, можна провести аналогію зі звичайним
словником, наприклад, англо-українським. На кожне англійське слово в такому словникові є
українське слово-переклад: cat - кішка, dog - собака, table - стіл і т.д. Якщо англо-український
словник описувати за допомогою Python, то англійські слова будуть ключами, а українські -
їхніми значеннями:
{'cat': 'кішка', 'dog': 'собака', 'bird': 'птах', '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в і т.д.).
У сьомому уроці було розглянуто цикл 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+' *') і ви побачите, як зміниться результат.
Практична робота
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]
Уявімо собі таку ситуацію. Потрібно написати скрипт, який при виконанні повинен три рази
запитувати у користувача різні дані, але виконувати з ними одні й ті ж дії.
a = int(input('Введіть перше число: '))
b = int(input('Введіть друге число: '))
if a > b:
print(ab)
else:
print(ba)
c = int(input('Введіть перше число: '))
d = int(input('Введіть друге число: '))
if c > d:
print(cd)
else:
print(dc)
e = int(input(Введіть перше число: '))
f = int(input('Введіть друге число: '))
if e > f:
print(ef)
else:
print(fe)
Дана програма знаходить модуль різниці двох чисел. Очевидно, що такий запис вихідного
коду не раціональний: виходять три майже однакових блоки коду. Здавалося б, чому б не
використати цикл while для організації повторення?
i = 0
while i < 3:
a = int(input('Введіть перше число: '))
b = int(input('Введіть друге число: '))
if a > b:
print(ab)
else:
print(ba)
i = i + 1
Проте, в цьому випадку є один нюанс. Введені користувачем дані завжди зв'язуються з
змінними a і b. При кожному витку циклу колишні дані втрачаються. Що ж робити, якщо всі
шість чисел, введених користувачем треба зберегти для подальшого використання в
програмі? Розглянемо рішення цієї задачі з використанням функції.
def diff():
m = int(input('Введіть перше число: '))
n = int(input('Введіть друге число: '))
if m > n:
print(mn)
else:
print(nm)
return m,n
a,b = diff()
c,d = diff()
e,f = diff()
Після функції йде, так звана, основна гілка програми, в якій змінним попарно присвоюється
результат виконання викликаної функції. У інших ситуаціях, коли функція не вертає значень,
її виклик не зв'язується зі змінною.
Сама функція виконуються лише тоді, коли вона викликається в основній гілці програми. Так,
наприклад, якщо функція присутня у вихідному коді, але ніде не викликається в ньому, то
вона не буде виконуватись в програмі жодного разу.
Практична робота
1. Напишіть функцію, яка обчислює суму трьох чисел і повертає результат в основну
гілку програми.
2. Придумайте програму, в якій з однієї функції викликається друга. При цьому жодна з
них нічого не повертає в основну гілку програми, обидві повинні виводити результати
своєї роботи за допомогою функції print().
Змінні num1 і num2 не змінили своїх початкових значень. Справа в тому, що у функцію
передаються копії значень. Колишні значення з основної гілки програми залишилися по
колишньому пов'язані з їх змінними.
Викличте її, передавши в якості аргумента значення глобальної змінної, потім будь-яке число
і, нарешті, будь-який рядок.
Завдання 1
Напишіть код за наступним словесним алгоритмом:
1. Запросити користувача ввести число від 1 до 9. Отримані дані присвоїти змінній x.
Завдання 2
Напишіть програму, яка б виконувала такі завдання: