Как преобразовать соответствующую последовательность символов из словаря в читаемую строку? - PullRequest
0 голосов
/ 29 мая 2020

Моя проблема гласит:

Напишите функцию, называемую декомпрессией, которая принимает в качестве входных данных строку и словарь. Словарь сопоставляет строки специальных символов с последовательностями символов. Функция просматривает строку аргументов и, если символ находится в словаре, преобразует его в соответствующую последовательность символов. Ваше решение может использовать итерацию, но оно ДОЛЖНО быть рекурсивным (оно должно вызывать само себя). Обратите внимание, что специальный символ может отображаться на последовательность символов, в которой ТАКЖЕ есть специальный символ. Например, в первом тесте ниже таблица символов отображает «$» в строку « y», а «» - в «c». Подсказка: вы можете рассматривать полученную последовательность как другую строку для распаковки с той же таблицей символов.

Вот код, который у меня есть. Я не знаю, как взять значения из последовательности символов и преобразовать их в читаемую строку. Мой код также вызывает ошибку позиционного аргумента.

def decompress(a_str, a_dict):

    new_string = ""

    for char in a_str:

        if char in a_dict:
            new_string.join(char)
        else: 
            sub_problem = decompress(char, a_dict)
            new_string.join(sub_problem)

    return new_string

Вот несколько примеров вывода:

    Examples:
    >>> d_simple = {'*':'c','#':'00','$':'*y'}
    >>> decompress('$3#',d_simple) #Test One
    'cy300'
    >>> d = {'#':'hem','@':'T#','$':'t#','&':'$ as','*':' do ','%':' to'}
    >>> d.update({'^':' someone ', '~':'for ', '+':'~&'})
    >>> decompress("@ as can*has%*+ can't. And^has% speak up + has no voices."  ,d) #Test Two
    "Them as can do has to do for them as can't. And someone has to speak up for them as has no voices."

1 Ответ

1 голос
/ 29 мая 2020

Ваш код очень близок, я думаю, вам просто не хватает поиска новых / заменяющих символов в a_dict перед повторным вызовом функции.

Я думаю, что это правильное решение?

def decompress(string, table):
    new_string = ''
    for char in string:
        new_char = table.get(char, char)
        if new_char == char:
            new_string += char
        else:
            new_string += decompress(new_char, table)
    return new_string
d_simple = {'*': 'c', '#': '00', '$': '*y'}
print(decompress('$3#', d_simple))  # Test One
# 'cy300'
d = {'#': 'hem', '@': 'T#', '$': 't#', '&': '$ as', '*': ' do ', '%': ' to'}
d.update({'^': ' someone ', '~': 'for ', '+': '~&'})
print(decompress("@ as can*has%*+ can't. And^has% speak up + has no voices.", d))  # Test Two
# "Them as can do has to do for them as can't. And someone has to speak up for them as has no voices."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...