Программа для шифрования и дешифрования текста. Текст шифруется так: каждая буква заменяется на ту, что размещена от нее на две позиции влево

Напишите программу для шифрования и дешифрования текста. Текст шифруется так: каждая буква заменяется на ту, что размещена от нее на две позиции влево. Вторая буква в алфавите заменяется на последнюю. Первая буква в алфавите заменяется на предпоследнюю. Код должен работать и кириллицей, и с латиницей. PS: я начинающий программист на python

Вот мой код. Все работает, но когда ввожу первые две буквы английского алфавита выходит знаки препинания, а вместо этого должны выходить две последние буквы.

n = -2
message = input()
for i in message:
    if not i.isalpha():
        print(i, end='')
        continue
    if ord(i) + n > 1071 and ord(i) <= 1071 or ord(i) + n > 1103 and ord(i) <= 1103:
        i = chr(ord(i) - 32)
    i = chr(ord(i) + n)
    print(i, end='')

Ответы (1 шт):

Автор решения: Zhihar

что мешает решить задачу прямо в лоб?

letters = {'a': 'y', 'b': 'z', 'c': 'a', 'd': 'b', 'e': 'c', 'f': 'd', 'g': 'e', 'h': 'f', 'i': 'g', 'j': 'h',
           'k': 'i', 'l': 'j', 'm': 'k', 'n': 'l', 'o': 'm', 'p': 'n', 'q': 'o', 'r': 'p', 's': 'q', 't': 'r',
           'u': 's', 'v': 't', 'w': 'u', 'x': 'v', 'y': 'w', 'z': 'x',}

text = 'big test'

text_new = ''.join(letters[letter] if letter in letters else letter for letter in text)

print(text)
print(text_new)

я словарь заполнил только латинскими строчными, так что его надо дополнить латинскими прописными и русскими и теми и другими :)

Ну и словарь можно сформировать автоматически:

letters_eng = 'abcdefghijklmnopqrstuvwxyz'
letters_rus = 'абвгдеёжзийклмнопрстуфхцчшщьыъэюя'

letters = dict()

for pos in range(len(letters_eng)):
    letters[letters_eng[pos]] = letters_eng[pos - 2]
    letters[letters_eng[pos].upper()] = letters_eng[pos - 2].upper()

for pos in range(len(letters_rus)):
    letters[letters_rus[pos]] = letters_rus[pos - 2]
    letters[letters_rus[pos].upper()] = letters_rus[pos - 2].upper()

text = 'Big Проверка'

text_new = ''.join(letters[letter] if letter in letters else letter for letter in text)

print(text)
print(text_new)

P.S.

для формирования словаря код можно чуть чуть короче сделать:

for obj in enumerate(letters_eng):
    letters[obj[1]] = letters_eng[obj[0] - 2]
    letters[obj[1].upper()] = letters[obj[1]].upper()

for obj in enumerate(letters_rus):
    letters[obj[1]] = letters_rus[obj[0] - 2]
    letters[obj[1].upper()] = letters[obj[1]].upper()
→ Ссылка