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

Python凯撒密码解密:如何处理文本中的空格保留问题?

解决凯撒密码解密中的空格处理问题

嘿,作为Python新手能写出凯撒密码的核心逻辑已经很棒啦!咱们来看看空格变成"j"的问题出在哪:

你的代码里,在处理no_punct的时候,空格会被当成普通字符丢进循环。但alphabet.find(' ')会返回-1,接下来(-1 + 10) % 26 = 9,对应alphabet[9]就是"j"——这就是空格变成j的原因!

其实咱们不用提前去掉标点,直接在解密循环里判断字符类型就行,这样还能保留原字符串里的标点符号,更符合解密需求。修改后的代码如下:

code = "xuo jxuhu! jxyi yi qd unqcfbu ev q squiqh syfxuh. muhu oek qrbu je tusetu yj? y xefu ie! iudt cu q cuiiqwu rqsa myjx jxu iqcu evviuj!"
alphabet = "abcdefghijklmnopqrstuvwxyz"
punctuations = '''!()-[]{};:'"\,<>.?@#$%^&*_~'''

code_cracked = ""
for char in code:
    # 遇到空格或标点,直接保留原字符
    if char == ' ' or char in punctuations:
        code_cracked += char
    else:
        # 只对字母进行凯撒偏移处理
        original_index = alphabet.find(char)
        new_index = (original_index + 10) % 26
        code_cracked += alphabet[new_index]

print(code_cracked)

代码说明:

  • 遍历原字符串的每个字符,先判断是不是空格或者标点:如果是,直接添加到结果里,不做偏移。
  • 只有当字符是字母时,才计算它在字母表中的索引,加上偏移量10后取模26,得到解密后的字母。

运行这段代码后,你会得到正确的解密结果:

hey there! this is an example of a caesar cipher. were you able to decode it? i hope so! send me a message back with the same offset!

这样既保留了原有的空格和标点,又完美完成了解密~

内容的提问来源于stack exchange,提问作者Gojilla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:47:53