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

