2017-01-24 2 views
0

Я пытался создать программу, которая будет шифровать сообщение в соответствии с ключом или номером, который будет давать пользователь. Так, например, буква C с ключом из 2 изменилась бы на букву E. Я думал использовать либо сохраненный словарь, либо порядковые значения для этого, хотя я не уверен, как ограничить его до 26 букв. Например, мой код прямо сейчас будет выглядеть следующим образом:Простое шифрование Python

word = input("Please enter a word") 
numkey = input("Please enter a key") 

for ind in word: 
    encrypt = ord(ind) + int(numkey) 
    actual_encrypt = chr(encrypt) 

Проблема с этим кодом является то, что я хочу, чтобы ограничить значение шифровать 26 и иметь его начать снова, как только он достигает там. Так, вместо 27, например, это будет 1 снова. Я просто немного запутался в том, как это сделать. Спасибо.

+0

Простой способ 'если зашифровать> = TooBig: encrypt - = toobig' –

+0

Но что, если бы ключ был безумно большим, например, 100, и, скажем, письмо было C, которое имело бы порядковый номер 3. Это было бы 103, и из него было бы вычитано 26, но оно все равно вернет неправильное письмо. – JazzHandz

ответ

0

Требуется модуль, %. Например, 27 % 26 дает 1.

+0

О, ладно. Я думаю, что это имеет смысл. Спасибо. – JazzHandz

0

Если я правильно понимаю ваш вопрос, общим способом решения этой проблемы является использование оператора modulo «%». Этот оператор возвращает оставшуюся часть целочисленного деления между операндами.

Это может выглядеть следующим образом:

encrypt = ((ord(ind) + int(numkey)) % 27) + 1 

Если результат ord(ind) + int(numkey) 27, % 27 приводит к 0 (следовательно, дополнительные смещения 1).

+0

Это имеет смысл. Спасибо. – JazzHandz

2

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

encrypt = ord(ind) + int(numkey) 

с:

encrypt = ord('a') + (ord(ind) - ord('a') + int(numkey)) % 26 
Смежные вопросы