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

如何让凯撒密码忽略空格标点、保留大小写?现有代码处理空格报错

凯撒密码代码修复方案

你当前的代码存在几个核心问题,修复后即可满足忽略空格标点、保留大小写的需求:

  • 密钥类型错误:你将输入的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:39:03