Шифр Цезаря

 Шифр Цезаря (шифр сдвига)

 Как вы думаете, улучшает ли многократное шифрование стойкость алгоритма Цезаря?

 Ответ:  нет

 Какой из алгоритмов ROT N можно отменить, применив тот же алгоритм? (Одни и те же действия могут быть использованы для кодирования и декодирования).

 Ответ:  ROT 13

 Зашифруйте приведённый ниже текст алгоритмом Цезаря со сдвигом вправо на 10 символов:

Блажен, кто верует, тепло ему на свете!
a = 'Блажен, кто верует, тепло ему на свете!'
s = []
for i in range(len(a)):
    if 1040 <= ord(a[i]) <= 1103:
        b = chr(ord(a[i]) + 10)
        s.append(b)
    else:
        s.append(a[i])
print(''.join(s))

 Ответ: Лхкрпч, фьш мпъэпь, ьпщхш пцэ чк ымпьп!

 Зашифруйте приведённый ниже текст алгоритмом Цезаря со сдвигом вправо на 17 символов:

To be, or not to be, that is the question!

 Ответ:  Kf sv, fi efk kf sv, kyrk zj kyv hlvjkzfe!

 Приведённый ниже текст был получен в результате шифрования алгоритмом Цезаря со сдвигом вправо на 7 символов:

Шсъцхр щмчжмщ йшм, нмтзж йшм лхшщзщг.

 Расшифруйте данный текст.

 Ответ: Скупой теряет все, желая все достать.

 Приведённый ниже текст был получен в результате шифрования алгоритмом Цезаря со сдвигом вправо на 25 символов:

Sgd fqzrr hr zkvzxr fqddmdq nm sgd nsgdq rhcd ne sgd edmbd.

 Расшифруйте данный текст. 

 Ответ: The grass is always greener on the other side of the fence.

 Приведённый ниже текст был получен в результате шифрования алгоритмом Цезаря со сдвигом вправо на n символов:

Hawnj pk swhg xabkna ukq nqj.

 Расшифруйте данный текст.

 Ответ:  Learn to walk before you run.

 На вход программе подается строка текста на английском языке, в которой нужно зашифровать все слова. Каждое слово строки следует зашифровать с помощью шифра Цезаря (циклического сдвига на длину этого слова). Строчные буквы при этом остаются строчными, а прописные – прописными. Гарантируется, что между различными словами присутствует один пробел.

alphabet = 'abcdefghijklmnopqrstuvwxyz'

s_old = input()

words = s_old.split() 

s_new = ""
for word in words:
    shift = sum([int(letter.lower() in alphabet) for letter in word])  

    for letter in word:
        if letter in alphabet:  
            old_letter_position = alphabet.index(letter)
            letter = alphabet[(old_letter_position + shift) % 26]

        elif letter.lower() in alphabet:  
            old_letter_position = alphabet.index(letter.lower())
            letter = alphabet[(old_letter_position + shift) % 26].upper()

        s_new += letter

    s_new += " "

print(s_new)