2016-02-15 3 views
0
codeword = input('Enter codeword : ') 
codeword = codeword.lower().replace(" ", "") 
for i in codeword: 
    old = (Chr(ord(i))) 

encrypt = input('Enter text to encrypt : ') 
encrypt = encrypt.lower().replace(" ", "") 
for i in encrypt: 
    new = (Chr(ord(i))) 

value = new + old 
for i in value: 
    print(Chr(ord(i))) 

Я делаю шифрование и дешифрование для моего GCSE вычислений, я уже сделал программу, которая успешно шифровки текст к значению 5 букв в алфавите («a» станет «f») алфавитом, а затем программой, которая расшифровывает его. Однако мне также нужно написать программу, которая добавляет значения кодового слова в текст и печатает новое письмо. , если кодовое слово было «gcses», а текст «hello», он будет печатать o (7 + 8) h (3 + 5) e (19 + 12) q (5 + 12) h (19 + 15)Добавление значений каждого Chr (Ord() символ в строке?

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

+0

Вы можете добавить две функции 'ord()', но вы были бы довольно сложны, потому что 'ord ('a')' не равно 0, и поэтому вы не могли использовать '% 26' без вычитания' ord (' a ') 'сначала. Пример: '(ord ('b') + ord ('f') - ord ('a'))% 26 + ord ('a')' - это то, что нужно пропустить одну букву. – zondo

+0

Ничего себе, я не понимал, что это будет так сложно! Знаете ли вы о каком-либо другом методе, который может дать одинаковые результаты? Большое спасибо. –

+0

Вы можете использовать 'string.lowercase' и' string.uppercase'. Например, 'string.lowercase [string.lowercase.index ('b) + string.lowercase.index (' f ')% 26]' получит те же результаты, что и приведенный выше пример. Вам нужно будет проверить, находятся ли ваши две буквы в 'string.lowercase' или' string.uppercase', но это о том, как я это сделал. Вы также можете использовать 'string.letters', который имеет строчные буквы и * заглавные буквы справа. Для этого, если 'string.letters.index (letter)' is> = 26, это верхний регистр. В противном случае это строчный. – zondo

ответ

0

Самый простой способ сделать это может быть, чтобы добавить поисковую строку, содержащую алфавит, чтобы найти письмо номера ...

alphabet = ' abcdefghijklmnopqrstuvwxyz' 
print alphabet.find('b') 
# prints '2' 
print alphabet[alphabet.find('g') + alphabet.find('h')] 
# prints 'o' as expected. 

Вам нужно будет обрабатывать переполнение, хотя (% 26 будет работать)