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
相关产品推荐
相关产品推荐

