2017-01-24 160 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:加密 - = toobig' –

+0

但是如果密钥像100这样疯狂地大,假设该字母是C将会有序的3.这将是103,它会从中减去26,但它仍然会返回错误信。 – JazzHandz

回答

0

你想要模数运算,%。例如,27 % 26给出1

+0

哦,好的。我认为这是有道理的。谢谢。 – JazzHandz

0

如果我正确理解您的问题,解决此问题的常用方法是使用模运算符“%”。该运算符返回操作数之间的整数除法的其余部分。

它可能看起来像这样:

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

如果ord(ind) + int(numkey)结果为27,% 27结果在0(因此附加的1偏移量)。

+0

这很有道理。谢谢。 – JazzHandz

2

如果我理解正确的话仅包含字符:AZ 如果是这样,你可以更换行:

encrypt = ord(ind) + int(numkey) 

有:

encrypt = ord('a') + (ord(ind) - ord('a') + int(numkey)) % 26