не могу понять как заставить алгоритм, заменять букву каждый раз на следующую из котрежа

Рейтинг: 0Ответов: 1Опубликовано: 09.02.2023

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

Напишите функцию secret_replace, которая принимает:

текст требующий шифрования; именованные аргументы — правила замен, представляющие собой кортежи из одного или нескольких значений. Функция должна вернуть зашифрованный текст.

Ввод

result = secret_replace("Hello, world!", l=("hi", "y"), o=("123", "z"))

Вывод

result = 'Hehiy123, wzrhid!'

Моя фунция

def secret_replace(text, **kwargs):
    new_text = ''
    for letter in text:
        if letter in kwargs.keys():
            new_text += kwargs[letter][0]
        else:
            new_text += letter
    return new_text

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

Ответы

▲ 0

Как вариант - создаете вспомогательный словарь из буквы и индекса в кортеже. При замене буквы - инкрементируете индекс. Если индекс равен дошел до конца кортежа - обнуляете его. Таким образом вы будете бесконечно итерироваться по кортежу замен для каждой буквы.

def secret_replace(text, **kwargs):
    new_text = ''
    it = {}  # пустой словарь
    for letter in kwargs.keys():
        it[letter] = 0  # для каждой буквы заводим текущий индекс по кортежу
    for letter in text:
        if letter in kwargs.keys():
            new_text += kwargs[letter][it[letter]] # заменяем на ту замену, на которую указывает индекс
            it[letter] += 1 # увеличиваем индекс
            if it[letter] == len(kwargs[letter]):
                it[letter] = 0 # если индекс дошел до конца кортежа - обнуляем
        else:
            new_text += letter
    return new_text

result = secret_replace("Hello, world!", l=("hi", "y"), o=("123", "z"))
print (result)