Python实现凯撒密码加密时空格被转为q而非正常保留的问题求助
凯撒密码空格异常转换问题排查
问题根因
你当前的代码仅对「大写英文字母」做了单独判断,其余所有字符(包括空格、小写字母、数字、标点等)全部进入小写加密分支处理。空格的ASCII码值为32,当偏移量为3时,计算逻辑如下:(32 + 3 - 97) % 26 +97 = (-62) %26 +97 = 16 +97 = 113,对应字符就是q,和你遇到的输出结果完全吻合。
修复方案
在加密逻辑里新增非字母字符的判断,遇到非字母时直接原样追加到加密结果中即可,修改后的代码如下:
message = input("Message to be encrypted: ") shift = int(input("Number to shift by: ")) def encrypt(message,shift): encryption = "" # 可直接遍历字符,不需要按索引取值 for char in message: # 非字母字符直接保留 if not char.isalpha(): encryption += char elif char.isupper(): encryption += chr((ord(char) + shift - 65) % 26 + 65) else: encryption += chr((ord(char) + shift - 97) % 26 + 97) return encryption print("Encrypted Text:",encrypt(message,shift))
验证效果
输入Secret Message,偏移量填3时,输出结果为Vhfuhw Phvvdjh,和预期完全一致。
内容的提问来源于stack exchange,提问作者cylify
相关产品推荐
相关产品推荐

