НМЦ

Програмування мовою Python: основи та практика

Електронний посібник

ВФПО

ТЕМА 7.4. РЯДКОВІ ВЕЛИЧИНИ

 

 

 

 

Уроки Python з нуля / #8 – Робота з текстом. Індекси та зрізи

 

Презентація. Рядкові величини в PYTHON №7.4

 

 

З позиції комп’ютера текст – це набір символів, кожен із них має свій власний код.

 

Як у більшості мов програмування, так і в Python, символ є найменшою одиницею тексту. Це може бути літера, цифра або спеціальний символ, як-от пробіл або символ нового рядка. Весь текст представляється як рядок, який є послідовністю таких символів.

Python часто використовують для обробки текстових даних: пошуку, заміни та інших операцій. Для цього використовують спеціальний тип даних рядок або str.

 

Рядок в Python це послідовність символів, що використовується для зберігання текстових даних.

 

Він дає змогу працювати з будь-яким текстом у текстовому форматі.

Символи рядка в Python можуть бути будь-якими символами, що відповідають стандарту Unicode. У Python 3 немає окремого типу ASCII-рядків; якщо потрібно отримати рядок у суто ASCII-кодуванні, потрібно використовувати відповідний метод перекодування.

Важливо зазначити, що в мові Python немає окремого типу для окремого символу рядка. Кожен символ також є рядком. Також слід відмітити, що рядковий тип в Python є незмінним його не можна змінювати після створення.

 

 

У мові Python є декілька способів задання рядкових літералів. Наприклад, можна розмістити текст в одинарних або подвійних лапках, і такий запис сприйматиметься, як текстовий літерал:

>>> print (‘Привіт’)

Привіт

>>> print (‘‘Привіт‘‘)

Привіт

Наявність двох таких варіантів забезпечує створення рядків, які міститимуть одинарні чи подвійні лапки всередині тексту і однозначно визначати кінці рядка.

>>> print (‘‘Ім’я‘‘)

Ім’я

>>> print (‘Національний університет «НУБіП».’)

Національний університет «НУБіП».

Іншим методом додавання в рядок одинарних чи подвійних лапок є так зване екранування символу. Для екранування символу перед ним записується символ оберненої косої риски (обернений слеш, бекслеш, backslash) «\».

>>> print (‘Ім\’я’)

Ім’я

>>> print (‘‘Національний університет \’’ НУБіП \’’.‘‘)

Національний університет ‘‘НУБіП‘‘.

 

Якщо в текстовому значенні потрібно помістити символ \ не як частину якоїсь спеціальної інструкції, а як літеру (тобто якщо ми хочемо, щоб у тексті відображався символ \), то насправді потрібно використовувати дві обернені скісні риски, тобто \\. Іншими словами, комбінація \\ у тексті відображається як одинарна обернена скісна риска.

 

Рядкові літерали можна присвоювати змінним, які матимуть рядковий тип, і в подальшому використовувати їх:

>>> s=‘Привіт світ!’

>>> print(s)

Привіт світ!

 

Багаторядкові текстові блоки (Багаторядкові літерали)

 

Під час роботи з текстовими даними іноді потрібно створити багаторядковий текстовий блок. Це може бути корисно як багаторядковий коментар у програмі або як анотація (синтаксис, за допомогою якого формуються підказки в мові Python) для функції.

Щоб задати текст, який розміщений у декількох рядках, і вважати його одним текстовим літералом, його необхідно помістити в потрійні одинарні або подвійні лапки (‘‘‘або’’’). Також всередині цього рядка можна використовувати одинарні або подвійні лапки, головне уникати трьох лапок поспіль.

>>> ‘‘‘Це дуже довгий

текст, записаний

В декілька рядків’’’

Це дуже довгий \nтекст, записаний \ декілька рядків

>>> print(‘‘‘Це дуже довгий

текст, записаний

В декілька рядків’’’)

Це дуже довгий

текст, записаний

в декілька рядків

 

 

Для задання порожнього рядка можна скористатися однією з команд:

>>> s=‘‘

>>> s=str()

 

Використання рядкових літералів

 

Як зазначалося раніше, рядки можна створювати, використовуючи рядкові літерали:

>>> s1=‘Привіт’

>>> s2=«Привіт»

>>> c=‘‘‘Це дуже довгий

текст, записаний

в декілька рядків’’’

Корисною буде обернена скісна риска й у тому разі, якщо ми захочемо створити текстовий літерал (текстове значення), який займає декілька рядків коду. Символ \ у кінці рядка коду всередині текстового літерала означає перенос рядка.

 

Символ переносу \ має бути останнім у рядку команди – тобто всередині текстового літерала в рядку праворуч від символу \ жодних інших символів (літер) бути не повинно. Також важливо розуміти, що в цьому випадку йдеться про розміщення текстового літерала в декількох рядках у вікні редактора кодів. Під час відображення такого текстового літерала перехід до нового рядка в місці розташування символу \ не відбувається. Інструкцією переходу до нового рядка є \n. Інакше кажучи, якщо необхідно, щоб під час відображення тексту в певному місці цього тексту виконувався перехід до нового рядка, у цьому місці вставляємо інструкцію \n.

 

Введення рядків

 

Аналогічно до введення числових даних, введення рядкових даних відбувається з використанням функції input().

>>> s=input(‘Введіть рядок:‘)

Введіть рядок: Привіт

>>> print(s) Привіт

 

Приведення до рядкового типу

 

Ви здатні перетворити будь-який стандартний об’єкт у відповідний йому рядковий тип або отримати для нього неформальне текстове представлення. Це можна зробити за допомогою функції `str()`, передавши об’єкт як аргумент, який ви хочете перетворити у рядок.

>>> s=str(5)

>>> print(s)

‘5’

>>> s=str(True)

>>> print(s)

True

 

Текст (тип даних str) належить до незмінних типів даних, тому змінити текстове значення не можна. Тобто ми не можемо в текстовому значенні взяти й змінити, наприклад, якусь літеру. Але ми можемо на основі тексту сформувати нове текстове значення, а потім змінній, яка посилається на вихідний текст, присвоїти нове значення. Завдяки тому, що в Python змінні посилаються на значення (а не містять їх), такий прийом можливий і часто використовується на практиці. До того ж виникає ілюзія, начебто реально змінюється значення змінної. Насправді посилання (що міститься у змінній і пов’язує цю змінну з даними) перекидається з одного значення на інше.

 

Об’єднання рядків

 

Можна створювати нові рядки, об’єднуючи кілька існуючих рядків. Це досягається за допомогою операції додавання («+»), яка призначена для конкатенації рядків.

>>> s1=‘Привіт

>>> s2=‘світ!’

>>> s=s1+s2

>>> print(s)

Привіт світ!

 

Незважаючи на незмінюваність рядкового типу, рядок може бути розширеним, тобто до рядка можна додати деякий інший, використовуючи операцію конкатенації.

