Тема: опрацювання рядків мовою Python.
Мета: сформувати визначення поняття рядків у мові програмування, ознайомити учнів з їх функціями та методами, навчити створювати програми мовою Python опрацюванням рядків.
Обладнання: ПК із встановленим ОС і середовищем програмування мовою Python або стійким сполученням з Інтернетом для роботи з середовищем програмування мовою Python у режимі
online.
Структура уроку
Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.
Мотивація навчання: на цьому уроці ви ознайомитеся з основами функціями та методами рядків мовою Python. Навчитеся писати програми опрацювання рядків тексту. Наприклад, з переведенням рядка в число та навпаки.
2. Актуалізація опорних знань
Рядки — упорядковані послідовності символів, що використовують для зберігання і представлення текстової інформації. За допомогою рядків можна працювати з усім, що може бути подано у текстовій формі.
Рядки в апострофах і в лапках. Рівнозначними є обидва записи рядків:
S = 'spam"s'
S = "spam's"
Два варіанти надають можливість дозволяють вставляти в рядок символи лапок або апострофів, не використовуючи екранування.
Службові символи (екрановані послідовності)
\\ # \ \' # ' \" # " \0 # cимвол Null (не є ознакою кінця рядка) \a # код дзвінка \b # повернення (Backspace) \f # ознака кінця сторінки \n # ознака кінця рядка \r # повернення каретки \t # горизонтальна табуляція \v # вертикальна табуляція \N{id} # ідентифікатор ID бази даних Юнікоду \ooo # символ з 8-им кодом ооо \uhhhh # символ з 16-бітовим кодом hhhh Юнікоду в 16-му поданні \Uhhhh… # символ з 32-бітовим кодом hhhh Юнікоду в 16-му поданні \xhh # символ з 16-им кодом hh
Якщо безпосередньо перед записом рядка стоїть символ 'r' (в будь-якому регістрі), то екранування буде відключено відключено («сирий рядок»). Але незважаючи на призначення, «сирий рядок» не може закінчуватися символом зворотного слеша \. Шляхи обходу цього обмеження такі:
S = r'\n\n\\'[:-1]
S = r'\n\n' + '\\'
S = '\\n\\n'
3. Вивчення нового матеріалу
Базові дії з рядками
(у коментарі подано результат і через дефіс - записано назву операції)
'spam'+'eggs' # 'spameggs' - конкатенація (додавання)
'spam'*3 # 'spamspamspam' - дублювання
len('spam') # 4 - довжина рядка
S = 'spam'
S[0] # 's' - доступ за індексом
S[2] # 'a'
S[-2] # 'a'
Як видно з останнього прикладу, у Python є можливість доступу за від'ємним індексому. При цьому відлік йде від кінця рядка.
Оператор вилучення зрізу має такий вигляд: [X:Y:Z], де X — початок зрізу, а Y — обмеження справа (не входить у зріз), Z — крок. Символ з номером Y у зріз не входить. Як усталено X дорівнює 0, а Y — довжині рядка, Z — 1.
s = 'spameggs' s[3:5] # 'me' s[2:-2] # 'ameg' s[:6] # 'spameg' s[1:] # 'pameggs' s[:] # 'spameggs' s[::-1] # 'sggemaps' s[3:5:-1] # '' s[2::2] # 'aeg'
Викликаючи методи рядків необхідно пам'ятати, що рядки у Python відносять до категорії незмінних послідовностей. Інакше кажучи, всі функції і методи можуть лише створювати новий рядок.
Тому всі рядкові методи повертають новий рядок, за допомогою якого потрібно надати значення змінній.
Приклади використання функцій і методів рядків
S = 'str'; S = "str"; S = '''str'''; S = """str""" — літерали рядків;
S = "s\np\ta\nbbb" — екрановані послідовності;
S = r"C:\temp\new" — пригнічення екранування;
S = b"byte" — рядок байтів;
S1 + S2 — додавання;
S1 * 3 — повторення;
S[i] — звернення за індексом;
S[i:j:step] — витяг зрізу;
len(S) — довжина рядка;
S.find(str, [start],[end]) — пошук підрядка в рядку, повертає номер першого входження або -1;
S.rfind(str, [start],[end]) — пошук підрядка в рядку, повертає номер останнього входження або -1;
S.index(str, [start],[end]) — пошук підрядка в рядку, повертає номер першого входження або викликає ValueError;
S.rindex(str, [start],[end]) — пошук підрядка в рядку, повертає номер останнього входження або викликає ValueError;
S.replace(шаблон, заміна) — заміна шаблону;
S.split(символ) — розбиття рядка за роздільником;
S.isdigit() — чи складається рядок з цифр;
S.isalpha() — чи складається рядок з літер;
S.isalnum() — чи складається рядок з цифр або літер;
S.islower() — чи складається рядок із символів у нижньому регістрі;
S.isupper() — чи складається рядок із символів у верхньому регістрі;
S.isspace() — чи складається рядок з невідображуваних символів (пробіл, ознаки кінця сторінки '\f' і рядка '\n', переведення каретки '\r', горизонтальна табуляція '\t' і вертикальна табуляція '\v');
S.istitle() — чи починаються слова в рядку з великої літери;
S.upper() — перетворення рядка до верхнього регістру;
S.lower() — перетворення рядка до нижнього регістру;
S.startswith(str) — чи починається рядок S з шаблону str;
S.endswith(str) — чи закінчується рядок S шаблоном str;
S.join(список) — збірка рядка зі списку з роздільником S;
ord(символ) — ASCII код символу;
chr(число) — символ з вказаним кодом ASCII;
S.capitalize() — переводить перший символ рядка у верхній регістр, а всі інші — в нижній;
S.center(width, [fill]) — повертає відцентрований рядок, по краях якої стоїть символ fill (пробіл за замовчуванням);
S.count(str, [start],[end]) — повертає кількість непересічних входжень підрядка в діапазоні [початок, кінець] (0 і довжина рядка як усталено);
S.expandtabs([tabsize]) — повертає копію рядка, в якому всі символи табуляції замінtено одним або кількома пропусками залежно від поточного стовпчика. Якщо TabSize не вказано, розмір табуляції — 8 пробілів;
S.lstrip([chars]) — видалення символів пробілів на початку рядка;
S.rstrip([chars]) — видалення символів пробілів в кінці рядка;
S.strip([chars]) — видалення символів пробілів на початку і в кінці рядка;
S.partition(шаблон) — повертає кортеж, що містить частину перед першим шаблоном, сам шаблон, і частина після шаблону. Якщо шаблон не знайдено, повертається кортеж, що містить самий рядок, а потім два порожніх рядки;
S.rpartition(sep) — повертає кортеж, що містить частину перед останнім шаблоном, сам шаблон, і частина після шаблону, якщо шаблон не знайдений, повертається кортеж, що містить два порожні рядки, а потім самий рядок;
S.swapcase() — перекладає символи нижнього регістра в верхній, а верхнього — в нижній;
S.title() — першу букву кожного слова переводить в верхній регістр, а всі інші в нижній;
S.zfill(width) — робить довжину рядка не меншою width, в разі потреби заповнює перші символи нулями;
S.ljust(width, fillchar=" ") — робить довжину рядка не меншою width, в разі потреби заповнює останні символи символом fillchar;
S.rjust(width, fillchar=" ") — робить довжину рядки не меншою width, в разі потреби заповнює перші символи символом fillchar;
S.format(*args, **kwargs) — форматування рядка.
Завдання 1. Скласти програму для підрахунку кількості слів у введеному з клавіатури рядку. Словом вважати послідовність символів, що відокремлену символами пропуску. Порівняти складену програму з демонстраційним розв'язанням.
4. Інструктаж з ТБ
5. Закріплення вивченого матеріалу
Завдання 2. Скласти програму для підрахунку кількості входжень символа a у рядок S. Порівняти складену програму з демонстраційним розв'язанням.
6. Підбиття підсумків уроку
Виставлення оцінок.
7. Домашнє завдання
Завдання 3. Перевірити чи слова, що записані латиницею у рядку, розташовано у алфавітному порядку.
Вказівки до розв'язання
Розбити рядок на слова.
Використати порівняння рядків для пошуку пари слів, з яких попереднє має стояти після наступного в алфавітному порядку.
Якщо таку пару знайдено, вивести повідомлення про неупорядкованість, інакше — повідомлення про упорядкованість.
Порівняти складену програму з демонстраційним розв'язанням. Протестувати програму для рядка з використанням кирилиці, у тому числі українських літер, яких немає у російській абетці. Поміркувати, як потрібно змінити програму, щоб отримувати правильну відповідь і в цьому випадку.
Завдання 4. Перекласти мовою Python програму мовою Pascal для отримання нормальної диз'юнктивної форми булевої фукції. За бажанням зчитування даних можна зробити з клавіатури, а виведення на екран.
Текст упорядкувала Людмила Анатоліївна Кашперенко, учитель середньої загальноосвітньої школи І–ІІІ ступенів № 258 Дніпровського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 29.10.2018 по 02.11.2018.