Тема: мова програмування Python, середовище програмування.
Мета:
Обладнання: комп’ютери зі встановленими ОС та середовищем програмування Python або стійким сполученням з Інтернетом для використання online-інтепретаторів, (дана) інструкція.
Структура уроку
Хід уроку
1. Організаційний момент
Привітання з учнями. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання. Оголошення теми й мети уроку.
2. Актуалізація опорних знань
Дати відповіді на такі запитання:
Високорівневі і низькорівневі. Текст програми мовою Пітон не є машинним кодом. Програма не оперує безпосередньо вмістом регістрів процесора. Службові слова — це слова англійської мови. Синтаксис майже повністю збігається з прийнятим в математиці.
Загального призначення і спеціалізовані. Мовою Python можна написати графічний редактор, вебсайт, програму, що опрацьовує результати дослідів, гру в хрестики-нулики і багато іншого.
Інтерпретовані і компільовані. Програму мовою Python виконує програма-інтерпретатор. Майже для кожної операційної системи і архітектури процесора існує свій інтерпретатор, томутак що текст програми не потрібно модифікувати. Але через необхідність інтерпретації у процесі виконання програма мовою Python працює повільніше, ніж аналогічна програма на компільованій мови (Fortran, С++, Pascal).
Визначення мови включає в себе абетку — зазвичай, латиниця, цифри, знаки пунктуації та деякі спеціальні символи (, . ; : ? ‘ ” ! | / \ ~ ( ) [ ] { } < > # % ^ & - + * =), синтаксичні і семантичні правила (перші описують структуру записів, другі — їхнє тлумачення).
Синтаксис визначає дозволені конструкції мови. Наприклад, назва змінної не може починатися з цифри. У компільованих мовах синтаксичні помилки завжди виявляють до виконання програми на етапі виконання. У інтепретованих — як правило, на етапі виконання. Але інколи є можливість попередньої перевірки ще до виконання програми інтерпретатором.
(Статична) семантика пов'язує синтаксично вірні конструкції загальним змістом. Наприклад, не означена арифметична дія ділення цілого числа і рядка символів. Такі помилки виявляють на етапі виконання програми. Подамо приклад програми, яка при різних вхідних даних або коректно завершується, або видає повідомлення про помилку:
x = input () if x>1: print (5) else: print ('asd'/x)
Найскладніші (для пошуку й виправлення) помилки виникають, коли програму написано правильно щодо синтаксису й семантики, але на деяких вхідних даних програма або не завершує свою роботу, або некоректно завершує роботу, або створює неправильні вихідні дані (відповідь). Наприклад, у наступному прикладі цикл while ніколи не закінчить роботу, якщо передане значення параметра n перевищує 1.
res = 1 i = 1 while i < n: res = res * a
Значення у мові Python
для зберігання цілих чисел Python на відміну від більшості (компільованих) мов (C++, Pascal) використовує всю доступну пам'ять. Інакше кажучи, роботу з багатоцифровими числами довільної довжини реалізовано у стандарті мови;
дійсні числа реалізовано як числа з рухомою крапкою. Подвійна точність double (64 біта) передбачає таке: 1 біт на знак, 11 біт на показник експоненти і 52 біти на значущу частину (мантиссу). Приклади запису: 3.0, -123.345, .76543, 23.490e23.
Логічні змінні: True або False. Логічний тип насправді є лише підтипом цілого, значення False відповідає нулю, True — довільному відмінному від нуля цілому числу.
Упорядковані послідовності:
рядок (тексту) — послідовність символів — потрібно вписати в одинарні чи подвійні лапки. Наприклад, 'a', 'abc 3654_', "do not";
список — змінювана послідовність довільних елементів у квадратних дужках, розділених комами. Наприклад: [], [1, 2, 3], ['Name','Surname',Age];
кортеж — стала послідовність довільних елементів у круглих дужках, , розділених комами. Наприклад: (), (1,), ('Name','Surname',Age);
словник (асоціативний масив) — змінювана структура даних, призначена для збереження (упорядкованих) пар вигляду ключ:значенння. Ці пари записують у фігурних дужках і розділяють комою. Наприклад, {1:"one", 2:"two", 3:"three"}.
Ідентифікатор — це назва, яку користувач надає об’єкту — змінній, сталій чи функції.
У записі такої назви використовують лише літери латиниці, цифри і знак підкреслення, причому назву неможна розпочинати з цифри. Python чутливий до регістру символів, тобто Man і man є двома різними назвами. Рекомендують назву класу розпочинати з великої літери, а всі інші назви — з малої.
Зарезервовані назви містять лише малі літери:
and,
assert,
break,
class,
continue,
def,
del,
elif,
else,
except,
exec,
finally,
for,
from,
global,
if,
import,
in,
is,
lambda,
not,
or,
pass,
print,
raise,
return,
try,
while,
with,
yield.
Ці слова неможна використовувати як назви запроваджених користувачем об'єктів.
Операції з цілими числами:
унарна арифметична: зміна знаку (-);
унарна бітова: заперечення (~);
Операції з дійсними числами ті самі, що й арифметичні операції для цілих чисел, але:
Логічні операції:
бінарна операція логічне «i» (and) — результат справджується (тобто його значення дорівнює True ) тоді й лише тоді, коли обидва операнди (аргументи) справджуються;
бінарна операція логічне «або» (or) — результат справджується тоді й лише тоді, коли хоча б один операнд (аргумент) справджується;
унарна операція заперечення (not) — результат справджується тоді й лише тоді, коли операнд (аргумент) не справджується (його значення дорівнює False).
Вирази записують за допомогою числових значень, назв об'єктів, знаків операцій і круглих дужок у прийнятому в алгебрі порядку.
Оператори належності призначено для перевірки на належність елемента до рядків, списків, кортежів чи словників:
in — повертає значення істини True , якщо елемент є у послідовності, інакше повертає значення хибності False. Наприклад, True буде отримано у результаті опрацювання таких трьох виразів:
"cad" in "cadillac"
1 in [2,3,1,6]
"hi" in {"hi":2,"bye":1}
Але для виразу 2 in {"hi":2,"bye":1} отримаємо False, бо у словниках перевіряють наявність у ключах, а не у значеннях.
not in — повертає значення істини True , якщо елемента немає у послідовності, інакше повертає значення хибності False. Таким чином, дія цього оператора протилежна (за результатом) до дії оператора in.
Оператори тотожності порівнюють розміщення двох об'єктів у пам'яті комп'ютера:
is — повертає значення істини True тоді й лише тоді, коли обидва операнди вказують на один об'єкт, тобто коли значення спеціальної функції id для обох об'єктів збігаються;
is not — повертає значення істини True тоді й лише тоді, коли обидва операнди вказують на різні об'єкти.
Пріоритет операторів у Python Далі оператори перелічено у порядку спадання пріоритету виконання від найвищого (виконують у першу чергу) до найнижчого (виконують в останню чергу):
** | піднесення до степеня |
~ + - | унарні |
* / % // | множення, ділення, лишок від ділення, цілочисельне ділення |
+ - | додавання і віднімання |
>> << | побітові зсуви праворуч і ліворуч |
& | бітове «i»; |
| ^ | бітові «або» та «виключне або» |
<= < > >= | не перевищує, менше, більше, не менше |
<> != == | відмінне (2) і збігається |
= %= /= //= -= += *= **= | надання значення |
is is not | тотожності |
in not in | належності |
not or and | логічні |
Перетворення типів. Python визначає тип числового виразу, що містить значення і змінні різних типів, двома різними способами:
автоматично — так зване неявне зведення типу, при якому тип числового виразу визначають типом найскладнішого з вхідних значень і змінних;
з явним вказанням типу результат обчислення виразу за допомогою вбудованих функцій int() та float() для отримання відповідно цілого чи дійсного типу.
Рядок зчитують зі стандартного пристрою введення (клавіатури) функцією input().
Середовище розробки Python IDLE (Integrated DeveLopment Environment) — це інтегроване середовище розробки мовою Python. IDLE виглядає як спотворення IDE, але насправді названо на честь Еріка Айдла (Eric Idle) з Монті Пайтон. Постачають разом з інтепретатором Python для роботи на багатьох платформах: Windows, Mac OS, Unix-подібні ОС. За допомогою IDLE можна виконувати звичайні для інтегрованого середовища завдання: переглядати, редагувати, запускати, налагоджувати програми. Редактор коду використовує підсвічування синтаксису. IDLE пропонує додаткові можливості для досвідчених користувачів, наприклад, засіб перегляду об'єктів.
При OC Linux можна встановити (за допомогою Менеджера програм) одне з таких альтернативних середовищ програмування: Eric, Spy, Spyder.
Встановлення Python при ОС Linux:
або за допомогою Термінала, в якому потрібно набрати різні вказівки залежно від типу й версії ОС — пошукові системи у поміч.
Встановлення Python при ОС Windows. Для операційної системи Windows дистрибутив поширюють або у вигляді виконуваного файлу (з розширенням exe), або у вигляді архівного файлу (з розширенням zip) — див. офіційний сайт. Розглянемо процес встановлення з виконуваного файлу.
Запустити на виконання завантажений виконуваний файл.
Вибрати спосіб встановлення.
У вікні діалогу запропоновано 2 варіанти:
При виборі Install Now Python буде встановилено у теку за вказаним шляхом. Крім самого інтерпретатора будуть встановлені: IDLE (інтегроване середовище розробки), pip (пакетний менеджер) і документація, а також будуть створені відповідні ярлики і встановлені зв'язку файлів, що мають розширення .py з інтерпретатором Python.
Customize installation — це варіант встановлення з налаштуванням.
Мітку Add Python 3.5 to PATH виставляють для того, щоб з'явилася можливість запускати інтерпретатор без вказівки повного шляху до виконуваного файлу.
Вибрати необхідні опції установки (при попередньосу виборі Customize installation).
У вікні діалогу запропоновано вказати доповнення, які встановлюють разом з інтерпретатором Python. Зазвичай рекомендують вибрати щонайменше таке:
Documentation — документація;
pip — пакетного менеджера pip;
tcl/tk and IDLE — бібліотеки для побудови графічного інтерфейсу (tkinter) та інтегроване середовища розробки.
Вибрати місце установки (доступно при виборі Customize installation).
Крім вказівки шляху, дане вікно дозволяє внести додаткові зміни у процес встановлення за допомогою таких виборів:
Install for all users — Встановити для всіх користувачів. Якщо не вибрати цю опцію, то буде запропонований варіант інсталяції в папку користувача, який встановлює інтерпретатор;
Associate files with Python — Зв'язати файли, що мають розширення .py, з Python. При виборі даної опції будуть внесені зміни в Windows, що дозволяють запускати програми мовою Python подвійним клацанням кнопки миші.
Create shortcuts for installed applications — Створити ярлики для запуску застосунків;
Add Python to environment variables — Додати шлях до інтерпретатора Python у змінну PATH;
Precomple standard library — Провести прекомпіляції стандартної бібліотеки.
Останні два пункти пов'язані із завантаженням складових для налаштування, початківцям їх можна не встановлювати.
Після успішного встановлення отримати таке повідомлення і натиснути кнопку Close.
Зручно використовувати також online середовища програмування, які не вимагають встановлення програмного забезпечення.
4. Інструктаж з ТБ
Учитель розповідає: «Під час перерви учень забіг у кабінет інформатики. Вчитель його не помітив. Учневі вдалося сісти за комп’ютер, встановити свою «флешку», завантажити з неї гру і ... вивести комп’ютер із ладу. Учень швидко вимкнув комп'ютер з електричної мережі». Які правила техніки безпеки порушив учень?
5. Вироблення практичних навичок
Перевірка працездатності встановленого програмного забезпечення
У вікні (малюнок подано для Windows, для Linux результат буде аналогічним)
ввести: print(“Hello, World!”) і отримати такий результат:
Перевірити роботу середовища програмування:
s = input("Як Вас звати?\n") print("Привіт, "+s+"! Вас вітає Python!")Тут \n вказує на перехід до нового рядка. Рядок тексту: "Як Вас звати?" буде виведено перед зчитуванням рядка тексту s.
Той самий результат можна отримати одним рядком:
print('Привіт,',input('Як Вас звати?\n'),'! Python вітає Вас!')
Але це типовий приклад коду, важкого для сприйняття. Краще так не писати.
6. Домашнє завдання
Вивчити навчальний матеріал уроку.
Проаналізувати код наступної програми. Запустити її на виконання і протестувати.
a = int(input('1st number: ')) b = int(input('2nd number: ')) print('a + b = ', a + b, 'a * b = ', a * b)
Ознайомитися з наступними структурами мови Python (подано структуру опису), щоб виробити уявлення про можливості мови програмування. У разі потреби використати довідникову літературу або ресурси Інтернету.
import array — завантаження модуля array.
Модуль array визначає масиви в Python. Масиви — дуже схожі на списки, але з обмеженням на тип даних і розмір кожного елемента. Це забезпечує швидше порівняно зі списками опрацювання даних. Розмір і тип елемента масиву визначають при його створенні і вони можуть набувати таких значень.
Код типу | Тип в C | Тип в Python | Найменший розмір у байтах |
'b' | signed char | int | 1 |
'B' | unsigned char | int | 1 |
'h' | signed short | int | 2 |
'H' | unsigned short | int | 2 |
'i' | signed int | int | 2 |
'I' | unsigned int | int | 2 |
'l' | signed long | int | 4 |
'L' | unsigned long | int | 4 |
'q' | signed long long | int | 8 |
'Q' | unsigned long long | int | 8 |
'f' | float | float | 4 |
'd' | double | float | 8 |
array.typecodes повертає рядок, що містить всі можливі типи в масиві.
a=array.array(код типу [, ініціалізатор])
— такий код визначає новий масив а, тип елементів якого залежить від коду типу. Ініціалізатор має бути списком, об'єктом, що підтримує інтерфейс буфера, або ітеріруемий об'єкт. Наприклад,
b=['i',[1,2,3]]
с=['l',3*[0]]
У наступних виразах першу послідовність символів array у коді потрібно замінити на назву масиву:
array.typecode — код типу елементів (символ з першого стовпчика таблиці вище);
array.itemsize — розмір у байтах одного елемента у масиві;
array.append(х) — додати елемента у кінець масиву;
array.buffer_info() — комірка пам'яті, довжина;
array.byteswap() — змінити порядок слідування байтів у кожному елементі масиву;
array.count(х) — повертає кількість входжень значення х у массив;
array.extend(obj) — добавлення елемента з об'єкта obj у масив;
array.frombytes(b) — створює масив array з масиву байт. Кількість байт має бути кратною розміру одного елемента у масиві;
array.fromfile(F, N) — зчитує N елементів з файлу F і додає їх у кінець масиву. Файл має бути відкритим для бинарного зчитування. Якщо доступно менше ніж N елементів, буде породжено виключення EOFError, а досяжні елементи буде додано у масив;
array.fromlist(список) — додавання елементів зі списку;
array.index(х) — номер першого входження x у масив;
array.insert(n,х) — включити новый елемент зі значенням х у масив перед елементом з номером n. Від'ємні значення n розглядають відносно кінця масиву;
array.pop(i) — вилучає i-ий елемент з масиву й повертає його значення. Як усталено вилучає останній елемент;
array.remove(х) — вилучити перше входження значення х з масиву;
array.reverse() — обернений порядок елементів у масиві;
array.tobytes() — перетворення у байти;
array.tofile(f) — запис масиву у відкитий файл;
array.tolist() — перетворення масиву у список.
Двовимірний масив (матриці). Інколи зручно дані зберігати у вигляді прямокутних таблиць. У мові Python таблицю можна подати у вигляді списку рядків, кожен елемент якого є в свою чергу списком деяких елементів довільного типу. Наприклад, створити таблицю чисел з 2 рядків і 3 стовпчиків можна таким чином:
M = [[1, 2, 3], [4, 5, 6]]
У цьому випадку:
A[0]==[1,2,3], A[0][0]==1, A[0][1]==2, A[0][2]==3, A[1]==[4,5,6], A[1][0]==4, A[1][1]==5, A[1][2]==6.
Множина
Множину можна утворити переліком назв елементів у фігурних дужках, наприклад,
S:={2,4,5}
Порядок назв елементів у такому переліку неістотній. Після опрацювання запису Python позбувається подвійного переліку назв ({1,1}=={1}).
Дії з множинами
A | B
A.union(B) — повертає об'єднання множин A і B;
A |= B
A.update(B) — долучає до A всі елементи B;
A & B
A.intersection(B) — повертає перетин множин A і B;
A &= B
A.intersection_update(B) — залишає в A лише ті елементи, що є в B;
A - B
A.difference(B) — повертає різницю множин A і B;
A -= B
A.difference_update(B) — вилучає з множини A всі ті елементи, які належать до B;
A ^ B
A.symmetric_difference(B) — повертає симетричну різницю множин A і B;
A ^= B
A.symmetric_difference_update(B) — записує в A симетричну різницю множин A і B;
A <= B
A.issubset(B) — повертає True тоді й лише тоді, коли A є підмножиною B;
A >= B
A.issuperset(B) — повертає True тоді й лише тоді, коли B є підмножиною A;
A < B — еквівалентно (A <= B) and (A != B). Інакше кажучи, А є підмножиною В, але відрізняється від В (хоча б одним елементом);
A > B — еквівалентно (A >= B) and (A != B). Інакше кажучи, B є підмножиною A, але відрізняється від A (хоча б одним елементом);
x in A — повертає True , якщо x належить до A;
A.isdisjoint(B) — повертає True , якщо A і B не мають спільних елементів;
A == B — повертає True , якщо A і B збігаються, тобто містять одні й ті самі елементи;
A.copy() — копія множини A.
Відкриття файлу
f = open(назва файлу, режим доступу) — відкриття файлу f.
Режими доступу
r | зчитування |
rb | зчитування у двійковому форматі |
r+ | зчитування й запис |
rb+ | зчитування й запис у двійкому форматі |
w | запис |
wb | запис у двійковому форматі |
w+ | зчитування й запис |
wb+ | зчитування й запис у двійковому форматі |
x | запис, якщо файл не існує, інакше виняток |
a | дописування в кінець |
ab | дописування в кінець у двійковому форматі |
a+ | дописування в кінець або зчитування |
ab+ | дописування в кінець або зчитування. |
Атрибути файлу
(вирази записано для файлової змінної f)
Введення-виведення
(вирази записано для файлової змінної f)
f.read(k) — функція читає k байт (якщо не вказано, то весь файл) і повертає зчитане у вигляді рядка або байтового об'єкта;
f.readline() — читає один рядок з файлу;
f.readlines() — повертає список, що містить всі рядки з даними, виявленими у файлі;
f.write(рядок тексту) — записує вміст рядка тексту у файл і повертає кількість записаних байтів;
f.writelines(список рядків) — записує рядки тексту у файл;
f.close() — закриває файл і звільняє всі системні ресурси, використані при відкритті цього файлу
f.tell() — повертає ціле номер поточної позиції у файлі у байтах від початку файлу.
Модуль os
(работа з файловою системою, деякі функциії підтримують не всі операційні системи)
os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True ) — зміна прав доступу до об'єкта (mode — вісімкове число);
os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True ) — зміна id власника і группи (Unix);
os.link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True ) — створює жорстке посилання;
os.mkdir(path, mode=0o777, *, dir_fd=None) — створення теки (директорії). OSError, если директорія існує;
os.makedirs(path, mode=0o777, exist_ok=False) — створення теки (директорії) зі створенням при цьому проміжних тек;
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) — переназиває файл src у dst;
os.renames(old, new) — переназиває файл old у new, створюючи проміжні теки;
os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None) — переназиває src у dst с примусовою заміною;
os.rmdir(path, *, dir_fd=None) — видаляє порожню теку;
os.removedirs(path) — видаляє теку, потім рекурсивно видаляє батьківські теки, поки вони порожні;
os.truncate(path, length) — обрізає файл до довжини length;
os.system(command) — виконує системну вказівку і повертає код її завершення (0 у випадку успіху);
Оператор розгалуження (умовний оператор) забезпечує обчислення певного виразу (послідовності виразів) лише за умови істинності деякої умови. Цей оператор має такий вигляд:
if умова1: вираз1 elif умова2: вираз2 elif умова3: вираз3 … else: виразЗапис може не містити частин такого вигляду:
elif умоваj: виразj
чи навіть
else умова: вираз
Цикл while забезпечує виконання тіла циклу — обчислення виразу (послідовності виразів) — поки справджується деяка умова. Істинність умови перевіряють перед виконанням тіла циклу:
while умова: вираз
Цикл for призначено для перебору елементів послідовності і виконання блоку програмного коду для кожного з них:
for лічильник in послідовність: вираз
Діапазон
range(початкове значення, кінцеве значення [, крок]) задає послідовність цілих чисел (арифметичну прогресію), яку можна використати при описі циклу for.
Текст упорядкував Іваницький Володимир Олександрович, вчитель вечірньої (спеціальної) змінної школи № 27 міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 28.11.2016 по 02.12.2016.