You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

凯撒密码Python代码对字母'z'加密异常的问题排查

凯撒密码Python代码对字母'z'加密异常的问题排查

嘿,我来帮你揪出这段代码的问题所在~

首先看你处理字母表范围溢出的逻辑,这里完全走偏啦!当new_index > 25的时候,你写了一个循环把new_index从0一直赋值到25,循环结束后new_index会固定变成25(也就是回到字母'z'),这就是为什么输入'z'时加密后还是'z',而不是你期望的'e'。

举个具体例子:假设你输入'z'(对应索引25),shift设为5,那index + shift等于30,本来应该绕回字母表开头得到30-26=4(对应字母'e'),但你的循环最后把new_index硬改成了25,结果自然还是'z',这就导致整个加密结果出错。

那怎么修复呢?其实不用复杂的循环,用取模运算就能完美解决范围溢出的问题,它会自动帮你把超出0-25的数值绕回字母表范围内:

把计算new_index的代码改成:

new_index = (index + shift) % 26

另外,还有个小细节要注意:如果输入的文本里包含非字母字符(比如空格、标点),alphabet.index(char)会直接报错,因为这些字符不在你的字母列表里。如果要兼容这种情况,可以加个判断逻辑,把非字母字符直接保留下来:

修改后的完整代码如下:

alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
text = input("Type your message:\n").lower()
shift = int(input("Type the shift number:\n"))

def encrypt(text, shift):
    cipher_text = ""
    for char in text:
        if char in alphabet:
            index = alphabet.index(char)
            new_index = (index + shift) % 26
            cipher_text += alphabet[new_index]
        else:
            # 非字母字符直接保留
            cipher_text += char
    print(cipher_text)
        
encrypt(text, shift)

现在测试输入'zulu'、shift设为5,就能得到你期望的'ezqz'啦!

备注:内容来源于stack exchange,提问作者Haha Lol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:49:31