Цикличное повторение ключа в шифре Виженера
Решил написать аналог шифра Виженера и поместить все это в функцию. Для начала следует растянуть ключ до длины шифруемого текста, чтобы он повторялся циклично:
Человек, посылающий сообщение, записывает ключевое слово («LEMON») циклически до тех пор, пока его длина не будет соответствовать длине исходного текста:
LEMONLEMONLE (текст - ATTACKATDAWN)
Соответственно, написал вот это:
# key_word = 'LEMON'
# message = 'ATTACKATDAWN'
key_word_large = ''
x = 0
while x < len(message):
key_word_large += key_word[x % len(key_word)]
x += 1
Как итог получилось довольно громоздко, я думал над тем как это все уместить покомпактнее, например в генератор списка, однако остановился на этом. Собственно вопрос состоит в том, как можно укоротить этот участок кода (без импорта модулей)
Кому надо, вот ссылка - https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80_%D0%92%D0%B8%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D0%B0
Ответы (1 шт):
Не совсем понял, что делать если message по длине окажется меньше, чем key_word, поэтому код работает из следующего предположения:
Если, например, key_word = "LEMON", а message = "LOL", то key_word_large = "LEM"
Сам код:
key_word = 'LEMON'
message = 'ATTACKATDAWN'
p = len(message) // len(key_word)
q = len(message) % len(key_word)
key_word_large = key_word * p + key_word[:q]
Результат:
LEMONLEMONLE