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

Python实现Caesar Cipher时多词输入空格丢失问题求解

问题原因

现有代码的字符处理逻辑存在分支遗漏:

  • 遍历输入字符串的每个字符时,仅覆盖了英文字母的处理场景:对字母做移位转换后才追加到密文变量
  • 空格不属于英文字母,会被if ch.isalpha()判断直接跳过,完全不会写入密文结果,最终输出自然丢失所有空格
    额外说明:原代码还存在未适配大写字母、未处理移位值为负/移位值超过26时ASCII码越界的隐患
修正方案

调整字符处理分支逻辑:非英文字母的字符(包含空格、标点、数字等)不需要做凯撒移位,直接追加到密文结果中即可;同时补全字母大小写适配、移位值取模、双向越界处理逻辑,覆盖更多使用场景。

修正后可直接运行的完整代码如下:

user_input = input("Enter the secret message: ")
shift = int(input("How much do you want to shift?"))

def caesar(user_input, shift): 
    cipherText = ""
    # 移位值对26取模,兼容大于26、负数的移位输入
    shift = shift % 26
    for ch in user_input:
        if ch.isalpha():
            # 按字符大小写匹配字母表基准ASCII值
            alpha_base = ord('A') if ch.isupper() else ord('a')
            # 计算移位后位置,自动处理字母表循环
            shifted_pos = (ord(ch) - alpha_base + shift) % 26 + alpha_base
            cipherText += chr(shifted_pos)
        else:
            # 非字母字符直接保留,不做转换
            cipherText += ch
    print("Your ciphertext is: ", cipherText)
    return cipherText

caesar(user_input, shift)

效果验证

  • 输入hello world、移位值设为3时,输出密文为khoor zruog,完整保留原输入的空格位置
  • 支持大写字母转换、任意整数移位值输入,不会出现字符编码越界的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:27:27