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