Python. Приклади розв’язку задач на рядки символів. Частина 2

Приклади розв’язку задач на рядки символів. Частина 2


Зміст


Пошук на інших ресурсах:




1. Функція ChangeCharToStr(). Заміна символа в рядку

 

# Заміна символа в рядку.
# Параметри:
# - s - вихідний рядок;
# - c_old - символ, який потрібно замінити;
# - c_new - символ, який замінює символ c_old.
# Функція повертає новий (змінений) рядок.
def ChangeCharToStr(s, c_old, c_new):
    # Початкові присвоєння
    s2 = ""
    i = 0

    # Цикл заміни символу
    while i<len(s):
        if s[i]==c_old:
            s2 = s2+c_new
        else:
            s2 = s2+s[i]
        i = i+1

    return s2

# Демонстрація використання методу
s = "asd sdks slkdj sss"

s2 = ChangeCharToStr(s, 's', 'X')
print("s =   ", s)
print("s2 = ", s2)

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

s =   asd sdks slkdj sss
s2 = aXd XdkX Xlkdj XXX

 

2. Функція ChangeCharToStrPair(). Заміна символа на інший символ в рядку на парних позиціях

Функція ChangeCharToStrPair() має подібний з попередньою функцією ChangeCharToStr() код. Щоб визначити, чи парна позиція, використовується умова

i%2 == 0

де i – номер позиції.

 

# Заміна символа на інший символ, що лежить на парній позиції.
# Парні позиції вважаються позиції 0, 2, 4, ...
# Параметри:
# - s - вихідний рядок;
# - c_old - символ, який потрібно замінити;
# - c_new - символ, який замінює символ c_old.
# Функція повертає новий (змінений) рядок.
def ChangeCharToStrPair(s, c_old, c_new):
    # Початкові присвоєння
    s2 = ""
    i = 0

    # Цикл заміни символів на парних позиціях
    while i<len(s):
        if (s[i]==c_old)and(i%2==0):
            s2 = s2+c_new
        else:
            s2 = s2+s[i]
        i = i+1

    return s2

# Демонстрація використання методу
s = "sad sdks slkdj sss"
s2 = ChangeCharToStrPair(s, 's', 'X')
print("s = ", s)
print("s2 = ", s2)

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

s =   sad sdks slkdj sss
s2 = Xad Xdks slkdj sXs

 

3. Функція DelCharAtPos(). Видалення букви зі слова, заданої номером позиції

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

 

# Видалення букви зі слова, заданої номером позиції
# Параметри:
# - s - рядок, з якого видаляється символ;
# - pos - позиція символу в рядку, що видаляється.
def DelCharAtPos(s, pos):
    # 1. Перевірка, чи коректні дані
    if (pos<0) or (pos>=len(s)):
        return s

    # 2. Видалення символу через зріз
    return s[:pos]+s[pos+1:]

s = "0123456789"
s2 = DelCharAtPos(s, 0)

print("s = ", s)
print("s2 = ", s2)

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

s =   0123456789
s2 = 123456789

 

4. Функція DelChar(). Видалення всіх входжень заданого символа з рядка

У функції DelChar() з вихідного рядка s створюється новий рядок s2, який не містить заданого символа c.

 

# Видалення всіх входжень заданого символа з рядка
# Параметри:
# - s - рядок, з якого видаляється символ;
# - c - символ, що видаляється.
def DelChar(s, c):
    # новостворений рядок
    s2 = ""

    for sym in s:
        if sym!=c: # до рядка s2 додаються усі символи крім sym
            s2 += sym
    return s2

s = "012345363738494"
s2 = DelChar(s, '3')

print("s =   ", s)
print("s2 = ", s2)

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

s =   012345363738494
s2 = 01245678494

 

5. Функція DelSubstring(). Видалення всіх входжень заданого підрядка в рядку

Модифікацією попередньої функції DelChar() є функція DelSubstring(), яка видаляє усі входження підрядка з заданого рядка.

# Видалення всіх входжень заданого підрядка з рядка
# Параметри:
# - s - рядок, з якого видаляється підрядок;
# - sub - підрядок, що видаляється.
def DelSubstring(s, sub):
    # новостворений рядок
    s2 = ""
    index_s = 0

    while index_s<len(s):
        # отримати підрядок з допомогою зрізу
        sub2 = s[index_s : index_s+len(sub)]

        # перевірка на рівність вихідного підрядка sub з поточним sub2
        if sub2==sub:
            index_s = index_s + len(sub)
        else:
            s2 = s2+s[index_s]
            index_s = index_s+1

    return s2

s = "12344334343455"
s2 = DelSubstring(s, '3')
print("s =   ", s)
print("s2 = ", s2)

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

s =   12344334343455
s2 = 124444455

 

6. Функція FormArrayWords(). Формування масиву частоти входжень слів у рядку

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

# Словник визначає кількість входжень слова у рядку.
# Параметри:
# - s - рядок, який розглядається;
# - chars - масив символів-розділювачів слів.
def FormArrayWords(s, chars):
    # 1. Врахувати, що символи розділювачі можуть бути на початку рядка
    index_s = 0
    while (index_s<len(s))and(s[index_s] in chars):
        index_s = index_s+1

    # 2. Початкові налаштування
    prev_index = index_s # позиція початку слова
    A = [] # список слів

    # 3. Цикл виділення слів у рядку у вигляді списку
    while index_s < len(s):
        if s[index_s] in chars: # якщо s[index_s] - символ-розділювач
            sub = s[prev_index:index_s] # отримати підрядок
            A = A+[sub] # додати підрядок до масиву

            # перемотка, якщо декілька символів-розділювачів йде підряд
            while (index_s<len(s))and(s[index_s] in chars):
                index_s = index_s+1
            prev_index = index_s

        else: # якщо символа-розділювача немає
            index_s = index_s+1

            # перевірка, чи останнє слово
            if index_s==len(s):
                sub = s[prev_index:index_s]
                A = A + [sub]

    # 4. формування словника на основі списку A
    D = {}
    for word in A:
        if word not in D:
            D[word] = 1
        else:
            D[word] = D[word]+1

    return D

# Демонстрація використання методу
# 1. Вихідний рядок
s = " ,, abc defg hjk, , mm nn, op op mm abc, "

# 2. Масив символів-розділювачів
chars = [ ' ', ',']

# 3. Формування частотного словника
D = FormArrayWords(s, chars)
print("D = ", D)

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

D = {'abc': 2, 'defg': 1, 'hjk': 1, 'mm': 2, 'nn': 1, 'op': 2}

 


Зв’язані теми