>>> s=‘Привіт

>>> id(s)

10388768

>>> s=s+’ Світ!’

>>> print(s)

Привіт Світ!

>>> id(s)

10388768

 

У мові Python з урахуванням суто типування неможливо виконати операції над даними різних, несумісних типів без відповідних перетворень. Наприклад, об’єднання рядка і числа неможливе без попереднього перетворення числового значення у рядковий формат. Отже, для об’єднання рядків та чисел слід спочатку перетворити числове значення у рядковий формат, а потім використовувати операцію конкатенації для об’єднання двох рядкових значень.

>>> s1=‘Вавілон

>>> n=15

>>> s2=str(n)

>>> print(s1+s2)

Вавілон 15

 

Багаторазове повторення рядка або дублювання рядка

 

Аналогічно до перевизначеної операції («+»), в мові Python перевизначена і операція множення «*». Якщо виконати операцію «*» рядка s на ціле число n, то як результат буде отриманий рядок, що складається з n повторень рядка s:

>>> s=«ПАМ» * 5

>>> print(s)

ПАМПАМПАМПАМПАМ

 

 

У кожного символу у рядку є свій порядковий номер, який називається індексом. Для доступу до символів в рядку використовується їхня індексація. У багатьох мовах програмування, зокрема Python, нумерація символів у рядку розпочинається з нуля. Щоб отримати доступ до конкретного символу у рядку, потрібно вказати ім’я змінної з рядком та в квадратних дужках його індекс: (рядок[індекс]).

>>> s=‘Привіт!’

>>> s[0]

П

Індекси можуть бути відємними, в такому разі нумерація буде відбуватися з кінця (кількість символів рядка + відємний індекс).

>>> s[-1]

‘!’

 

Якщо ж розглянути всі індекси для рядка Привіт!’, отримаємо:

 

Рядок s

П

р

и

в

і

т

!

Індекс

s[0]

s[1]

s[2]

s[3]

s[4]

s[5]

s[6]

Індекс

s[-7]

s[-6]

s[-5]

s[-4]

s[-3]

s[-2]

s[-1]

 

 

Якщо ж вказати індекс, який виходить за межі рядка (наприклад, s[8] або s[-9]), то генерується виняток:

IndexError: string index out of range.

 

Можна перевірити приналежність деякого символу (підрядка) до рядка, використовуючи оператор in (підрядок in рядкок).

>>> s=‘Привіт!’

>>> ‘р’ in s

 True

>>> ‘а’ in s

False

 

Зрізи (slice)

 

Часто виникає потреба отримати не лише один символ за його індексом, а групу символів за певними правилами. Наприклад, перші 5, останні 3 або кожен другий символ. У таких ситуаціях зручно використовувати зріз (slice, slicing), який дає змогу отримати певну частину рядка. Результатом зрізу є новий рядок, що складається з обраних символів. Варто зауважити, що вибираючи символ за індексом або формуючи зріз, ми не змінюємо оригінальний рядок, а лише копіюємо його частину для подальшого використання.

Для визначення зрізу можна використовувати один із методів:

str[start: stop].

str[start: stop: step].

Для рядку str береться зріз від символу з індексом start, до символу з індексом stop (не включаючи його), з кроком step (тобто будуть взяті символи з індексами start, start + step, start + 2 * step і т. д.). Також в процесі запису зрізу деякі, а можливо і всі параметри можуть бути опущені (знаки двокрапки в записі все одно залишаються). У разі відсутності деяких параметрів їх встановлюється їх початкове значення, а саме: start = 0, stop = кількості символів рядку, step = 1.

>>> S=‘Привіт!’

>>> S[2:5]

иві

Якщо опустити другий параметр (залишивши двокрапку), то зріз береться до кінця рядка. Наприклад, щоб отримати зріз без перших двох символів, можна записати S[2:]. Якщо опустити перший параметр, то отримаємо зріз, який містить вказану кількість символів, що йдуть від початку рядка.

>>> S[2:]

ивіт!’

>>> S[:3]

При

У разі задання значення третього параметра, який дорівнює 2, у зріз потрапить кожний другий символ рядка.

>>> S[::2]

Пиі!’

>>> S[1::2]

рвт

Можна бачити, що взяття зрізу схоже на створення діапазону (range()).

Якщо значення параметра stop перевищуватиме кількість символів в рядку, воно буде проігнороване.

>>> S[2:50]

ивіт!’

У разі, якщо параметри start і stop мають від’ємні значення, то нумерація відбувається з кінця (кількість символів рядка + від’ємний індекс). Наприклад, S[1: -1] – це рядок без першого і останнього символу (зріз починається символом з індексом 1 і закінчується символом з індексом -1, не включаючи його).

>>> S[1:-1]

ривіт

>>> S[:-4]

‘При’

>>> S[-4:]

віт!’

Якщо параметр step має від’ємне значення, то зріз береться справа наліво.

>>> S[::-1]

‘!тівирП

>>> S[-2::-1]

тівирП

>>> S[1:4:-1] ‘‘

В останньому прикладі був отриманий порожній рядок, оскільки start < stop, а step від’ємний.

 

 

Визначення довжини рядка

 

Раніше було зазначено, що рядки є набором окремих символів. Щоб визначити, скільки символів міститься у рядку (його довжину), можна використати функцію len(рядок).

>>> len(‘Привіт!’)

 7

 

Зміна елементів рядка

 

Як зазначалося раніше, рядки вважаються незмінними типами, що означає, що неможливо змінити значення символу у рядку або видалити його.

>>> s=‘Привіт!’

>>> s[0]=‘п

Traceback (most recent call last):

  File «<pyshell#48>«, line 1, in <module>

  s[0]=‘п

TypeError: ‘str’ object does not support item assignment

За необхідності можна записати оператори для зміни чи вилучення окремих символів рядка, проте як результат ми отримаємо новий рядок.

>>> s=‘Hello’

>>> s=s[:1]+’a’+s[2:]

>>> print(s)

Hallo

>>> s=s[:1]+s[3:]

>>> print(s)

Hlo

 

Отримання коду символу та символу за кодом

 

Як вже зазначалося, кожен символ у текстовому рядку має свій унікальний код. Іноді виникає необхідність отримання цього коду для конкретного символу або виконання зворотної операції – отримання символу за його кодом. У мові Python символи представлені у форматі Unicode. Для отримання коду символу використовується функція ord(c), яка повертає ціле число, що відповідає коду цього символу.

>>> ord(‘a’)

97

>>> ord(‘€’)

8364

>>> ord(‘½’)

189

Зворотною до функції ord() є функція chr(n), за якою для цілого числа n (від 0 до 1114111=0x10FFFF) повертається символ (рядок, що є єдиним символом), для якого n є його кодом.

>>> chr(97)

‘a’

>>> chr(8364)

‘€’

>>> chr(189)

’½’

 

 

