Преобразовать код для понимания списка в python - PullRequest
0 голосов
/ 03 мая 2020

Шифр ​​- это секретный код для языка. В этом примере мы рассмотрим шифр, который, согласно сообщениям современных греческих историков, использовался Юлием Цезарем для отправки секретных сообщений генералам во время войны.

Шифр ​​Цезаря сдвигает каждую букву сообщения чтобы другая буква в алфавите находилась на фиксированном расстоянии от оригинальной буквы. Если бы наш ключ шифрования был 1, мы бы сместили h на следующую букву i, i на следующую букву j и так далее. Если мы достигаем конца алфавита, который для нас является символом пробела, мы просто возвращаем l oop к a. Чтобы декодировать сообщение, мы делаем аналогичный сдвиг, за исключением того, что мы перемещаем одинаковое количество шагов назад в алфавите.

Упражнения:

В пяти упражнениях этой домашней работы мы создадим собственный шифр Цезаря, а также декодер сообщений для этого шифра.

*** Шаг 1: мы определим алфавит, используемый в шифре. Пример кода импорта строки библиотеки был импортирован. Создайте строку с именем алфавит, состоящую из пробела (''), за которым следуют (соединенные) строчные буквы. Обратите внимание, что мы используем только строчные буквы в этом упражнении.

Шаг 2: мы определим словарь, который определяет индекс каждого символа в алфавите. Обратите внимание, что алфавит соответствует определению в упражнении 1. Создайте словарь с ключами, состоящими из символов алфавита и значений, состоящими из цифр от 0 до 26. Сохраните это как позиции.

Шаг 3: мы закодируем сообщение с шифром Цезаря. Обратите внимание, что алфавит и позиции соответствуют определенным в упражнениях 1 и 2. Используйте позиции для создания закодированного сообщения на основе сообщения, в котором каждый символ в сообщении был сдвинут вперед на 1 позицию, как это определено позициями. Обратите внимание, что вы можете убедиться, что результат остается в пределах 0-26, используя результат% 27. Сохраните его как encoded_message.

Что такое encoded_message? (Код, написанный в понимании списка) ***

У меня есть написаны коды для Step1 и Step2. Ниже приведен мой код для шага 3. Я хочу отредактировать «encoded_message» для получения списка понимания. Ниже приведен мой код:

message = "hi my name is caesar"
encoded_message = ''   
for c in message:
    for key, values in positions.items(): 
        if values == (positions[c] + 1) % 27:  
            encoded_message += key 
print(encoded_message)

Мой код работает нормально, как есть. Но мне нужно написать весь код в одну строку и отправить код encoded_message?

1 Ответ

1 голос
/ 03 мая 2020

Если вы просто хотите закодировать сообщение, попробуйте это. Это зашифрованный шифр, если вы хотите узнать другие методы, то дайте мне знать в комментариях.

def encrypt(text, s):
    result = ""

    # traverse text
    for i in range(len(text)):
        char = text[i]

        # Encrypt uppercase characters
        if (char.isupper()):
            result += chr((ord(char) + s - 65) % 26 + 65)

            # Encrypt lowercase characters
        else:
            result += chr((ord(char) + s - 97) % 26 + 97)

    return result


# check the above function
text = "CEASER CIPHER DEMO"
s = 4
print("Text  : " + text)
print("Shift : " + str(s))
print("Cipher: " + encrypt(text, s))
...