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}

 


Связанные темы