Модуль 18. Задача 6. Сжатие

С увеличением объема данных возникла потребность в сжатии этих данных, при этом не потеряв важную информацию. Для этого было придумано кодирование, которое осуществляется следующим образом:

s = ‘aaaabbсaa’ преобразуется в ‘a4b2с1a2’, то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.

Напишите программу, которая считывает строку, кодирует её предложенным алгоритмом и выводит закодированную последовательность на экран. Кодирование должно учитывать регистр символов.

Пример:

Введите строку: aaAAbbсaaaA

Закодированная строка: a2A2b2с1a3A1

Решение:

def compress(str_txt):
    str_len = len(str_txt)
    result = ''

    if str_len > 0:
        i = 0
        while i < str_len:
            counter = 0
            curr_char = str_txt[i:i + 1]
            while i < str_len and str_txt[i] == curr_char:
                i += 1
                counter += 1
            result += curr_char + str(counter)
    return result

text = input('Введите строку: ')

print(compress(text))


Как можно отблагодарить:

  • Оформить удобную для вас подписку на Boosty.to
  • Разово поддержать через DonationAlerts
4420login-checkМодуль 18. Задача 6. Сжатие

4 thoughts on “Модуль 18. Задача 6. Сжатие

    • LLIaMMaH says:

      Добрый день, Кирилл. Вопрос про [i:i + 1] или почему str_txt?
      Если str_txt — то это название входного параметра со строкой и из неё нам нужно взять нужный кусок.
      Если [i:i + 1] — то это можно посмотреть при отладке и тогда станет более понятно. Мы же должны взять символ с позиции i, и потом проверять, сколько ещё подобный символ есть у нас в строке. Попадая в while вы это и высчитываем. Но и в конце прибавляем к result конкретный символ и счётчик. Так у нас происходит смещение, где брать следующий символ.

Добавить комментарий