密码/解密Python入门计划

时间:2019-01-26 20:44:52

标签: python encryption caesar-cipher

问题:有人可以编辑我的两行代码吗?

只是想指出这是给学校分配的,所以我不想发布我的所有代码以防止复制/抄袭问题。由于我只对分配的少量需求有困难,所以我认为我的所有代码都不是必需的。

我指的是assgn的要求

  

Newx = ord(x)+3
  Newx将是一个整数。要找出整数代表的字母,可以使用chr函数,如下所示:   实际字母= 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 :(得分:2)

您不应执行任何模97运算。仅当您具有97个字符的字母时,才执行模97运算。

正确的方法是:

  1. 确定字符是否为字母;
  2. 将字母转换为介于0到字母大小之间的数字(常见的ABC当然是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而进行了加密)当然在if语句的3行中。当然可以将它们组合在一起-如果需要的话,可以将它们组合成一行-但这更简洁。

答案 1 :(得分:1)

我认为模97的位置错误。您应该先执行ord(i)%97-3,然后它才能正常工作。

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

您可以做的另一件事是从z中减去a,然后像这样进行减法:

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