# Текст, который пользователь хочет ввести
text = input("Введите текст, который хоитие зашифровавать: ")
# Пользователь вводит ключ
k = int(input("Укажите ключ: "))
# Пользователь вводит язык текста, который будет зашифрован
language = input("На каком языке текст, который вы ввели (русский, английский): ")
# Функция шифрования с тремя параметрами: текст, ключ, язык
def ceaser_cipher(user, key, lang):
# Переменная результата шифрования; переменная, опредиляющая верхний и нижний регистр
res, n = [], ""
# Проверка пользователем выбранного языка
# Проверка выбран ли русский язык (регистр букв, вводимых пользователем, не важен)
if lang.lower() == "русский" or lang.lower() == "russian":
# Двум переменным присваиваются русская азбука нижнего и верхнего регистра соответственно
dictionary, dictionary_upper = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя", "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
# Проверка выбран ли английский язык язык (регистр букв, вводимых пользователем, не важен)
elif lang.lower() == "английский" or lang.lower() == "english":
# Двум переменным присваиваются английской азбука нижнего и верхнего регистра соответственно
dictionary, dictionary_upper = "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
else:
return "Такого языка нет в опции"
# Цикл проверки, где каждую итерацию будет обрабатываться один символ из текста последовательно
for i in range(len(user)):
# Проверка символа на верхний или нижний регистр
# Принадлежит ли символ нижнему регистру
if user[i] in dictionary:
n = dictionary
# Принадлежит ли символ верхнему регистру
elif user[i] in dictionary_upper:
n = dictionary_upper
# Символ не принадлежит ни нижнему ни верхнему регистру (символ не является буквой)
else:
res.append(user[i])
# Если символ есть в списке n (является буквой), то будет происходить его зашифровка
if user[i] in n:
# Цикл перебора азбуки
for j in range(len(n)):
# Если порядковый номер буквы + ключ находятся в диапазоне от 0 до конца азбуки
# и если буква из текста совпадает с буквой из азбуки, то:
if 0 <= j + key < len(n) and user[i] == n[j]:
# В результат добавляется буква со сдвигом key (зашифрованная буква)
res.append(n[j + key])
# Если порядковый номер буквы + ключ выходит из диапазона азбуки, превышая его
# и если буква из текста совпадает с буквой из азбуки, то:
elif j + key >= len(n) and user[i] == n[j]:
# В результат добавляеться буква со сдвигом key,
# при этом преводя порядковый номер буквы к диапазону азбуки (зашифрованая буква)
res.append(n[(1 - j - key) % (len(n) - 1)])
# Если порядковый номер буквы + ключ выходит из диапазона азбуки, недотягивает до него
# и если буква из текста совпадает с буквой из азбуки, то:
elif j + key < 0 and user[i] == n[j]:
# В результат добавляеться буква со сдвигом key,
# при этом преводя порядковый номер буквы к диапазону азбуки (зашифрованая буква)
res.append(n[(j + key) % len(n)])
# Функция возвращает зашифрованный текст
return ''.join(res)
# Вывод зашифрованного текста
print(ceaser_cipher(text, k, language))