У попередньому випадку у разі виведення рядкової змінної з багаторядковим текстом без використання функції Print, місця, де мали б бути переходи на новий рядок, відображалися як пара символів «\n». Ця комбінація символів, яка починається з оберненого слешу, називається escape-послідовністю або керуючою послідовністю. Однак ця послідовність не єдиний варіант у мові Python.

Escape-послідовності дають змогу вставляти у рядки символи, які складно ввести з клавіатури. Серед найпоширеніших escape-послідовностей можна виокремити:

\f – перехід на нову сторінку;

\n – перехід на новий рядок;

\r – переведення каретки;

\t – горизонтальна табуляція;

\v – вертикальна табуляція;

\0 – символ Null (не є ознакою кінця рядка);

>>> print(‘Це речення \ два рядки’)

Це речення в два рядки

Отже, функція print() розпізнала escape-послідовність і виконала перехід на новий рядок.

 

Отже, функція print() розпізнала escape-послідовність і виконала перехід на новий рядок.

Проте іноді потрібно, щоб символ оберненого слешу не сприймався як початок escape-послідовності. Наприклад, це може бути важливим, коли ви вказуєте шлях до файлу в операційній системі Windows. Для вимкнення аналізу escape-послідовностей перед відкривною лапкою потрібно вставити символ r (у будь-якому регістрі).

>>> S = r’C:\newt.txt’

>>> print(S)

C:\newt.txt

Проте рядки з відключеним аналізом escape-послідовністей не можуть закінчуватися символом оберненого слешу. Але це можна обійти:

>>> S = r’\n\n’ + ‘\\’

>>> print(S)

\n\n\

>>> S = r’\n\n\\’[:-1]

>>> print(S)

\n\n\

 

Спеціальні символи, як-от \n (переведення рядка) або \t (табуляція), не відображаються, а мають деякий «таємничий зміст». Хоча формально символів два (в інструкції \n це \ і n), розглядаються такі спеціальні символи як один. Вставляють їх прямо в текстовий рядок.

 

 

Під час роботи з методами рядків важливо пам’ятати, що тип даних у рядках Python є незмінним. Це означає, що всі методи рядка повертають новий рядок, не змінюючи початковий. Щоб змінити сам рядок, потрібно викликати відповідний метод і призначити його результат тій самій змінній, де зберігається початковий рядок: str=str.метод().

str.find(substr [, start [,end]]). Повертає найменший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необовязкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться перше входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то повертається значення -1.

>>> ‘habrahabr’.find(‘r’) # 3

>>> ‘habrahabr’.find(‘r’,4)     # 8

>>> ‘habrahabr’.find(‘abr’)  # 1

>>> ‘habrahabr’.find(‘Abr’)  # -1

str.rfind(substr [, start [,end]]). Повертає найбільший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необовязкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться останнє входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то повертається значення -1.

>>> ‘habrahabr’.rfind(‘abr’)   # 6

>>> ‘habrahabr’.rfind(‘abr’,7)   # -1

str.index(substr [, start [,end]]). Повертає найменший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необовязкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться перше входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то виникає виняток ValueError.

str.rindex(substr [, start [,end]]).Повертає найбільший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться останнє входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то виникає виняток ValueError.

str.startswith(prefix[, start[, end]]). Повертає True, якщо зріз str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу) починається з префіксу prefix (prefix може бути кортежем, в такому разі як префікс перевіряються всі елементи кортежу), інакше False.

>> ‘habrahabr’.startswith(‘ha’)   # True

>>> ‘habrahabr’.startswith(‘ha’,1)   # False

>>> ‘habrahabr’.startswith(‘ab’,1)   # True

>>> ‘habrahabr’.startswith((‘ha’,’bla’)) # True

>>> ‘blablacar’.startswith((‘ha’,’bla’)) # True

str.endswith(suffix[, start[, end]]). Повертає True, якщо зріз str[start:end] (необовязкові параметри start та end інтерпретуються як нотації зрізу) закінчується на суфікс suffix (suffix може бути кортежем, в такому разі як суфікс перевіряються всі елементи кортежу), інакшеFalse.

>>> ‘habrahabr’.endswith(‘abr’)    # True

>>> ‘habrahabr’.endswith(‘abr’,1,4)  # True

>>> ‘habrahabr’.endswith(‘abr’,1,8)  # False

>>> ‘habrahabr’.endswith((‘abr’,’car’)) # True

>>> ‘blablacar’.endswith((‘abr’,’car’)) # True

str.count(substr [, start [,end]]). Повертає кількість входжень підрядка sub в зріз str[start:end] (необовязкові параметри start та end інтерпретуються як нотації зрізу) без самоперетинів.

>>> ‘habrahabr’.count(‘ha’)    # 2

>>> ‘hahahahahah’.count(‘hah’)    # 3

>>> ‘hahahahahah’.count(‘ha’)   # 5

>>> ‘hahahahahah’.count(‘ha’,1,6) # 2

str.isalpha(). Повертає True, якщо рядок є непорожнім і складається лише з алфавітних символів, інакшеFalse.

 

Алфавітні символи ‒ це символи, які належать до категорії Юнікоду «Letter» («Lm», «Lt», «Lu», «Ll», «Lo»).

 

>>> ‘Habr’.isalpha() # True

>>> ‘‘.isalpha()   # False

>>> ‘Habr1’.isalpha()  # False

>>> ‘Habr%’.isalpha()   # False

str.isdecimal(). Повертає True, якщо рядок є непорожнім і складається лише з десяткових цифр (десяткових символів), інакшеFalse.

 

Десяткові символи ‒ це символи, які належать до категорії Юнікоду «Number, Decimal Digit» («Nd»).

 

>>> ‘123’.isdecimal()   # True

>>> ‘‘.isdecimal()  # False

>>> ‘1.1’.isdecimal() # False

str.isdigit(). Повертає True, якщо рядок є непорожнім і складається лише з цифр, інакшеFalse.

 

Цифри ‒ це символи, які належать до категорій Юнікоду «Number, Decimal Digit» та «Number, Other» («Nd», «No»).

 

Наприклад, до них належать цифри надрядкового знака.

>>> ‘2’.isdigit()   # True

str.isnumeric(). Повертає True, якщо рядок є непорожнім і складається лише з числових символів, інакшеFalse.

 

Числові символи ‒ це символи, які належать до категорії Юнікоду «Number» («Nd», «No», «Nl»).

 

>>> ‘VII’.isnumeric()     # True

str.isalnum(). Повертає True, якщо рядок є непорожнім і складається лише з літеро-числових символів, інакшеFalse.

 

Літеро-числові символи ‒ це символи, які належать до категорій Юнікоду «Letter» та «Number» («Lm», «Lt», «Lu», «Ll», «Lo», «Nd», «No», «Nl»).

 

>>> ‘Habr1’.isalnum()    # True

str.islower(). Повертає True, якщо рядок містить принаймні одну літеру, і всі літери записані в нижньому регістрі, інакше False.

