С увеличением объема данных возникла потребность в сжатии этих данных, при этом не потеряв важную информацию. Для этого было придумано кодирование, которое осуществляется следующим образом:
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
44200login-checkМодуль 18. Задача 6. Сжатие

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