【问题标题】:Cipher/Decipher Python Beginner Program密码/解密 Python 初学者程序
【发布时间】:2019-01-27 13:31:47
【问题描述】:

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

只是想指出这是为了学校作业,所以我不想发布我的所有代码以防止复制/抄袭问题。由于我只是在分配的小要求上遇到困难,所以我认为无论如何我的所有代码都不是必需的。

我所指的 assgn 的要求:

Newx=ord(x)+3
Newx 将是一个整数。要找出整数代表的字母,您可以使用 chr 函数,如下所示: 实际字母 = chr(x) 编写一个名为 cipher 的函数,它接受一个字符串和一个密钥(整数)。该函数将字符串加密为 另一个字符串并返回新字符串。请注意,当我们到达“z”,并且我们想要添加密钥时,我们必须 'roll' 再次进入字母表,因此 ord('z')+3 应该给我们 ord('c')。

当我运行并测试我的程序并输入“z”时,我没有得到“c”,我得到:

导致此问题的这部分程序的代码是:

example_string = letters[((ord(i)+key)%97)%26]
example2_string += letters[((ord(i)-key)%97)%26]

(example_string 和 example2_string 是假名)

【问题讨论】:

  • 我看到你已经有一段时间没有接受答案了,即使给出了很好的答案。请尝试提供反馈、投票和接受答案;这是表达感谢的最佳方式。

标签: python encryption caesar-cipher


【解决方案1】:

您不应该执行任何模 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 行中。当然,这些可以组合在一起——如果需要的话,可以组合成一行——但这更简洁。

【讨论】:

    【解决方案2】:

    我认为模 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)
    

    【讨论】:

      猜你喜欢
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多