>>> ‘habra habr’.islower()   # True

>>> ‘habra habr 1’.islower()  # True

>>> ‘habra Habr’.islower()   # False

>>> ‘1’.islower()    # False

str.isupper(). Повертає True, якщо рядок містить принаймні одну літеру, і всі літери записані в верхньому регістрі, інакше False.

>>> ‘HABRAHABR’.isupper()   # True

>>> ‘HABRAHABR 1’.isupper()  # True

>>> ‘HaBRAHABR 1’.isupper()  # False

>>> ‘1’.isupper()   # False

str.istitle(). Повертає True, якщо рядок містить принаймні одну літеру, і літери, записані в верхньому регістрі, не йдуть безпосередньо після літер в нижньому чи верхньому регістрі, а перед групою літер в нижньому регістрі завжди стоїть літера в верхньому регістрі, інакшеFalse.

>>> ‘Habra Habr’.istitle()   # True

>>> ‘1Habra %Habr’.istitle() # True

>>> ‘Habra habr’.istitle()    # False

>>> ‘hAbra Habr’.istitle()   # False

str.isspace(). Повертає True, якщо рядок є непорожнім і складається лише з символів пропуску (whitespace), інакшеFalse.

 

Whitespace символи це символи, які в базі даних Unicode визначені як «Other» або «Separator».

 

Наприклад, до таких символів належать: пробіл, перехід на нову сторінку (\f), перехід на новий рядок (\n), переведення каретки (\r), горизонтальна та вертикальна табуляції (\t та \v).

   ‘.isspace() # True

‘\n\t’.isspace()    # True

‘‘.isspace()    # False

Habr!’.isspace()    # False

str.isprintable(). Повертає True, якщо рядок містить лише символи, що друкуються (можуть бути виведені під час друкування), інакшеFalse. До символів, що друкуються, не входять символи пропуску (whitespace) окрім пробілу.

‘‘.isprintable()  # True

‘Habra habr!’.isprintable() # True

‘\n\t’.isprintable()  # False

‘Habra\nhabr’.isprintable() # False

str.upper(). Повертає копію рядка, в якому всі літери, записані в нижньому регістрі, будуть приведені до верхнього регістру.

>>> ‘Habra Habr 5%2=1’.upper()

‘HABRA HABR 5%2=1’

str.lower(). Повертає копію рядка, в якому всі літери, записані в верхньому регістрі, будуть приведені до нижнього регістру.

>>> ‘Habra Habr 5%2=1’.lower()

habra habr 5%2=1’

str.swapcase(). Повертає копію рядка, в якому всі літери, записані в верхньому регістрі, будуть приведені до нижнього регістру, а нижньому – до верхнього.

>>> ‘Habra Habr 5%2=1’.swapcase()

hABRA hABR 5%2=1’

str.title(). Повертає копію рядка, в якому перша літера кожного слова буде приведена до верхнього регістру, а всі інші – до нижнього. Першою літерою слова вважається літера, перед якою не міститься інші літери.

>>> ‘hAbra Habr 5%2=1’.title()

 ‘Habra Habr 5%2=1’

str.capitalize(). Повертає копію рядка, в якому перший символ, якщо він є літерою, буде приведений до верхнього регістру, а всі інші літери до нижнього.

>>> ‘hAbra Habr 5%2=1’.capitalize()

‘Habra habr 5%2=1’

>>> ‘5%2=1 hAbra Habr’.capitalize()

‘5%2=1 habra habr

str.replace(old, new[, count]). Повертає копію рядка, в якому всі входження підрядка old будуть замінені на новий підрядок new. Якщо задано парметри count, то буде виконано не більше ніж count замін.

>>> ‘habrahabr’.replace(‘a’,’A’)

hAbrAhAbr

>>> ‘habrahabr’.replace(‘a’,’A’,2)

hAbrAhabr

str.lstrip([chars]). Повертає копію рядка з вилученими початковими символами, вказаними в рядку chars. Якщо параметр chars відсутній або None, то вилучаються пропуски.

>>> ‘   habrahabr  ‘.lstrip()

habrahabr   

>>> ‘www.habr.com’.lstrip(‘cmowa.’)

‘habr.com’

str.rstrip([chars]). Повертає копію рядка з вилученими кінцевими символами, вказаними в рядку chars. Якщо параметр chars відсутній або None, то вилучаються пропуски.

>>> ‘   habrahabr  ‘.rstrip()

   habrahabr

>>> ‘www.habr.com’.rstrip(‘cmowa.’)

www.habr

str.strip([chars]). Повертає копію рядка з вилученими початковими та кінцевими символами, вказаними в рядку chars. Якщо параметр chars відсутній або None, то вилучаються пропуски.

>>> ‘   habrahabr  ‘.strip()

 habrahabr

>>> ‘www.habr.com’.strip(‘cmowa.’)

habr

str.expandtabs(tabsize=8). Повертає копію рядка, в якому всі символи табуляції (\t) замінюються декількома пропусками залежно від стовпця табулювання і заданого розміру табуляції tabsize.

>>> ‘\t1\t10\t100’.expandtabs()

  1 10 100’

>>> ‘\t1234567\t10’.expandtabs()

   1234567 10’

>>> ‘\t12345678\t10’.expandtabs()

   12345678    10’

>>> ‘\t1\t10\t100’.expandtabs(4)

  1 10 100’

str.split(sep=None, maxsplit=-1). Повертає список слів, які отримуються розбиттям рядка за роздільником рядком sep. Якщо параметр sep=None, то роздільником буде виступати пропуск, і сумарний список не міститиме порожніх елементів. Якщо задано параметр maxsplit, то буде виконано не більше ніж maxsplit розбиттів (сумарний список матиме не більше ніж maxsplit+1 елемент).

>>> ‘habrahabr’.split(‘a’)

[‘h’, ‘br’, ‘h’, ‘br’]

>>> ‘haabrahabr’.split(‘a’)

[‘h’, ‘‘, ‘br’, ‘h’, ‘br’]

>>> ‘habrahabr’.split(‘ab’)

[‘h’, ‘rah’, ‘r’]

>>> ‘habrahabr’.split(‘a’,2)

[‘h’, ‘br’, ‘habr’]

str.join(iterable). Повертає рядок, який є результатом конкатенації всіх рядків з iterable. Під час конкатенації між рядковими елементами iterable буде розміщений рядок str. Якщо iterable містить принаймні одне нерядкове значення, то генерується виняток TypeError.

>>> ‘..’.join([‘1’, ‘2’])

‘1..2’

>>> ‘..’.join(‘hello’)

h..e..l..l..o

str.partition(sep). Повертає кортеж з трьома рядковими значеннями, які є частинами рядка str. Першим елементом є частина рядка str, що міститься до першого входження роздільника sep. Другим елементом є сам роздільник sep. Третім елементом є частина рядка str, що міститься після роздільника sep. Якщо роздільника sep в рядку str не знайдено, то першим елементом кортежу буде сам рядок str, а другий та третій елементи будуть порожніми рядками.

