|
|
Програмування мовою Python: основи та практика Електронний посібник |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ТЕМА 2. ОСНОВИ МОВИ PYTHON |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Жодних спеціальних
інструкцій для формального позначення початку чи кінця коду програми
використовувати не треба. Отже, під
час написання програми мирозміщуємо команди одна за
одною у тому порядку, як вони мають виконуватися.
Команда розташовується на початку рядка. Відступів
робити не потрібно. В кожному рядку, зазвичай, по
одній команді, тобто кожна команда ‒ в новому
рядку. Належна
читабельність коду відіграє важливу роль, тож використання лише одного
пропуску для відступу може ускладнити розуміння коду. Зазвичай рекомендовано
використовувати 4 пропуски для відступу. У синтаксисі
Python помітна
відмінність у формі основної інструкції та
вкладеного блоку інструкцій порівняно з більшістю інших мов програмування, де
для виділення вкладеного
блоку використовують операторні
дужки (наприклад, begin … end у Паскалі або {
… } у Сі). У Python важливою
є різниця між великими та
малими літерами. Більшість зарезервованих слів та вбудованих функцій пишуть малими літерами, за винятком False, None, True.
Окрім основних конструкцій, у
програмі можуть міститися коментарі. Зі зростанням розміру програми читання коду може ускладнюватися. Щоб
забезпечити зрозумілість коду, корисно доповнювати його коментарями природною
мовою, що є стандартною можливістю
багатьох мов програмування, зокрема Python.
Коментарі містять пояснювальний
текст, що полегшує розуміння програм. Тому намагайтеся у своїх програмах
додавати максимум корисних коментарів. Ці коментарі можуть містити
різноманітну інформацію, як-от: припущення, ключові рішення, проблеми, які ви
намагаєтеся розв’язати, або навіть питання, яких ви хочете уникнути. Працювати в інтерактивному режимі можна в
консолі. Для цього слід виконати команду python. Запуститься інтерпретатор, де спочатку
виведеться інформація про інтерпретатор. Далі слідує запрошення до введення (>>>).
Такий режим можна використовувати для
введення інформації або розрахунків. Вводиться команда та натискається
клавіша Enter
(завершення введення команди). Після чого відразу з’являється відповідь.
Трапляється так, що в процесі введення припустилися
помилки або потрібно повторити раніше використовувану команду. Щоб не писати
рядок спочатку, в консолі можна прокручувати список команд, використовуючи
для цього стрілки на клавіатурі. Незважаючи на зручності
інтерактивного режиму роботи
під час написання програм мовою Python, зазвичай, потрібно зберігати вихідний програмний код для
подальшого використання. В такому випадку зберігаються файли, які передаються
потім інтерпретатору на виконання. В інтерпретованих мовах програмування
часто вихідний код називають скриптом. Підготувати скрипти можна у вбудованому
середовищі IDLE або будь-якому
редакторі. Крім того, є спеціальні програми для розробки.
Якщо ви використовуєте IDLE або оболонку GNU/Linux чи BSD, для виходу з командного рядка інтерпретатора необхідно натиснути комбінацію кнопок Ctrl+D або виконати команду exit() (не забувайте написати дужки, «()»).
Якщо ж використовуєте командний рядок Windows,
для виходу з командного рядка інтерпретатора необхідно натиснути комбінацію кнопок Ctrl+Z, а потім кнопку Enter. Використання інтерпретатора командного рядка для
запуску програми щоразу може бути незручним. Замість цього краще
зберігати програми у файлах, щоб виконувати їх за
потреби. Перш ніж розпочати написання програми мовою Python, вам знадобиться
текстовий редактор. Важливо вибрати зручний
редактор, який підтримує інтерактивні підказки, підсвічування синтаксису та
автоматичне вставлення відступів для вкладених інструкцій.
Під час створення програм часто потрібно зберігати та
маніпулювати різними даними. Для цього і призначені змінні. Інтерпретатор Python
виділяє пам’ять, враховуючи тип даних змінної, і вирішує, яку кількість пам’яті резервувати.
Отже, змінні можуть зберігати цілі числа, десяткові значення або символи. Термін «змінні» говорить сам за себе ‒ їх значення
можна змінювати, що дає змогу зберігати різноманітні дані. У мові Python змінна просто посилається на
область пам’яті комп’ютера, де зберігаються дані
(посилання на об’єкт). Для надання імен змінним використовують
ідентифікатори. Змінні можуть зберігати значення різних типів. Для введення дуже великих
або, навпаки, дуже маленьких (за модулем) чисел зручно скористатися зображенням числа у
вигляді мантиси і показника степеня. Як роздільник мантиси
і показника степеня використовують букву е (велику або малу). Наприклад, числовий літерал 1.2е3 позначає число 1,2 103, а числовий літерал 1.2e–5 відповідає числу 1,2·10–5.
Для вказівки на те, що змінну не слід
змінювати, деякі розробники позначають її великими літерами (це рекомендація
розробникам, а не вимога інтерпретатора). У статичних мовах
необхідно вказувати тип кожної змінної, який визначає, скільки місця змінна
займе в пам’яті і що з нею можна зробити. Комп’ютер
використовує цю інформацію, щоб скомпілювати програму в дуже низькорівневу машинну мову. Оголошення типів
змінних допомагає комп’ютеру знайти деякі помилки і працювати швидше, але це
вимагає попереднього продумування і набору коду. Велика частина мов
програмування, наприклад С, С ++ і Java,
вимагають оголошення типів змінних.
За статичної
типізації тип даних визначається на етапі компіляції.
Змінна не може змінити тип, вони статичні.
За динамічної
типізації тип змінної визначається у разі призначення їй
значення. Якщо написати x = 5, динамічна мова визначить, що 5 – це ціле
число, тому змінна x
має тип int.
Ці мови дають змогу досягти більшого, написавши меншу кількість рядків коду. Динамічні мови, зазвичай, повільніші, ніж
статичні, але їх швидкість підвищується, оскільки інтерпретатори стають більш
оптимізованими. Довгий час динамічні мови використовували для коротких
програм (сценаріїв), які часто призначалися для того, щоб підготувати дані
для оброблення довшими програмами, написаними на статичних мовах. Сильна типізація не допускає
виконання операцій за несумісності типів. Слабка типізація допускає
виконання операцій за несумісності типів, внаслідок можна отримати
непередбачуваний результат. У Python все (цілі
числа, числа з рухомою точкою, булеві значення, рядки і різні інші структури
даних, функції і програми) реалізовано як об’єкт. Це дає змогу Python бути стабільною,
чого не вистачає деяким
іншим мовам. Мова Python належить до мов з неявною
строгою динамічною типізацією. Неявна типізація означає, що у разі оголошення змінної її тип не
вказується (за явної типізації тип змінної вказується обов’язково).
Тому замість «присвоєння значення змінної» краще говорити про «зв’язування значення з деяким ім’ям». З іншого боку, якщо мова має статичну типізацію, то тип змінної визначається на етапі компіляції і не може бути змінений на всьому протязі свого життєвого циклу.
В Python
типи даних можна розділити на вбудовані в інтерпретатор (built-in) і невбудовані,
які можна використовувати при імпортуванні відповідних модулів.
У мові Python, завдяки неявній типізації, змінній слід присвоїти значення в процесі її оголошення (ініціалізації). Щоб оголосити
та ініціалізувати змінну,
необхідно просто вказати
її ім’я, потім встановити оператор присвоєння (=)
та вказати значення, з яким ця змінна буде створена. Наприклад: z = 5.
Якщо розглянути складніший вираз,
наприклад z = 5 + 27.0, інтерпретатор обчислює значення виразу справа (5 + 27.0) та
створює об’єкт з отриманим значенням (32.0).
Далі аналогічно до попереднього.
Цікаві особливості спостерігаються у
разі використання цілих чисел у діапазоні від -5 до 256. Об’єкти змінних з
однаковими значеннями в цьому діапазоні завжди матимуть однаковий
ідентифікатор.
У першому випадку змінним x, y, z будуть
надані значення відповідно 2, 3, 4.
В другому випадку змінним a, b, c буде надане
значення 2. Для прикладу розгляньмо
задачу. «Дано дві змінні x та y з певним значенням. Написати програму, за
якою змінна x отримає значення
змінної y, а змінна y отримає значення змінної x».
Незмінність типу даних означає, що
коли змінюється значення змінної, створюється новий об’єкт, і змінна
посилається вже на нього, тобто хоча значення можна змінити, це створить
новий об’єкт з новим значенням, а не змінить існуючий.
Функція print() дає змогу виводити одне або кілька
значень. Щоб вивести декілька значень, їх слід розділити комами (value1[, value2, ...]). Значення можуть мати
різні типи, але в процесі виведення вони будуть автоматично перетворені в
рядковий формат.
Коли виводиться кілька значень, вони розділяються символом (або кількома символами), які вказуються в параметрі sep (‒ пропуск). Після виведення усіх значень до кінця
рядка додається символ (або
кілька символів), вказані в параметрі end (‒ символ перенесення рядка і перехід на
новий). Функція print() виводить значення на екран (sys.stdout).
Але з параметром file
можна змінити місце виведення, наприклад, на файл. При цьому, якщо параметр flush встановлено на False, значення
будуть записані до файлу без очищення буфера.
Перенаправлення виведення може бути корисним під час роботи з файлами.
Під час написання програм часто виникає
потреба отримати дані від користувача для подальшої обробки. У мові Python для
цього використовується функція input([prompt]), яка отримує дані зі стандартного пристрою введення
(sys.stdin,
тобто клавіатури). Необов’язковий параметр prompt призначений для виведення запиту на введення і
відображається на стандартному пристрої виведення.
Для прикладу розгляньмо програму,
за якою запитуватиметься ім’я користувача і виводитиметься привітання.
Розгляньмо ще одну
задачу: «Створімо програму, яка обчислить суму двох чисел, які
введе користувач». Наш алгоритм буде включати виведення запиту для введення
чисел, зчитування цих чисел, обчислення їх суми та виведення результату на
екран.
Програма після запуску та введення значень, як-от 2 та 3, повертає
результат 23, хоча очікувалося, наприклад, 5. Ця
проблема виникає через те, що
функція input()
повертає значення у формі рядкового типу даних.
Операція «+» для рядкових змінних здійснює
їх об’єднання (деталі з рядковими змінними буде розглянуто пізніше). Отже, необхідно перетворити отримані від функції input()
рядкові значення у числовий формат, використовуючи
функції int() або float() відповідно.
1. Написати програму обчислення
вартості покупки, яка складається із кількох зошитів та олівців. 2. Написати програму обчислення
вартості покупки, яка складається із кількох зошитів та такої самої кількості
обкладинок до них. 3. Написати програму обчислення
вартості поїздки на авто на дачу. Вихідними даними є: відстань до дачі в км;
кількість бензину, яку витрачає авто на 4. Написати програму обчислення
величини доходу за внеском. Відсоткова ставка (у % річних) і час зберігання
(в днях) задаються під час роботи програми. 5. Написати програму обчислення площі
трикутника, якщо відомо координати його кутів. 6. Написати програму обчислення
розміру оплати за електроенергію за введеним значенням витрати електроенергії
і тарифу. 7. Написати програму обчислення
ідеальної ваги людини за формулою: «Ід. Вага = ріст(см) – 100». 8. Написати програму визначення
моменту зустрічі двох автомобілів, якщо відома відстань між пунктами, звідки
вони виїхали назустріч один одному одночасно, та їх швидкості. 9. Написати програму, що обчислює
кількість населення планети через рік, якщо задано поточну кількість
населення, рівень народжуваності (у %) та рівень смертності (у %). 10. Написати програму, яка б виводила
таблицю курсу валют. Ø Програма, написана мовою Python, це послідовність команд. Для виконання цих команд
використовується спеціальна програма-інтерпретатор. Ø У програмі можуть використовуватися змінні. У Python змінна посилається на значення, а не
містить його, як у багатьох інших мовах програмування. Ø У Python є декілька типів даних. Числові значення реалізуються даними типу int (цілі числа), float (дійсні числа) і complex (комплексні
числа). Для позначення уявної частини комплексного числа використовують
літеру j (велику чи малу). Двійкові, вісімкові
й шістнадцяткові літерали
вводять відповідно з
префіксами 0b, 0o і 0x (друга літера після нуля може бути великою або малою). Ø Тексту відповідає тип str.
Текстові літерали беруться у подвійні (або одинарні) лапки. Ø За допомогою типу bool реалізуються логічні
значення. Дані цього типу можуть набувати
значення True (істина) і False (хиба). Логічні значення є підвидом
цілочислового типу даних, а отже, можуть використовуватися в арифметичних обчисленнях. Ø Тип змінної явно зазначати не потрібно ‒ він
визначається на основі значення, на яке посилається змінна. Ø Для введення даних
із консолі використовують функцію input(), а для виведення ‒ функцію print(). Ø Для реалізації в програмному коді коментаря використовують символ #. Усе, що
розташоване праворуч від цього символу, інтерпретатор ігнорує.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||