为什么我的凯撒密码在python中被关闭了1个字符?

2024-10-02 22:36:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python编码新手,尝试了一项挑战,但我遇到了困难,需要一些帮助。我几乎所有的代码都是正确的,除了一小段我似乎无法理解的代码。我的挑战是获取用户输入的一行文本,并使用凯撒密码对其进行加密。我的代码就是把“Hello world”之类的东西改成“Lipps$asvph”,但它应该说的是“Lipps${svph%”。现在我不明白为什么“{”变成了“a”,但我想问问是否有人能看到问题所在

distance = int(input("Enter the distance value: "))
code = ""
for ch in message:
    ordvalue = ord(ch)
    cipherValue = ordvalue + distance
    if cipherValue > ord('z'):
        cipherValue = ord('a') + distance - \
                      (ord('z') - ordvalue + 1)
    code += chr(cipherValue)
print(code)

Tags: 代码用户文本密码hello编码worldcode
1条回答
网友
1楼 · 发布于 2024-10-02 22:36:52

这里的逻辑是:

  • distance移位字符
  • 如果结果在z以上,则将其环绕(因此,z移位1变成a)

问题:像{这样的特殊字符超出了a..z范围,但它们也被移位了。由于该检查仅适用于z以上的值,“a”下的值不受影响(例如“%”)

修复:检查值是否超出可读符号范围(32..255),而不是a..z

max_value = 255  # used to be ord('z')
min_value = 32   # used to be ord('a')
for ch in message:
    ordvalue = ord(ch)
    cipherValue = ordvalue + distance
    if cipherValue > max_value:
        cipherValue = min_value + distance - \
                      (max_value - ordvalue + 1)
    code += chr(cipherValue)

相关问题 更多 >