>>> ‘habrahabr’.partition(‘ra’)

(‘hab’, ‘ra’, ‘habr’)

>>> ‘habrahabr’.partition(‘a’)

(‘h’, ‘a’, ‘brahabr’)

>>> ‘habrahabr’.partition(‘car’)

(‘habrahabr’, ‘‘, ‘‘)

str.rpartition(sep). Повертає кортеж з трьома рядковими значеннями, які є частинами рядку str. Першим елементом є частина рядка str, що міститься до останнього входження роздільника sep. Другим елементом є сам роздільник sep. Третім елементом є частина рядка str, що міститься після роздільника sep. Якщо роздільника sep в рядку str не знайдено, то першим елементом кортежу буде сам рядок str, а другий та третій елементи будуть порожніми рядками.

>>> ‘habrahabr’.rpartition(‘a’)

 (‘habrah’, ‘a’, ‘br’)

str.ljust(width, fillchar=« «). Повертає копію рядка str, доповненого справа символами fillchar до довжини width. Якщо довжина рядка більша або дорівнює width, повертає оригінальний рядок.

>>> ‘habr’.ljust(7)

habr

>>> ‘habr’.ljust(7,’_’)

 habr  

str.rjust(width, fillchar «). Повертає копію рядка str, доповненого зліва символами fillchar до довжини width. Якщо довжина рядка більша або дорівнює width, повертає оригінальний рядок.

>>> ‘habr’.rjust(7)

   habr

>>> ‘habr’.rjust(7,’_’)

  habr

str.center(width[, fillchar]). Повертає копію рядка str, доповненого зліва та справа символами fillchar до довжини width, таким чином, щоб рядок був вирівняний за центром сумарного рядка. Якщо довжина рядка більша або дорівнює width, повертає оригінальний рядок.

>>> ‘habr’.center(8,’_’)

 habr

>>> ‘habr’.center(7,’_’)

 habr_’

str.zfill(width). Повертає копію рядка str, доповненого символами «0» до довжини width. Якщо рядок починається зі знаку («+» або «-»), то доповнювальні символи вставляються після знаку. Якщо довжина рядка більша або рівна width, повертає оригінальний рядок.

>>> ‘9’.zfill(4)

‘0009’

>>> ‘-9’.zfill(4)

‘-009’

>>> ‘+9’.zfill(4)

‘+009’

str.format(*args, **kwargs). Повертає копію рядка str, відформатованого відповідним чином.

 

7.4.7. Форматування рядків

 

Іноді потрібно створити повідомлення, яке поєднує текстову інформацію зі значеннями змінних. У таких випадках виникає потреба в форматуванні рядка за певним шаблоном. Це можна зробити за допомогою оператора % або методу format().Розгляньмо використання саме методу format().

 

Метод format

 

Метод format() є методом рядка, тому він застосовується до рядка:

v str.format(*args, **kwargs).

 

Цей метод дає змогу створювати рядки, що містять явний текст та місця для заміни, де пізніше метод format() підставить конкретні значення з аргументів. Поля для заміни мають вигляд фігурних дужок «{}», всередині яких можна вказати параметри для заміни. Якщо потрібно ввести сам символ фігурної дужки у текст, його слід подвоїти: «{{» або «}}».

 

Підстановка значень

 

Найпростішим варіантом є підстановка лише одного значення.

>>>‘Hello, {}!’.format(‘World’) ‘Hello, World!’

Тобто в рядкуHello, {}!’ міститься явний текст «Hello, « та єдине поле заміни, замість якого за методом format() буде підставлений аргумент ‘World’. За необхідності сформувати рядок, в який підставлятимуться декілька значень, необхідно в рядку розмістити відповідну кількість полів заміни, а в методі format() вказати необхідну кількість аргументів. Вказані аргументи будуть підставлені в поля заміни в порядку їх слідування.

Відповідно кількість полів заміни та кількість аргументів має бути однаковою.

>>> ‘Точка ({}; {})’.format(3, 5)

 ‘Точка (3; 5)’

Значення аргументів можуть бути отримані зі списку чи кортежу (використовуючи оператор *).

>>> d=[3,5]

>>> ‘Точка ({}; {})’.format(*d)

‘Точка (3; 5)’

>>> d=(3,5)

>>> ‘Точка ({}; {})’.format(*d)

‘Точка (3; 5)’

>>> ‘Точка ({d[0]}; {d[1]})’.format(d=[3,5])

‘Точка (3; 5)’

>>> ‘Точка ({d[0]}; {d[1]})’.format(d=(3,5))

‘Точка (3; 5)’

Для можливості зміни порядку або вибору конкретного аргументу для підстановки у відповідне поле заміни, можна вказати порядковий номер аргументу в самому полі заміни. Ця нумерація аргументів розпочинається з 0.

>>> ‘x1={0}, x2={1}, x3={2}’.format(1, 3, 5)

 ‘x1=1, x2=3, x3=5’

>>> ‘x1={2}, x2={1}, x3={0}’.format(1, 3, 5)

‘x1=5, x2=3, x3=1’

>>> ‘x1={0}, x2={1}, x3={0}’.format(1, 3)

‘x1=1, x2=3, x3=1’

>>> ‘s1={0}, s2={1}’.format(*’13’)

 ‘s1=1, s2=3’

>>> ‘{0}{1}{0}’.format(‘abra’, ‘cad’)

‘abracadabra’

Якщо використання нумерації аргументів недостатньо, то можна іменувати аргументи, або отримувати іменовані аргументи зі словника (використовуючи оператор **).

>>> ‘Точка ({X}; {Y})’.format(X=3, Y=5)

‘Точка (3; 5)’

>>> coord={‘X’:3, ‘Y’:5}

>>> ‘Точка ({X}; {Y})’.format(**coord)

‘Точка (3; 5)’

 

Перетворення аргументів

 

Під час форматування рядка за допомогою методу format(), аргументи перед підстановкою в поля заміни традиційно перетворюються за допомогою функції str().

 

Однак можна задати інший метод перетворення, додавши до поля заміни знак оклику «!» та вказавши код методу перекодування у вигляді одного символу:

a – перекодування функцією str();

r – перекодування функцією repr();

s – перекодування функцією ascii().

Зрозуміло, таке перетворення доцільне тільки для текстових аргументів.

>>> ‘{0!s}{1!r}{0!a}’.format(‘abra’, ‘cad’)

«abra’cad’’abra’»

>>> ‘{0!s}{1!r}{0!a}’.format(‘абра’, ‘кад’)  

«абракад’’\\u0430\\u0431\\u0440\\u0430’»

>>> ‘{0}{1}{0}’.format(‘абра’, ‘кад’)

абракадабра

Детально про функції str(), repr() та ascii() можна прочитати в розділі роботи з рядковими величинами.

 

