Приклади розв’язку задач на рядки символів. Частина 1
У даній темі наведено приклади розв’язку деяких поширених задач на рядки символів без використання стандартних функцій мови Python.
Перед вивченням даної теми рекомендується ознайомитись з темами:
- Рядки. Загальні поняття. Оголошення рядка. Операції над рядками. Приклади
- Екрановані послідовності. Неформатовані рядки. Багаторядкові блоки тексту
- Доступ за індексами. Зрізи. Отримання фрагменту рядка. Приклади
Зміст
- 1. Рекурсивна функція CountCharacterToString(). Визначення кількості входжень заданого символу в рядку
- 2. Функція IsCharDigit(). Визначити, чи є цифрою символ, що заданий номером позиції в рядку
- 3. Функція IsCharOp(). Визначити кількість символів +, –, *, /, % у рядку
- 4. Функція GetNOccurs(). Визначення, скільки разів у даному рядку зустрічається заданий рядок
- 5. Функція GetPosFirstOccur(). Визначити позицію (номер) першого входження підрядка в рядку
- 6. Функція IsSubstringToString(). Визначення наявності підрядка в рядку
- Зв’язані теми
Пошук на інших ресурсах:
1. Рекурсивна функція CountCharacterToString(). Визначення кількості входжень заданого символу в рядку
# Рекурсивна функція - повертає кількість входжень # заданого символу в списку def CountCharacterToString(c, s): if s=="": # умова завершення циклу return 0 else: if c==s[0]: # порівняння символу з першим елементом рядка return 1 + CountCharacterToString(c, s[1:]) # рекурсивний виклик else: return CountCharacterToString(c, s[1:]) # Викликати функцію CountCharacterToString() n = CountCharacterToString('a', "jprstaajklmnabcdadsad") print("n = ", n)
Результат роботи програми
n = 5
⇑
2. Функція IsCharDigit(). Визначити, чи є цифрою символ, що заданий номером позиції в рядку
Функція IsCharDigit() визначає, чи є цифрою символ, що розміщується у вказаній позиції рядка. Функція отримує параметри:
- рядок, в якому здійснюється пошук;
- номер позиції символу, який потрібно перевіряється.
Нижче наведено 4 способи реалізації функції.
⇑
2.1. Спосіб 1. Безпосереднє визначення належності символу діапазону цифр
При цьому способі для визначення цифри використовується порівняння виду
(s[index]>='0') and (s[index]<='9')
в якому здійснюється визначення належності окремого символу s[index] діапазону чисел від ‘0’ до ‘9’.
# Визначення, чи в заданій позиції рядка розміщується цифра def IsCharDigit(s, index): # Перевірка, чи коректне значення index if (index<0)or(index>len(s)-1): return False return (s[index]>='0')and(s[index]<='9') # Ввід рядка s = input("s = ") # Ввід індексу index = int(input("index = ")) # Виведення результату if IsCharDigit(s, index): print("Yes") else: print("No")
Результат виконання програми
s = ABC123DEF index = 4 Yes
⇑
2.2. Спосіб 2. Використання функції ord()
В цьому способі можна використати функцію ord(), яка повертає код символу. Символ ‘0’ має код 48, символ ‘1’ має код 49 і т.д. Відповідно, символ, що відповідає останній цифрі, має код 57.
Тому, у вищенаведеному прикладі (спосіб 1) фрагмент рядка
(s[index]>='0')and(s[index]<='9')
можна замінити наступним фрагментом рядка
(ord(s[index])>=48)and(ord(s[index])<=57)
⇑
2.3. Спосіб 3. Використання стандартної функції isdigit()
Функція isdigit() з бібліотеки Python дозволяє визначити, чи символ є цифрою. З врахуванням цього, модифікований варіант функції IsCharDigit() має вигляд
# Визначення, чи в заданій позиції рядка розміщується цифра def IsCharDigit(s, index): # Перевірка, чи коректне значення index if (index<0)or(index>len(s)-1): return False return s[index].isdigit() # Ввід рядка s = input("s = ") # Ввід індексу index = int(input("index = ")) # Виведення результату if IsCharDigit(s, index): print("Yes") else: print("No")
⇑
2.4. Спосіб 4. Використання рядка-порівняння
Цей спосіб добре підходить для визначення належності символу деякій множині символів, яка містить усі можливі значення. Символи, що утворюють множину символів для порівняння, формуються у вигляді рядка. У нашому випадку порівнюються символи цифр, тому рядок порівняння має вигляд:
sAll = "0123456789"
Вищенаведений рядок містить усю множину цифр числа. Відповідно до вищесказаного, змінена функція IsCharDigit() має такий вигляд.
# Визначення, чи в заданій позиції рядка розміщується цифра def IsCharDigit(s, index): # Перевірка, чи коректне значення index if (index<0)or(index>len(s)-1): return False # Рядок, що містить усі можливі значення, що відповідають цифрі sAll = "0123456789" # Цикл пошуку в рядку sAll символа s[index] for c in sAll: if c == s[index]: # якщо символ s[index] є в наборі допустимих символів return True return False # Ввід рядка s = input("s = ") # Ввід індексу index = int(input("index = ")) # Виведення результату if IsCharDigit(s, index): print("Yes") else: print("No")
⇑
3. Функція IsCharOp(). Визначити кількість символів +, –, *, /, % у рядку
Функція IsCharOp() отримує параметром рядок і визначає кількість символів операцій (+, –, *, /, %) у цьому рядку. Щоб зменшити кількість порівнянь, у функції використовується додатковий рядок
sAll = "+-*/%"
який містить усі допустимі символи операцій.
# Визначення, чи в заданій позиції рядка розміщується цифра def IsCharOp(s): # Рядок, що містить усі можливі значення, що відповідають цифрі sAll = "+-*/%" # Цикл визначення кількості символів в рядку k = 0 # результат for c1 in s: for c2 in sAll: if c1==c2: k = k+1 return k # Ввід рядка s = input("s = ") # Обчислення та вивід результату k = IsCharOp(s) print("k = ", k)
Результат виконання програми
s = fhg+-/*%%%++-ghjg+-% k = 13
⇑
4. Функція GetNOccurs(). Визначення, скільки разів у даному рядку зустрічається заданий рядок
4.1. Використання стандартної функції count()
У мові Python є функція count(), яка визначає, скільки разів у даному рядку зустрічається заданий підрядок.
# Визначити, скільки в рядку зустрічається підрядок s1 = "abc abcd bcd defg bcdef" s2 = "bc" k = s1.count(s2) print("k = ", k)
Результат виконання програми
k = 4
⇑
4.2. Розв’язок без використання функції count()
# Визначити, скільки в рядку зустрічається підрядок def GetNOccurs(sub, s): k = 0 # результат index_s = 0 # позиція в рядку s з якої відбувається пошук підрядка while (index_s < len(s)): f_is=True # прапорець наявності підрядка в рядку index_sub = 0 # індекс початку порівняння у рядку sub # цикл пошуку підрядка в рядку while index_sub<len(sub): # перевірка, чи не досягнуто кінець рядка s if (index_s+index_sub) == len(s): f_is = False index_s = len(s)-1 break # перевірка на неспівпадіння символів if s[index_s+index_sub]!=sub[index_sub]: f_is = False break else: index_sub = index_sub+1 # Перевірка, чи всі символи рядка і підрядка співпали if f_is: index_s = index_s + len(sub) # обробка, якщо співпали k = k+1 else: index_s = index_s+1 # обробка, якщо не співпали return k # Використання функції GetNOccurs() s1 = "abccc bcccca bcd" s2 = "cc" k = GetNOccurs(s2, s1) print("k = ", k)
Результат виконання програми
k = 3
⇑
5. Функція GetPosFirstOccur(). Визначити позицію (номер) першого входження підрядка в рядку
У мові Python є цілий ряд стандартних функцій, які визначають позицію входження підрядка в рядку. Більш детально про ці стандартні функції описується тут.
У даному прикладі реалізовано власну функцію GetPosFirstOccur(), яка визначає позицію (номер) першого входження підрядка в рядку.
# Визначити позицію першого входження підрядка в рядку. # Рядок переглядається зліва-направо. def GetPosFirstOccur(sub, s): index_s = 0 # позиція в рядку s з якої відбувається пошук підрядка while (index_s < len(s)): f_is=True # прапорець наявності підрядка в рядку index_sub = 0 # індекс початку порівняння у рядку sub # цикл пошуку підрядка в рядку while index_sub<len(sub): # перевірка, чи не досягнуто кінець рядка s if (index_s+index_sub) == len(s): f_is = False index_s = len(s)-1 break # перевірка на неспівпадіння символів if s[index_s+index_sub]!=sub[index_sub]: f_is = False break else: index_sub = index_sub+1 # Перевірка, чи всі символи рядка і підрядка співпали if f_is: return index_s # якщо співпали, то повернути позицію else: index_s = index_s+1 # обробка, якщо не співпали return -1 # якщо не знайдено підрядка, то повернути -1 # Використання функції GetPosFirsOccur() s1 = "abccc bcccca bcd" s2 = "cd" pos = GetPosFirstOccur(s2, s1) print("pos = ", pos)
Результат виконання програми
pos = 14
⇑
6. Функція IsSubstringToString(). Визначення наявності підрядка в рядку
Версія 1. У даній функції можна викликати попередньо розроблену функцію GetNOccurs() з пункту 4.2. Потім обробити повернуте значення k. Якщо k>0, то підрядок є в рядку, якщо k=0, то підрядка в рядку немає. Текст функції буде приблизно таким:
# Функція IsSubstringToString() def IsSubstringToString(sub, s): k = GetNOccurs(sub, s) # Викликати функцію з п. 4.2. if (k==0): return False else: return True
⇑
Зв’язані теми
- Приклади розв’язку задач на рядки символів. Частина 2
- Розв’язування задач на обробку цілих чисел. Частина 1
- Розв’язування задач на обробку цілих чисел. Частина 2
⇑