Перші програми на Python
Перші програми на мові програмування Python, створення, збереження та запуск файлу програми
Записувати формули у Python Shell і отримувати за ними результати, звісно, можна, але проблема у тому, що записане у Shell не зберігається при його закритті. Якщо потрібно порахувати щось іще раз за тими ж формулами але з іншими змінними, тоді усе потрібно робити знову. Чи можна зберегти записане для багаторазового використання з різними даними? Так. Тільки для цього потрібно створити не одноразовий запис у Shell, а окрему програму, зберегти її як файл на жорсткому диску і потім використовувати стільки разів, скільки буде потрібно.
Отже, настав час створити свою першу програму на мові Python.
Оскільки найпростішими є математичні програми обчислювального характеру, в яких потрібно порахувати щось за відомою формулою, то розпочнемо саме з такого типу завдань.
Практично усі програми, на якій би мові програмування вони не були написані, складаються з трьох етапів:
Отримання програмою даних, які потрібно буде обробити
Обробка цих даних
Виведення результату обробки.
Розглянемо ці етапи на прикладі такої задачі:
Завдання 1
З клавіатури вводиться два числа. Вивести їх суму.
Для написання програми слід попередньо виконати (хоча б у себе в голові), принаймні, дві дії:
Розробити алгоритм розв'язання задачі і створити її модель.
Визначитися з кількістю потрібних змінних і їх типами.
Алгоритм цієї програми досить простий:
Беремо числа
Додаємо
Виводимо результат
Кількість потрібних змінних визначаємо, виходячи з таких міркувань: оскільки нам потрібно додавати два числа, значить, уже, як мінімум, дві змінні нам потрібні - під перше й під друге число. Результат додавання ми теж знати захочемо, а, отже, потрібна третя змінна - під відповідь. Отже, всього три змінні. Назвемо їх a, b і s (тому що "сума"). Не забуваймо, що регістр (велика чи маленька літери) для Python МАЄ ЗНАЧЕННЯ.
Отже, переходимо до написання програми. Якщо ми створюємо не одноразовий код, а програму, яка буде використовуватися багато разів, тоді потрібно вводити усі команди в редакторі коду. І тут, в залежності від того, що саме буде у вас редактором коду, слід звернути увагу на деякі незначні відмінності в їх використанні.
В IDLE Python
Якщо ви працюєте в середовищі Python Shell, тоді потрібно перейти за File → New File
Після цього у вас відкриється ще одне вікно з заголовком untitled. От там і будемо писати програму.
Сам же IDLE Shell тепер можна закрити або згорнути. Це вікно під час створення програми нам не потрібне але у ньому будуть відображатися результати роботи програми. Та, навіть якщо ми його і закриємо, то нічого страшного не станеться - після запуску програми воно відкриється саме.
В програмах-оболонках
В програмах-оболонках нічого відкривати не треба. Там уже усе, що треба, відкрите. Редактор коду - у верхній частині. Єдине, що потрібно зробити в середовищі PyScripter - це ОЧИСТИТИ редактор коду від прописаного там за промовчанням шаблону (усе виділити й натиснути клавішу Delete)
У мобільному додатку
Початок роботи в мобільному додатку Pydroid теж безпроблемний, оскільки в ньому редактор коду - це основне вікно програми. Саме там і пишемо.
В онлайн-сервісах
Отже, поїхали:
a = input()
В першому рядку нашої програми ми даємо комп'ютеру завдання виконати такі дії:
прочитати те, що користувачем буде введене з клавіатури;
запам'ятати прочитане як значення змінної a
Обидві ці дії здійснюються одночасно за допомогою команди input (з англ. - увести).
Чесно кажучи, такий запис буде не дуже комфортним для користувача, оскільки тоді програма просто чекатиме введення чогось. Чого? Користувач вашої програми про це повинен здогадатися сам? Чи ви муситимете до програми додати ще й інструкцію з експлуатації?
Щоб ваша програма сама підказувала користувачеві програми, що саме і в який момент слід робити, команду input можна трохи доповнити:
a = input('Введіть перше число: ')
От тепер уже програма спочатку виведе повідомлення про те, чого вона від користувача очікує, а вже потім зупиниться і чекатиме отримання даних:
Зверніть увагу на пробіл, зроблений після двокрапки. Це для того, що уведене число не "приліпилося" устик до фрази "Введіть перше число:". Якщо ви введемо, наприклад, число 5, тоді без пробілу буде так:
Введіть перше число:5
А от з пробілом усе виглядатиме значно краще:
Введіть перше число: 5
Для введення другого доданка нашої суми натискаємо Enter і з нового рядка записуємо аналогічне:
b = input('Введіть друге число: ')
Запам'ятайте: у Python кожна команда пишеться з нового рядка!
Усе. Обидва доданка є. Можна обчислювати суму:
s = a + b
Комп'ютер "виймає" з пам'яті число, записане як a, друге число з ячейки пам'яті, позначеної іменем b, додає їх і результат записує в місце, призначене для результату обчислення і назване іменем s.
Після того, як обчислення виконані, ми захочемо знати відповідь (а, інакше, для чого ж ми тоді створювали програму!). Отже, потрібно подати команду вивести цей результат. Результатом у нас є значення змінної s, тож її і виводимо:
print(s)
Тут написано: "надрукувати (print) , те, що міститься у ячейці пам'яті, позначеній як s".
Отже, повний код нашої програми має такий вигляд:
a = input('Введіть перше число: ')
b = input('Введіть друге число: ')
s = a + b
print(s)
Між іншим, якщо ви працюєте в середовищі IDLE Python і вирішили схитрити, не набирати код власноруч, а просто скопіювали його з цієї веб-сторінки і хочете вставити в редактор коду, то майте на увазі, що традиційна для вставлення комбінація клавіш Ctrl+V спрацює тільки в тому випадку, якщо у вас у цей момент на комп'ютері клавіатура перемкнута на англійську розкладку. Інакше, вставлення можливе через клік правою кнопкою миші і вибір з контекстного меню команди Paste (англ. - вставити)
Після того, як набрано код, програму можна запускати на виконання. Знов-таки, спосіб запуску залежатиме від того, в якому середовищі ви працюєте.
IDLE Python
В IDLE Python це робиться через меню Run → Run Module
Після цього вам буде запропоновано зберегти файл програми. Уникнути цієї процедури неможливо, вона обов'язкова, інакше ваша програма не запуститься. І це дуже правильно! Зате ви ніколи не втратите результати своєї роботи через якийсь збій в роботі комп'ютера чи помилку в коді. Отже, натискаємо кнопку OK вказуємо місце на диску, де зберігатиметься файл програми, даємо цьому файлу нормальне зрозуміле ім'я. Так, якщо ви створюєте програму для себе, то в імені програми повинно бути коротко позначене те, що вона робить (наприклад, так SumDvohChys - бо "сума двох чисел"), якщо ви здаватимете цей файл на перевірку, тоді ваше прізвище. Файл програми зберігається з розширенням .py, тобто в нашому випадку буде SumDvohChys.py
Програми-оболонки
І в PyScripter, і в Thonny для запуску програми потрібно на панелі інструментів відшукати кнопку з трикутничком:
Трохи схоже на Scratch: там теж запуск програми відбувався після кліку на зеленій кнопці, а зупинка - на червоній, правда ж?
Після запуску Thonny так само, як і IDLE Python вимагатиме спочатку зберегти файл програми, а от PyScripter дозволяє запуск програми і без збереження файлу.
Збереження файлу програми в PyScripter виконується стандартним чином за Файл → Save As або Файл → Зберегти (Ctrl+S), якщо файл до цього зовсім не зберігався
Запуск програм в мобільному додатку і в онлайн-середовищах було описано раніше.
Після збереження програми вводимо на запит програми які-небудь числа, наприклад, 2 та 3 і Oooops!
А ніщо ж не віщувало ніяких несподіванок! Виявляється, 2+3 буде не 5, а 23. Зовсім як у короткометражці "Альтернативна математика"! Що ж відбулося? Чому замість додавання Python виконав конкатенацію, тобто злиття двох чисел в одне, не додав 2 і 3, а просто поставив їх поряд, утворивши замість правильної відповіді 5 неправильну - 23?
Це усе тому, що під час написання програми ми не врахували таку річ як тип даних! То ж настав час розібратися що це таке і для чого воно потрібне.
Чи виникали у вашому житті такі ситуації, коли вам давали (або ви самі брали) у руки щось важке або гаряче, але при цьому завчасно не подбали про те, куди це все поставити? Як воно, відчуття, коли того, що в руках, треба якомога швидше позбутися (бо ж пече!), але нема куди?
Дурнувата ситуація, але як би там не було, ми з неї на ходу якось викручувалися, щось на ходу придумували, адже так? От тільки комп'ютер "на ходу" нічого придумати не може (принаймні, на сучасному етапі розвитку комп'ютерної техніки), бо він діє чітко за алгоритмами. Якщо алгоритму на такий випадок не передбачено, то ніякої дії й не настане.
От питання типів даних і виникло тому, що, коли ми передаємо комп'ютеру якісь дані (слова, числа тощо), він повинен ці наші дані кудись "покласти", десь їх зберігати поки з ними виконуються якісь дії, а, значить, ми повинні його, бажано завчасно, попередити про те, скільки місця в пам'яті він повинен виділити під нашу інформацію: якщо наші дані є цілими числами, то відшукати і зарезервувати місце, куди можна буде потім записати 2 байти даних, якщо дробове - то місце під 4 байти і т.д.
Усього різних типів даних досить багато, але ми будемо використовувати ті з них, які зустрічаються найчастіше:
тип int (з англ. integer - цілий) - цілі числа;
тип float (з англ. float - плавати) - дробові числа з т.зв. "плаваючою комою", фактично будь-який десятковий дріб;
тип str (з англ. string - рядок) - текстовий тип даних, наприклад, слово;
тип boolean (тип даних носить ім'я англійського математика Джорджа Буля - основоположника математичної логіки, одного з розробників двійкової системи числення) - займає лише 1 біт (true або false)
Ось у цьому неврахуванні типу даних і криється причина помилки! Ми не вказали Python, з яким типом даних йому доведеться працювати, а тому він сприйняв наші числа так, як у нього за замовчуванням: усе, що вводиться, має текстовий тип. Для нього це не числа 2 і 3, а символ "2" і символ "3". Зрозуміло, що символьні величини додавати неможливо. От як додати "А" і "Б"? Та тільки так: "АБ". Замість додавання можна виконати тільки злиття символів - конкатенацію, що успішно й виконала наша програма!
Отже, доопрацюємо програму, дописавши функції перетворення типів даних. Оскільки можна додавати не тільки цілі, а й дробові числа, то візьмемо більш загальний варіант і "скажемо" Python, що числа, які буде введено з клавіатури слід сприймати як десяткові дроби:
a = float(input('Введіть перше число: '))
b = float(input('Введіть друге число: '))
s = a + b
print(s)
Додана в перший і другий рядки функція float виконує "конвертацію" текстових величин, прочитаних програмою, в числовий і отепер уже програма працюватиме правильно:
Зверніть увагу на те, що після додавання цілих чисел відповідь ми отримали у вигляді десяткового дробу 5.0 (ще не забули про крапку між цілою і дробовою частинами?). Це тому, що ми наказали Python введені числа вважати дробовими, а сума двох дробових чисел буде числом дробовим. Якби ми написали не float, а int
a = int(input('Введіть перше число: '))
b = int(input('Введіть друге число: '))
...
тоді вхідні дані вважалися б цілими числами, а, отже, й відповідь би отримали у цілочисленому вигляді як число 5.
Коли використовувати float, а коли int, залежить від змісту програми. Наприклад, довжина сторони прямокутника може бути виражена дробовим числом, тому там треба float, а от кількість людей - ні, тому там тільки int.
Якщо у програмі при наборі допущено помилки, то ви одразу отримаєте повідомлення про це:
У такому повідомленні обов'язково зазначається номер рядка, в якому допущено помилку (ось для чого доцільно в налаштуваннях середовища виставити відображення нумерації рядків) і коротко описується суть помилки (наприклад, у даному випадку було використане слово, яке невідоме Python, тому що написане з помилкою - не float, як потрібно, а flout, як воно, власне, і читається). Усе, що потрібно, це узяти в руки англо-український словник і перекласти, що там червоними буквами написано.
На цій помилці, до речі, добре видно ще одну особливість роботи Python як інтерпретованої мови програмування. Python виконує програму по одному рядку: прочитує код, перевіряє на помилки, "перекладає" на мову, зрозумілу процесору, і відправляє йому на виконання, поки процесор опрацьовує перший рядок, інтерпретатор розбирається з другим і т.д. От і у нашому випадку саме так і сталося. У першому рядку програми ніяких помилок не було, тому цей рядок було передано процесору і виконано: виведене повідомлення про те, що треба вводити, введене число прочитано. У другому ж рядку виявилася помилка, тому програма зупинилася й вимагає її виправлення. Мови ж, які є компільованими (наприклад, Pascal), працюють по-іншому: перевіряється на помилки і перекладається УВЕСЬ текст програми і аж потім направляється процесору. Жоден фрагмент програми у цьому випадку не може бути виконаний, якщо компілятор виявляє хоча б десь хоча б одну помилку. Завдяки такому підходу, в інтерпретованих мовах програмування, якщо програма складається з кількох незалежних один від одного блоків, ті блоки програми, в яких помилок немає, працюватимуть нормально, а повідомлення про помилку з'являтиметься тільки у випадку "потрапляння" в блок з помилками. Зате компільовані мови спрацьовують швидше: компіляція виконується ДО направлення програми до процесора. Якщо вона вже туди потрапила, то це значить, що ніяких помилок у ній немає, а, отже, ніяких затримок у її виконанні не виникатиме.
Ну й наостанок, ще одне, що потрібно мати на увазі. Після того, як ми створили програму, запустили її, переконалися, що вона працює правильно і ЗАКРИЛИ Python, то для запуску цієї програми ще раз потрібно буде знайти файл програми і двічі клікнути на ньому. Усе як завжди. Але... Проблема у тому, що після того, як буде введено другий доданок програма просто закриється і відповіді ми так і не побачимо:
Справа у коді програми. Вірніше, в його останньому рядку. Після print(s), після того, як виведена відповідь більше ніяких команд немає, виконувати нема чого, тому вікно програми одразу ж і закривається. Оскільки комп'ютер працює надзвичайно швидко, то наше людське око просто не встигає помітити той момент, коли виводиться відповідь.
Для того, щоб затримати результат дії останньої команди, можна використати таку хитрість: останньою командою після print(s) записати input(). Саме так, без жодних змінних і з порожніми дужками. Завдяки цьому, коли процес виконання програми
a = float(input('Введіть перше число: '))
b = float(input('Введіть друге число: '))
s = a + b
print(s)
input()
...дійде до рядка input(), то на цьому моменті зупиниться і чекатиме введення чогось з клавіатури. Увесь цей час результат попередньої команди print(s) буде відображатися на екрані. Ось так ми і зможемо затримати відповідь на будь-який потрібний нам час. Після натискання на якусь клавішу, наприклад, на Enter, програма прочитає, що було введене, оскільки в програмі не написано, куди подіти прочитане, то прочитане запам'ятовано й не буде, а сама програма закриється, бо input() - це останній рядок програми.
Між іншим, для того, щоб внести зміни в збережений файл програми на Python не обов'язково знову запускати IDLE Python. Файл можна відкрити звичайним Блокнотом, вписати потрібне, зберегти зміни і знову запустити звичайним чином.
Завдання 2
З клавіатури вводяться сторони прямокутника. Обчислити його площу.
Спробуйте це завдання розв'язати самостійно, а потім "підглянете" результат. Розв'язання цієї задачі дуже схоже на попереднє.
a = float(input('Введіть перше число: '))
b = float(input('Введіть друге число: '))
s = a * b
print(s)
ДОМАШНЄ ЗАВДАННЯ:
Створіть програму для обчислення об'єму прямокутного паралелепіпеда.
Підказка
Якщо ви розв'язали завдання з площею прямокутника, то завдання з об'ємом прямокутного паралелепіпеда зовсім не становить труднощів, оскільки формула об'єму, відома вам з п'ятого класу, схожа на формулу площі прямокутника - у прямокутника S=a∙b, а у паралелепіпеда V=a∙b∙c. Отже, в попередню програму потрібно лише додати ще одну змінну, аналогічно до змінних a і b організувати її прочитування, додати у формулу, за якою здійснюється обчислення, ще один множник і, мабуть змінити змінну s на v (оскільки обчислюємо не площу, а об'єм).