Решение модуля 15.5 из курса «Поколение Python: для начинающих»

Ответы и решения урока 15.5(Шифр Цезаря) на курс «Поколение Python: курс для начинающих».

Все задачи можно решить написав одну функцию, но я для каждого случая предоставил разные решения

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

нет

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

Примечание. Используется английский алфавит в котором 2626 букв.

ROT 13

Зашифруйте текст «Блажен, кто верует, тепло ему на свете!» алгоритмом Цезаря с сдвигом вправо на 1010 символов.

Примечание. Считайте, что русский алфавит состоит из 3232 букв (буква ё отсутствует).

Лхкрпч, фьш мпъэпь, ьпщхш пцэ чк ымпьп!

for i in input():
    if i.isalpha():
        print(chr((ord(i) + 10) % ord('я')), end='')
    else:
        print(i, end='')

Зашифруйте текст «To be, or not to be, that is the question!» алгоритмом Цезаря с сдвигом вправо на 1717 символов.

Kf sv, fi efk kf sv, kyrk zj kyv hlvjkzfe!

s = 'To be, or not to be, that is the question!'
new_s = ''
eng_lower_alphabet = 'abcdefghijklmnopqrstuvwxyz'
eng_upper_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for i in range(len(s)):
    if s[i].isupper():
        ind = eng_upper_alphabet.find(s[i])
        while not ind + 17 < len(eng_upper_alphabet):
            eng_upper_alphabet += eng_upper_alphabet
        new_s += eng_upper_alphabet[ind + 17]
    elif s[i].islower():
        ind = eng_lower_alphabet.find(s[i])
        while not ind + 17 < len(eng_lower_alphabet):
            eng_lower_alphabet += eng_lower_alphabet
        new_s += eng_lower_alphabet[ind + 17]
    else:
        new_s += s[i]
print(new_s)

Текст «Шсъцхр щмчжмщ йшм, нмтзж йшм лхшщзщг.» был получен в результате шифрования алгоритмом Цезаря с сдвигом вправо на 77 символов. Расшифруйте данный текст.

Примечание. Считайте, что русский алфавит состоит из 3232 букв (буква ё отсутствует).

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

s = 'Шсъцхр щмчжмщ йшм, нмтзж йшм лхшщзщг.'
m = ''
for i in s:
    if i.isalpha():
        m += chr(ord(i) - 7)
    else:
        m += i
    m = m.lower()
print(m.capitalize())

Текст «Sgd fqzrr hr zkvzxr fqddmdq nm sgd nsgdq rhcd ne sgd edmbd.» был получен в результате шифрования алгоритмом Цезаря со сдвигом вправо на 2525 символов. Расшифруйте данный текст.

The grass is always greener on the other side of the fence.

n, s = -25, 'Sgd fqzrr hr zkvzxr fqddmdq nm sgd nsgdq rhcd ne sgd edmbd.'
for i in s:
    if i.isalpha():
        c = ('a', 'A')[i.isupper()]
        print(chr(ord(c) + (ord(i) + n - ord(c)) % 26), end='')
    else:
        print(i, end='')

Текст «Hawnj pk swhg xabkna ukq nqj.» был получен в результате шифрования алгоритмом Цезаря с сдвигом вправо на nn символов. Расшифруйте данный текст.

Примечание. Считайте, что n \in [0; \, 25]n∈[0;25].

Learn to walk before you run.

s = 'Hawnj pk swhg xabkna ukq nqj.'
new_s = ''
eng_lower_alphabet = 'abcdefghijklmnopqrstuvwxyz' * 2
eng_upper_alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' * 2

for j in range(1, 26):
    for i in range(len(s)):
        if s[i].isupper():
            ind = eng_upper_alphabet.rfind(s[i])
            new_s += eng_upper_alphabet[ind - j]
        elif s[i].islower():
            ind = eng_lower_alphabet.rfind(s[i])
            new_s += eng_lower_alphabet[ind - j]
        else:
            new_s += s[i]
        
    print(new_s)
    new_s = ''

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

n = input()
# ищем длину слов переводим в словарь в виде чисел
s = n
for j in n:
    if j in '*,.!@"-':
        s = s.replace(j, '')
g = [len(i) for i in s.split()]

# объявляем переменную счетчик, когда попадается пробел переходим на след ячейку в словаре
count = 0
word_new = ''
for d in n:
    number = ord(d)
    if d == ' ':
        count += 1
        word_new += chr(number)
    elif 65 <= number <= 90:
        number += g[count]
        if number > 90:
            number = number - 26
            word_new += chr(number)
        else:
            word_new += chr(number)
    elif 97 <= number <= 122:
        number += g[count]
        if number > 122:
            number = number - 26
            word_new += chr(number)
        else:
            word_new += chr(number)
    else:
        word_new += chr(number)
    
print(word_new)
Понравилась статья? Поделиться с друзьями:
Подписаться
Уведомить о
guest

1 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
юрий
юрий
3 месяцев назад

не работает этот код алгоритм цезаря не верный

1
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x