Программа Cipher / Decipher Python для начинающих - PullRequest
0 голосов
/ 26 января 2019

Вопрос: Может ли кто-нибудь отредактировать мои 2 строки кода?

Просто хотел отметить, что это для школьного задания, поэтому я не хочу публиковать весь свой код для предотвращения проблем с копированием / плагиатом. Поскольку у меня возникают трудности только с небольшим требованием к назначению, я не думаю, что весь мой код необходим в любом случае.

Требование от ассгн. Я имею в виду:

Newx = Ord (х) + 3
Newx будет целым числом. Чтобы узнать, какую букву представляет это целое число, вы можете использовать функцию chr как в: actualLetter = chr (x) Напишите функцию с именем cipher, которая принимает строку и ключ (целое число). Функция шифрует строку в другая строка и возвращает новую строку. Обратите внимание, что когда мы достигаем 'z' и хотим добавить ключ, мы должны «сверните» в алфавит еще раз, следовательно, ord ('z') + 3 должно дать нам ord ('c').

Когда я запускаю и тестирую свою программу и вводлю 'z', я не получаю 'c', я получаю: screenshot of running program

Мой код для этой части программы, которая приводит к этой проблеме:

example_string = letters[((ord(i)+key)%97)%26]
example2_string += letters[((ord(i)-key)%97)%26]

(example_string и example2_string являются поддельными именами)

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Вы не должны выполнять что-либо по модулю 97. Выполняйте по модулю 97, только если у вас есть алфавит из 97 символов.

Правильный способ сделать это:

  1. определить,символ представляет собой букву;
  2. преобразует букву в число от 0 до размера алфавита (общий алфавит, конечно же, имеет размер 26 символов);
  3. добавляет или вычитает ключзначение, по модулю размер алфавита (для операций такого рода вы можете просто сначала добавить / вычесть, а затем выполнить модуль);
  4. снова преобразовать полученное число в букву, это ваш зашифрованный текст.

Таким образом, вы получите:

alphabetSize = ord('z') - ord('a') + 1

k = 3
c = 'z'

if (ord(c) >= ord('a')) | (ord(c) <= ord('z')):
    n = ord(c) - ord('a')
    n = (n + k) % alphabetSize
    ctc = chr(n + ord('a'))
else:
    ctc = c

print ctc

магия (в данном случае шифрование из-за использования + перед ключом k), конечно, в 3 строках внутриif заявление.Конечно, их можно объединить - если нужно, в одну строку - но это более аккуратно.

0 голосов
/ 27 января 2019

Я думаю, что модуль 97 находится в неправильном положении. Вы должны выполнить ord (i)% 97-3, тогда это сработает.

chr(ord('a')+(ord('z')%97-3)%26)
example_string = letters[((ord(i)%97+key)%26]

Еще одна вещь, которую вы могли бы сделать, это вычесть a из z, а затем выполнить вычитание следующим образом:

chr(ord('a')+(ord('z')-ord('a')-3)%26)
...