Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
1 / 1 / 0
Регистрация: 13.05.2014
Сообщений: 39

Закодировать строку алгоритмом и вывести ее

06.09.2015, 18:35. Показов 7883. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
"Кодирование осуществляется следующим образом:
s = 'aaaabbсaa' преобразуется в 'a4b2с1a2', то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.

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

Не могу понять, как это решить. Основная проблема - "неизменяемость" строк в Python(( Есть маленький опыт в С, лишь благодаря ему написал следующий код:


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
s = input()
n = 1
s2 = 'a'
del s2[0]
 
for i in s:
    if s[i] == s[i+1]:
        n+=1
    else:
        s2[i] = s[i]+n
    n=1
        
print(s2)
Добавлено через 8 минут
P.S: Понимаю, что метод del не работает на строке, да и сам код не работает.

И еще вопрос вдогонку. Как я понимаю, метод replace не изменяет саму строку, зачем он нужен, если ничего не меняет?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2015, 18:35
Ответы с готовыми решениями:

Закодировать входную строку алгоритмом сокращения повторяющихся символов.
Закодировать входную строку алгоритмом сокращения повторяющихся символов. Каждая последовательность одинаковых символов длиной более 4...

Закодировать алгоритмом RLE
У меня есть файл, в котором находится последовательность символов и нужно их закодировать алгоритмом RLE и полученный результат в...

Строку закодировать с помощью последовательности Баркера и вывести на экран
Итак, пользователь вводит шестиразрядное двоичное число с клавиатуры. Эту строку нужно закодировать с помощью последовательности...

10
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
06.09.2015, 18:59
Лучший ответ Сообщение было отмечено ToshiDono как решение

Решение

Цитата Сообщение от ToshiDono Посмотреть сообщение
P.S: Понимаю, что метод del не работает на строке, да и сам код не работает.
Коль понимаешь, то какого лешего ты его пытаешься использовать?! Это почти тоже самое, как брать топор и начинать рубить свою руку.


Этот алгоритм называется RLE, вот тут http://rosettacode.org/wiki/Ru... ing#Python можно посмотреть один из примеров его реализации

А если поменять чуть чуть код, чтобы генерировалась строка, а не список кортежей, то вот:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def encode(input_string):
    count = 1
    prev = ''
    result = ''
    for character in input_string:
        if character != prev:
            if prev:
                result += '{}{}'.format(count, prev)
                #print lst
            count = 1
            prev = character
        else:
            count += 1
    else:
        result += '{}{}'.format(count, character)
    return result
 
print(encode("aaaaahhhhhhmmmmmmmuiiiiiiiaaaaaa"))
Цитата Сообщение от ToshiDono Посмотреть сообщение
И еще вопрос вдогонку. Как я понимаю, метод replace не изменяет саму строку, зачем он нужен, если ничего не меняет
Как это зачем!?! Затем, чтобы заменить подстроку и получить новую строку
Python
1
2
3
4
5
6
>>> test = 'привет'
>>> print(test)
привет
>>> test = test.replace('п', 'П')
>>> print(test)
Привет
1
1 / 1 / 0
Регистрация: 13.05.2014
Сообщений: 39
06.09.2015, 19:01  [ТС]
кажется понял с replace'ом...
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
06.09.2015, 19:04
Цитата Сообщение от ToshiDono Посмотреть сообщение
Так он же не меняет строку!
Естественно не меняет, потому что строки не изменяемый объект. Он создаёт новую строку и возвращает ее тебе. Если ты посмотришь на пример, который я тебе кинул и секунду подумаешь, то все поймёшь.
0
1 / 1 / 0
Регистрация: 13.05.2014
Сообщений: 39
06.09.2015, 19:29  [ТС]
не могу понять, что делает этот код:
Цитата Сообщение от alex925 Посмотреть сообщение
Python
1
2
if character != prev:
* * * * * * if prev:
character - временная переменная, равная текущему значению в строке, prev - пустая строка
Что это означает в данном контексте? prev как False?
if prev: - тот же вопрос, не понятно это условие

P.S.:спасибо за код! пытаюсь разобраться=)
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
06.09.2015, 19:50
Цитата Сообщение от ToshiDono Посмотреть сообщение
character - временная переменная, равная текущему значению в строке, prev - пустая строка
Python
11
            prev = character
prev - тоже временная переменная, равная предыдущему текущему значению в строке
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
06.09.2015, 20:01
Python
1
2
def f(m): return '{}{}'.format(m.group(1), len(m.group(0)))
re.sub(r'(.)\1*', f,  'aaaabbсaa')
0
1 / 1 / 0
Регистрация: 13.05.2014
Сообщений: 39
06.09.2015, 20:23  [ТС]
Что тогда делают два выделенных мною выше условия?
*в смысле я не могу их логически прочитать
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
07.09.2015, 08:03
Пардон, а зачем вам менять строки?
Собрать данные, потом один раз сформировать на их основе строку.
И чем вам не угодили кортежи?
0
1 / 1 / 0
Регистрация: 13.05.2014
Сообщений: 39
07.09.2015, 19:52  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
И чем вам не угодили кортежи?
Условием задачи. Их нельзя использовать по условию.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
08.09.2015, 07:00
Цитата Сообщение от ToshiDono Посмотреть сообщение
Их нельзя использовать по условию.
Ну это довольно просто обойти, надо лишь использовать два списка. Просто неудобно будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.09.2015, 07:00
Помогаю со студенческими работами здесь

Закодировать входную последовательность байтов заданным алгоритмом
Входная строка байтов имеет длину, кратную 8, написать кодирующую его программу следующей схемой: восемь бит первого байта записываются,...

Закодировать строку
Подскажите, пожалуйста, что не так в коде. Дана строка-предложение. Закодировать ее, т.е. указать сначала все символы, расположенные на...

Закодировать строку
Доброго времени форумчани, уже второй день не могу решить задачку. Вот смотрите я через jquery кодировал строку ...

Закодировать и декодировать строку
С помощью процедуры обработки строки с параметром процедурного типа закодировать и декодировать строку.

Закодировать строку методом LZ-77
Требуется закодировать текст методом LZ-77: четыре чертенка чертили черными чернилами чертеж


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru