Добавление значений каждого символа chr(ord() в строку?

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 букв в алфавите («а» станет «f») алфавита, а затем программу, которая его расшифровывает. Однако мне также нужно написать программу, которая добавляет в текст значения кодового слова и печатает новую букву. Так, например, если кодовое слово было «gcses», а текст «привет», он напечатал бы o (7 + 8) h (3 + 5) e (19 + 12) q (5 + 12) h (19 + 15). )

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


person D.B    schedule 15.02.2016    source источник
comment
Вы можете добавить две функции ord(), но это будет довольно сложно, потому что ord('a') не равно 0, и поэтому вы не можете использовать % 26, не вычитая сначала ord('a'). Пример: (ord('b') + ord('f') - ord('a')) % 26 + ord('a') примерно то, через что нужно пройти одной букве.   -  person zondo    schedule 15.02.2016
comment
Ого, я и не думала, что это будет так сложно! Известны ли вам какие-либо другие методы, которые потенциально могут дать такие же результаты? Большое спасибо.   -  person D.B    schedule 15.02.2016
comment
Вы можете использовать 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) составляет ›= 26, это в верхнем регистре. В противном случае это нижний регистр.   -  person zondo    schedule 15.02.2016
comment
Спасибо, я ценю помощь.   -  person D.B    schedule 15.02.2016


Ответы (1)


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

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

Однако вам нужно будет обработать переполнение (% 26 будет работать)

person Kalkran    schedule 15.02.2016