如何让凯撒密码忽略空格标点、保留大小写?现有代码处理空格报错
凯撒密码代码修复方案
你当前的代码存在几个核心问题,修复后即可满足忽略空格标点、保留大小写的需求:
- 密钥类型错误:你将输入的key转为了字符串类型,无法和ASCII码值做数值相加运算,这是即便没有空格也会触发报错的核心原因
- 缺少字符类型判断逻辑:所有字符统一执行偏移计算,没有区分大小写的ASCII范围,也没有对非字母的空格、标点等字符做保留处理
- 边界判断不完整:仅覆盖了偏移后超出小写
z的场景,没有处理大写字母超出Z、偏移量为负时小于a/A的异常情况
修复后的完整代码
# 读取原文件内容 with open("file_test", "r", encoding="utf-8") as f: message = f.read() print(message) # 密钥改为整数类型 key = int(input("Enter any key\n")) code = "" for ch in message: # 判断是小写字母 if ch.islower(): ord_value = ord(ch) cipher_value = ord_value + key # 处理小写字母边界 if cipher_value > ord('z'): cipher_value -= 26 elif cipher_value < ord('a'): cipher_value += 26 code += chr(cipher_value) # 判断是大写字母 elif ch.isupper(): ord_value = ord(ch) cipher_value = ord_value + key # 处理大写字母边界 if cipher_value > ord('Z'): cipher_value -= 26 elif cipher_value < ord('A'): cipher_value += 26 code += chr(cipher_value) # 非字母字符直接保留,不加密 else: code += ch print(code) # 写入加密后的文件 with open("encrypted", "w", encoding="utf-8") as new_file: new_file.write(code)
核心修改说明
- 替换了原有的文件打开方式为
with语法,自动处理文件关闭,避免资源泄漏 - 将输入的密钥转为int类型,支持正反向偏移计算
- 新增大小写字母判断逻辑,分别适配a-z、A-Z的ASCII范围做边界处理
- 非字母的空格、标点、数字等字符直接追加到加密结果中,完全保留原有格式
- 修复了初始
code变量自带空格的问题,避免加密结果开头多一个冗余空格
内容的提问来源于stack exchange,提问作者Juan Sabogal
相关产品推荐
相关产品推荐

