Реализация сдвига букв на определенное количество в лево на python3
Есть шифрователь который каждую букву в слове сдигает на случайное чиcло в право,числа записываются в ключ. Нужно расшифровывать это же сообщение с помошью ключа,сдвигать символы в строке в лево. Думал что получу это посредством изменения числа на отрицацельное(не получилось).Код ниже
key = []
new_msg = []
alphabet = ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
ind = 0
while True:
rannd = random.randint(0, 52)
key.append(rannd)
letter = msg[ind]
alphabet.index(letter)
letter = alphabet[(alphabet.index('Z') + rannd) % len(alphabet)]
new_msg.append(letter)
ind += 1
if ind >= len(list(msg)):
break
print("Зашифрованное сообщение:")
print(new_msg)
print('Коюч:')
print(key) ```
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Использование отрицательного значения сдвига работает
Пример:
import random
from typing import Tuple, List
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
def shift_letter(letter: str, number: int) -> str:
new_index = (alphabet.index(letter) + number) % len(alphabet)
return alphabet[new_index]
def encrypt(text: str) -> Tuple[str, List[int]]:
key = []
new_msg = []
for c in text:
rand_index = random.randint(0, len(alphabet))
new_msg.append(shift_letter(c, rand_index))
key.append(rand_index)
return ''.join(new_msg), key
def decrypt(text: str, key: List[int]) -> str:
return ''.join(
shift_letter(c, -shift)
for c, shift in zip(text, key)
)
Проверяем работу:
msg = 'HelloWorld'
encrypt_msg, key = encrypt(msg)
print(encrypt_msg, key)
# spKkXFUokt [37, 11, 25, 51, 35, 35, 32, 49, 51, 16]
print(decrypt(encrypt_msg, key))
# HelloWorld