не могу понять как заставить алгоритм, заменять букву каждый раз на следующую из котрежа
Вася любит секреты и шифрование. Он часто пользуется шифром на основе замен и просит разработать вас функцию, которая позволит ему быстро шифровать сообщения.
Напишите функцию 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
не могу понять как заставить алгоритм, заменять букву каждый раз на следующую из котрежа. Могу только на первую или вторую в кортеже. Но в ответе примера видно, что буква заменяется, каждый раз на следующий знак из кортежа.
Ответы (1 шт):
Как вариант - создаете вспомогательный словарь из буквы и индекса в кортеже. При замене буквы - инкрементируете индекс. Если индекс равен дошел до конца кортежа - обнуляете его. Таким образом вы будете бесконечно итерироваться по кортежу замен для каждой буквы.
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)