Встановлення ширини поля

 

Під час форматування рядка ширина поля визначається значенням аргументу, а саме кількістю символів, що необхідні для відображення аргументу після його перетворення. Якщо потрібно створити внутрішні відступи у полі заміни, можна вказати ширину поля. Ця ширина вимірюється в символах, тобто цілим числом, та може візуально організувати більші обсяги даних.

Для вказання ширини поля у специфікації поля заміни потрібно додати ціле число у фігурних дужках після двокрапки «:».

>>> ‘Точка ({:5}; {:6})’.format(-3, 5)

‘Точка ( -3; 5)’

>>> ‘Точка ({:5}; {:6})’.format(-3, 5)

‘Точка ( -3; 5)’

>>> ‘Точка ({:5}; {:6})’.format(‘X’, ‘Y’)

‘Точка (X ; Y )’

 

Вирівнювання значень

 

Як бачимо з наведених вище прикладів, як усталено числа вирівнюються за правою межею, а рядкові значення – за лівою. За необхідності можна змінити вирівнювання, вказавши односимвольний код вирівнювання:

< – вирівнювання за правою межею;

> – вирівнювання за лівою межею;

^ – вирівнювання за центром;

= – використовується лише для числових даних, знак виводиться крайнім лівим символом, а саме число вирівнюється за правою межею (утворюється відступ між знаком та числом).

>>> ‘Точка ({:<5}; {:<6})’.format(-3, 5)

‘Точка (-3 ; 5 )’

>>> ‘Точка ({:^5}; {:^6})’.format(‘X’, ‘Y’)

‘Точка ( X ; Y )’

>>> ‘Точка ({:=5}; {:=6})’.format(-3, 5)

‘Точка (- 3; 5)’

Зрозуміло, що вирівнювання застосовується лише за встановлення ширини поля.

 

Заповнення відступів

 

Як усталено відступи організовуються додаванням пропусків (символ « »). За необхідності можна вказати символ, який використовуватиметься, замість пропусків для заповнення відступів. Для цього на початку специфікації (після двокрапки) вказується необхідний символ (окрім символів фігурних дужок «{» та «}»).

>>> ‘Точка ({:*<5}; {:*<6})’.format(-3, 5)

‘Точка (-3***; 5*****)’

>>> ‘Точка ({:_^5}; {:_^6})’.format(‘X’, ‘Y’)

‘Точка (  X  ;   Y  )’

>>> ‘Точка ({:0=5}; {:0=6})’.format(-3, 5)

‘Точка (-0003; 000005)’

Зрозуміло, що використання символу заповнення, так само як і вирівнювання, застосовується лише за встановлення ширини поля. Проте також не допускається використання символу заповнення без явного вказання вирівнювання.

Якщо ніякого явного вирівнювання для числових типів не задано, перед полем ширини передбачено нульову підкладку (символ «0»). Це еквівалентно знаку заповнення ‘0’ з типом вирівнювання ‘=‘ .

>>> ‘Точка ({:05}; {:06})’.format(-3, 5)

‘Точка (-0003; 000005)’

 

Відображення знаку числа

 

Опція знаку числа використовується лише для чисел і може мати такі значення:

v – знак відображається лише для від’ємних чисел (початкове значення);

v + – знак відображається як для від’ємних, так і для додатних чисел (відповідно символи «-» та «+»);

v пропуск – для від’ємних чисел використовується символ «-», для додатних – символ пропуску « «.

>>> ‘Точка ({:+}; {:+})’.format(-3, 5)

‘Точка (-3; +5)’

>>> ‘Точка ({:-}; {:-})’.format(-3, 5)

‘Точка (-3; 5)’

>>> ‘Точка ({: }; {: })’.format(-3, 5) ‘Точка (-3; 5)’

 

Відокремлення груп розрядів

 

Як усталено в процесі виведення чисел всі цифри числа записуються без розривів (групи розрядів не відокремлені). За необхідності можна вказати символ, який використовуватиметься для відокремлення груп розрядів (тисяч). Таким символом може бути кома «,» або нижнє підкреслення «_».

>>> ‘Точка ({}; {})’.format(-30000, 50000)

‘Точка (-30000; 50000)’

>>> ‘Точка ({:,}; {:_})’.format(-30000, 50000)

‘Точка (-30,000; 50_000)’

 

Типи аргументів

 

Поле заміни також може містити вказівку на тип даних, що виводитимуться. Для цього необхідно вказати односимвольний код типу даних. Виокремлюють рядкові, цілі та дійсні типи.

 

Рядкові типи:

v s – рядковий формат. Тип стандартний для рядкових аргументів.

v None – те саме, що і «s».

 

Цілі типи:

v b – бінарний (двійковий) формат. Виведення числа за основою 2.

v c – символ. Перетворює ціле число у відповідний символ юнікоду перед виведенням.

v d – десяткове ціле число. Виведення числа за основою 10. o – вісімковий формат. Виведення числа за основою 8.

v xшістнадцятковий формат. Виведення числа за основою 16, використовуючи рядкові літери для цифр більше 9.

v X – те ж саме, що і «x», лише використовуються літери у верхньому регістрі.

v n – число. Теж саме, що і «d», лише використовуються поточні регіональні налаштування для вставки символів роздільника цифр.

v None – те ж саме, що і «d»

 

Дійсні типи:

v e – експонентна (наукова) форма (експонента «e» в нижньому регістрі). Точність початково дорівнює 6 знакам після коми.

v E – те саме, що і «e», лише експонента «E» у верхньому регістрі.

v f – фіксований формат. Виводить число з фіксованою точкою. Точність початково дорівнює 6 знакам після коми.

v F – те  саме, що і «f», лише перетворює nan та inf у верхній регістр, відповідно NAN та INF.

v g – загальний формат. Числа менші ніж 10-4 виводяться в експонентній формі, інші числа виводяться в фіксованому форматі (не більше 9 знаків після коми).

v G – те саме, що і «g», лише під час виведення експоненти «E» вона записується в верхньому регістрі, nan та inf також в верхньому регістрі (NAN та INF).

v n – число. Те саме, що і «g», лише використовуються поточні регіональні налаштування для вставки символів роздільника цифр.

v % – відсоток. Добуток числа на 100, відображеного в фіксованому форматі «f».

v None – Те саме, що і «g», за винятком того, що значення з фіксованою точкою має принаймні одну цифру перед десятковою крапкою. Точність початково настільки висока, наскільки потрібно для відображення певного значення. Загальний ефект полягає в тому, щоб відповідати виведенню str(), зміненому іншими модифікаторами формату.

>>> ‘int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}’

.format(42)

‘int: 42; hex: 2a; oct: 52; bin: 101010’

>>> ‘Точка ({:f}, {:f})’.format(math.pi/10000, math.pi/100000)

Точка (0.000314, 0.000031)’

>>> ‘Точка ({:g}, {:g})’.format(math.pi/10000, math.pi/100000)

