Module (54%)
Section (9%)

Шифр Цезаря: шифрование сообщения

Мы собираемся показать Вам четыре простые программы, чтобы представить аспекты обработки строк в Python. Они целенаправленно просты, лабораторные задачи будут значительно сложнее.

Первая задача, которую мы хотим показать Вам, называется Шифр Цезаря - подробнее здесь: https://en.wikipedia.org/wiki/Caesar_cipher.

Этот шифр был (вероятно) изобретен и использован Гаем Юлием Цезарем и его войсками во время Галльских войн. Идея довольно проста - каждая буква сообщения заменяется ближайшим последующим (A становится B, B становится C и т.д.) Единственное исключение - Z, которое становится A.

Программа в редакторе является очень простой (но работающей) реализацией алгоритма.

Мы написали ее, используя следующие предположения:

  • она принимает только латинские буквы (примечание: римляне не использовали ни пробелы, ни цифры);
  • все буквы сообщения находятся в верхнем регистре (примечание: римляне знали только заглавные буквы).

Давайте проследим код:

  • строка 02: попросим пользователя ввести не зашифрованное, однострочное сообщение;
  • строка 03: создадим строку для зашифрованного сообщения (пока пустую);
  • строка 04: начать замены в сообщении;
  • строка 05: если текущий символ не является алфавитным...
  • строка 06: ... проигнорировать его;
  • строка 07: преобразовать букву в верхний регистр (желательно делать это всегда, а не проверять, нужно это или нет);
  • строка 08: получить код буквы и увеличить его на единицу;
  • строка 09: если полученный код имеет "окончания" латинского алфавита (если он больше, чем код Z)...
  • строка 10: ... изменить его на код A;
  • строка 11: добавить полученный символ в конец зашифрованного сообщения;
  • строка 13: напечатайте зашифрованное сообщение.

Код, переданный с этим сообщением:

AVE CAESAR

Вывод:

BWFDBFTBS

output

Проведите собственное тестирование.



Code

# Caesar cipher.
text = input("Enter your message: ")
cipher = ''
for char in text:
if not char.isalpha():
continue
char = char.upper()
code = ord(char) + 1
if code > ord('Z'):
code = ord('A')
cipher += chr(code)

print(cipher)
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×