Точка (0.000314159, 3.14159e-05)’>>> ‘Точка ({:%}, {:%})’.format(math.pi/10000, math.pi/100000)

‘Точка (0.031416%, 0.003142%)’

 

Точності

 

Точність у числах показує, скільки цифр має відображатися після десяткової коми у форматі з фіксованою точністю (за допомогою «f» або «F») або скільки цифр має відображатися до і після десяткової коми у загальному форматі (враховуючи знак числа та десяткову кому).

Для рядкових даних точність показує максимальний розмір поля, тобто скільки символів буде використано для представлення вмісту цього поля.

>>> ‘Точка ({:f}, {:.5f})’.format(math.pi/100000, math.pi/100000)

‘Точка (0.000031, 0.00003)’

>>> ‘Точка ({:f}, {:.5g})’.format(100.123456, 100.123456)

‘Точка (100.123456, 100.12)’

>>> ‘{:.2}’.format(‘Hello’) ‘He

 

Альтернативна форма перетворення

 

Опція «#» вказує на використання «альтернативної форми» під час перетворення чисел. Ця опція застосовується лише до цілих (int), дійсних (float), комплексних (complex) та десяткових чисел. Альтернативна форма визначається різним чином для різних типів.

У разі цілих чисел, якщо використовується двійкове, вісімкове чи шістнадцяткове виведення, опція «#» додає відповідний префікс «0b», «0o» або «0x» до початкового значення числа. Щодо інших чисел, альтернативна форма забезпечує наявність десяткової коми як результат перетворення навіть у разі, коли за нею немає жодної цифри.

 

 

Приклад. Написати програму, за якою буде визначатися, чи є задане користувачем слово паліндромом (паліндром – слово або фраза, яке читають однаково зліва направо і навпаки, наприклад, «шалаш»).

s=input(‘Введіть рядок:‘)

 if s==s[::-1]:

   print(‘Паліндром’)

 else:

   print(‘Не паліндром’)

 

Приклад. Дано рядок, який складається із слів, розділених пропусками. Написати програму, за якою обраховуватиметься кількість слів в рядку.

Якщо припустити, що пропуски містяться лише між словами їх там чітко по одному, то розв’язок задачі може бути такий:

s=input(‘Введіть рядок:‘)

n=s.count(‘ ‘)+1

print(n)

Якщо ж пропусків між словами може бути скільки завгодно, то розв’язок задачі може бути такий:

s=input(‘Введіть рядок:‘)

a=list(s.split(‘ ‘))

b=[]

for i in a:

    if i!=‘‘ :

      b=b+[i]

print(len(b))

Останній цикл можна переписати у формі генератора списку:

b =[i for i in a if i!=‘‘]

 

Приклад. Дано рядок. Написати програму, за якою відбуватиметься поділ рядка на дві рівні частини (якщо довжина рядка непарна, то перша частина має бути на один символ меншою) та виведення їх окремими рядками. Під час розв’язання задачі не використовувати інструкцію if.

s=input(‘Введіть рядок:‘)

print(s[:len(s)//2])

print(s[len(s)//2:])

 

Приклад. Дано рядок, який складається із слів розділених, пропусками та розділовими знаками (,.!?). Написати програму, за якою буде виведено всі слова окремими рядками.

s=input(‘Введіть рядок:‘)

a=list(s.split(‘ ‘))

for i in a:

    if i!=‘‘:

       print(i.strip(‘,.!?’))

Останній цикл можна переписати у формі генератора списку:

[print(i.strip(‘,.!?’)) for i in a if i!=‘‘]

 

Приклад. Дано рядок, який складається із слів, розділених пропусками та розділовими знаками (,.!?). Написати програму, за якою буде виведено всі слова парної довжини окремими рядками.

s=input(‘Введіть рядок:‘)

a=list(s.split(‘ ‘))

a=[i.strip(‘,.!?’) for i in a if i!=‘‘]

[print(i) for i in a if len(i)%2==0]

 

Приклад. Дано рядок, який складається із слів, розділених пропусками та розділовими знаками (,.!?). Написати програму, за якою буде виведено всі слова що не містять повторюваних символів.

s=input(‘Введіть рядок:‘)

a=list(s.split(‘ ‘))

a=[i.strip(‘,.!?’) for i in a if i!=‘‘]

for i in a:

    flag=True

    for j in i:

      if i.count(j)!=1:

        flag=False

    if flag:

      print(i)

 

Приклад. Реєстр символів

txt=ʺми вивчаємо мову PYTHONʺ

print(txt.upper())

print(txt.lower())

print(txt.capitalize())

print(txt.title())

print(txt.swapcase())

print(txt)

Результат виконання програми

ми вивчаємо мову python

ми вивчаємо мову python

Ми вивчаємо мову python

Ми Вивчаємо Мову Python

ми вивчаємо мову python

ми вивчаємо мову PYTHON

 

Приклад. Пошук і заміна символів

txt=ʺʺʺВ.С. Стус. ʺСто років...ʺ (уривок):

Сто років як сконала Січ.

Сибір. І соловецькі келії.

І глупа облягає ніч

Пекельний край і крик пекельний.

Сто років мучених надій,

І сподівань, і вір, і крові

Синів, що за любов тавровані,

Сто серць, як сто палахкотінь.ʺʺʺ

word=ʺСтоʺ

print(txt,end=‘\n\n’)

print(ʺПідрядок зустрічаєтьсяʺ,txt.count(word),ʺразиʺ)

print(ʺПерша позиція:ʺ,txt.index(word))

print(ʺНаступна позиція:ʺ,txt.find(word,13))

print(ʺОстання позиція:ʺ,txt.rindex(word))

print(ʺНа початку ініціали:ʺ,txt.startswithВ.С.ʺ))

print(ʺУ кінці крапка:ʺ,txt.endswith(ʺ.ʺ),end=‘\n\n’)

print(txt.replace(ʺ ʺ,ʺ_ʺ))

 

Виконання програмного коду призводить до такого результату:

В.С. Стус. ʺСто років...ʺ (уривок):

Сто років як сконала Січ.

Сибір. І соловецькі келії.

І глупа облягає ніч

Пекельний край і крик пекельний.

Сто років мучених надій,

І сподівань, і вір, і крові

Синів, що за любов тавровані,

Сто серць, як сто палахкотінь.

Підрядок зустрічається 4 рази

Перша позиція: 12

Наступна позиція: 36

Остання позиція: 225

На початку ініціали: True

У кінці крапка: True

В.С._Стус._ʺСто_років...ʺ_(уривок):

Сто_років_як_сконала_Січ.

Сибір._І_соловецькі_келії.

І_глупа_облягає_ніч

Пекельний_край_і_крик_пекельний.

Сто_років_мучених_надій,

І_сподівань,_і_вір,_і_крові

Синів,_що_за_любов_тавровані,

Сто_серць,_як_сто_палахкоті

 

Приклад. Деякі операції з рядками

txt=ʺ_*_ABC_*_abc_*_ʺ

print(txt.lstrip(ʺ_*_ʺ))

print(txt.rstrip(ʺ_*_ʺ))

print(txt.strip(ʺ_*_ʺ))

print(txt.split(ʺ*ʺ))

print(txt.rsplit(ʺ*ʺ))

print(txt.partition(ʺ*ʺ))

print(txt.rpartition(ʺ*ʺ))

print(ʺabc \n ABC \n ***ʺ.splitlines())

print(ʺ_*_ʺ.join([ʺAAAʺ,ʺBBBʺ,ʺCCCʺ]))

 Результат виконання програми

ABC_*_abc_*_

_*_ABC_*_abc

ABC_*_abc

[‘_’, ‘_ABC_’, ‘_abc_’, ‘_’]

[‘_’, ‘_ABC_’, ‘_abc_’, ‘_’]

(‘_’, ‘*’, ‘_ABC_*_abc_*_’)

(‘_*_ABC_*_abc_’, ‘*’, ‘_’)

[‘abc ‘, ‘ ABC ‘, ‘ ***’]

AAA_*_BBB_*_CCC

 

Іноді доводиться мати справу з кодами символів. Функція chr() дає змогу за кодом символу відновити сам символ: як аргумент функції передається код, а результатом є символ. Зворотна процедура (визначення коду для символу) виконується за допомогою функції ord(): як аргумент функції передається символ, а результатом функції є код цього символу.

 

Приклад. Рядок формату

txt=ʺ{0} по {0} - буде {1}ʺ

print(txt.format(ʺдваʺ,ʺчотириʺ))

print(txt.format(ʺтриʺ,ʺдев’ятьʺ))

print(ʺТекст ‘{0}’: {0:<20}.ʺ.formatabcdefʺ))

print(ʺТекст ‘{0}’: {0:^20}.ʺ.formatabcdefʺ))

print(ʺТекст ‘{0}’: {0:>20}.ʺ.formatabcdefʺ))

Результат виконання програми

два по два – буде чотири

три по три – буде дев’ять

Текст ‘abcdef’: abcdef.

Текст ‘abcdef’: abcdef.

Текст’abcdef’: abcdef.

 

Завдання для самоперевірки

Завдання 1. Скласти програму мовою Python

1. Заданий рядок S. Перетворити S таким чином:

1) видалити з S перше входження літеросполученняread’;

2) після першого літеросполученняtrвставитиue’;

3) в рядок X скопіювати 5 символів з рядка S, починаючи з 2 позиції;

4) всі входженняedзамінити на ‘ing’.

2. Заданий рядок S. Перетворити S таким чином:

1) видалити з S перше входження літеросполученняdo’;

2) після першої букви ‘e’ вставити літеросполученняnd’;

3) в рядок X скопіювати 4 символи з рядка S, починаючи зі середини рядка;

4) замінити всі літеросполученняit ‘ на ‘is.

3. Заданий рядок S. Перетворити S таким чином:

1) видалити з S перше входження літеросполученняare’;

2) після першої букви ‘a’ вставити літеросполученняbc’;

3) у рядок X скопіювати 6 символів з рядка S, починаючи з позиції наступної за першою буквою ‘a’;

4) видалити з S кожен символ ‘*’.

4. Заданий рядок S. Перетворити S таким чином:

1) видалити з S перше входження літеросполученняwe;

2) після першого літеросполученняelвставитиse’;

3) в рядок X скопіювати 3 символи з рядка S, починаючи з 5 позиції;

4) всі входженняkmзамінити на ‘cn.

 

Завдання 2. Скласти програму мовою Python

1.Після введення з клавіатури довільного рядка визначити і вивести на екран кількість цифр і загальну суму символів у ньому.

2.Після введення з клавіатури довільного рядка вивести на екран цей рядок із відсортованими в ньому символами в порядку, зворотному алфавітному.

3.Після введення з клавіатури довільного рядка визначити і вивести на екран кількість у ньому символів, які не є літерами.

4.Після введення з клавіатури довільного рядка вивести на екран цей рядок із відібраними в нього літерами кирилиці.

 

 

Ø Текстовий рядок упорядкований набір символів. Текстові літерали беруть в одинарні або подвійні лапки.

Ø Для додавання апострофа, подвійних лапок, оберненої скісної риски перед цими символами вказують обернену скісну риску \. Обернену скісну риску використовують і в деяких спеціальних символах, як-от табуляція \t або інструкція переходу до нового рядка \n.

Ø До елементів (символів) рядка можна звертатися за індексом (індексація літер у рядку починається з нуля): після текстової змінної у квадратних дужках зазначають індекс літери в рядку. Також допускається виконання зрізів для текстового рядка.

Ø Змінити текстове значення не можна (але можна текстовій змінній присвоїти нове значення).

Ø Для конкатенації (об’єднання) текстових рядків використовують оператор +. Явне зведення до текстового типу виконують за допомогою функції str().

Ø Кількість літер у текстовому рядку можна визначити за допомогою функції len().

Ø Існує значна кількість методів, які дають змогу виконувати найрізноманітніші операції з текстовими значеннями, зокрема такі: перетворення реєстру символів, пошук символів і підрядків, заміна текстових фрагментів, розбивка рядків на підрядки, перевірка вмісту текстового рядка, форматування текстового рядка для виведення в консоль і багато іншого.

 

Питання для перевірки засвоєних знань

1. Які методи можна використовувати для задання рядкових літералів в Python?

2. Що таке універсальні рядкові літерали (raw string literals) і як їх використовувати?

3. Що таке рядкові літерали та для чого їх використовують у програмуванні?

4. Які способи можна використовувати для включення лапок у рядковий літерал?

5. Що таке методи спеціальних символів у рядкових літералах?

6. Як використовувати escape-послідовності у рядкових літералах?

7. Як використовувати перенесення рядків у Python?

8. Як вивести рядок із символами табуляції у Python?

9. Чому потрібно уникати прямих і обернених слешів у рядках?

10. Які особливості в роботі з рядковими літералами можна відзначити в Python порівняно з іншими мовами програмування?

11. Які різновиди літералів для рядків є у Python?

12. Чим відрізняються одиночні та подвійні лапки під час задання рядків?

13. Що таке потрійні лапки і для чого їх використовують?

14. Як можна включати апострофи та лапки у рядок, якщо вони збігаються зі знаками позначення лапок?

15. Які спеціальні символи можна використовувати в рядкових літералах?

16. Як створити рядок з лапками або апострофами без використання escape-послідовностей?

17. Як використовувати escape-послідовності у Python для спеціальних символів?

18. Чому важливо використовувати потрійні лапки для деяких рядкових даних?

19. Що таке рядкові методи та які найбільш поширені?

20. Як можна конкатенувати рядки у Python?

Попередня тема

На початок

Наступна тема